首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >致命错误: AudioKit:无法启动引擎。AudioKit.start()

致命错误: AudioKit:无法启动引擎。AudioKit.start()
EN

Stack Overflow用户
提问于 2018-02-01 19:02:37
回答 1查看 309关注 0票数 1
代码语言:javascript
复制
import UIKit

import Photos

import AudioKit

import AudioKitUI

class VoicesController: CaptureContentController {
    @IBOutlet weak var nodeOutputPlot: AKNodeOutputPlot!

    @IBOutlet weak var recordButton: UIButton!

    @IBAction func recordButtonAction(_ sender: UIButton, forEvent event: UIEvent) {
        guard let phase = event.allTouches?.first?.phase else {
            return
        }

        if phase == .began {
            try? nodeRecorder.record()
        }

        if phase == .ended {
            nodeRecorder.stop()

            try? audioPlayer.reloadFile()

            let fileName = NSUUID().uuidString + ".wav"
            audioPlayer.audioFile.exportAsynchronously(name: fileName, baseDir: .documents, exportFormat: .wav, callback: { [weak self] (audioFile, error) in
                if let error = error {
                    print(#line, error)

                    return
                }

                //                // FIXME:
                //                if let url = audioFile?.avAsset.url {
                //                    _ = PHAssetChangeRequest.creationRequestForAssetFromVideo(atFileURL: url)!
                //                    // creationRequest.location
                //                }

                if let fileName = audioFile?.avAsset.url.lastPathComponent {
                    let asset = VPFAsset()
                    asset.mediaType = .audio
                    asset.urlString = fileName
                    asset.thumbUrlString = ""

                    self?.captureDelegate?.append(asset)
                }
            })
        }
    }

    var audioPlayer: AKAudioPlayer!

    var nodeRecorder: AKNodeRecorder!

    var micMixer: AKMixer!

    var mainMixer: AKMixer!

    var booster: AKBooster!

    var moogLadder: AKMoogLadder!

    let microphone = AKMicrophone()

    @objc func didBecomeActive(_ notification: Notification) {
        AudioKit.start()
    }



@objc func willResignActive(_ notification: Notification) {
    AudioKit.stop()
}

override func viewDidLoad() {
    super.viewDidLoad()
    // Do any additional setup after loading the view.
    AKAudioFile.cleanTempDirectory()

    AKSettings.bufferLength = .medium

    do {
        try AKSettings.setSession(category: .playAndRecord)
    } catch {
        print(error)
    }

    AKSettings.defaultToSpeaker = true

    nodeOutputPlot.node = microphone
    micMixer = AKMixer(microphone)
    booster = AKBooster(micMixer)

    booster.gain = 0
    nodeRecorder = try? AKNodeRecorder(node: micMixer)
    if let audioFile = nodeRecorder.audioFile {
        audioPlayer = try? AKAudioPlayer(file: audioFile)
        audioPlayer.completionHandler = {
            print(#line)
        }
    }

    moogLadder = AKMoogLadder(audioPlayer)
    mainMixer = AKMixer(moogLadder, booster)
    AudioKit.output = mainMixer

    AudioKit.start()

    NotificationCenter.default
        .addObserver(self, selector: #selector(didBecomeActive), name: .UIApplicationDidBecomeActive, object: nil)

    NotificationCenter.default
        .addObserver(self, selector: #selector(willResignActive), name: .UIApplicationWillResignActive, object: nil)
}

override func didReceiveMemoryWarning() {
    super.didReceiveMemoryWarning()
    // Dispose of any resources that can be recreated.
}

deinit {
    print("deinit VoicesController")

    AudioKit.stop()

    NotificationCenter.default
        .removeObserver(self)
}

}

大家好,我的英语不好,我是一个中国人,我很喜欢AudioKit,因为它很方便,但是在最近的系统更新中,我遇到了崩溃,但并不总是崩溃,似乎只崩溃过一次,之后没有崩溃,我做了一个截图,因为系统并不总是更新,希望能得到帮助,非常感谢,我是一个新手,请指教

这是截图

线程1:致命错误: AudioKit:无法启动引擎。错误:错误输出代码=-10875 "(null)“AUGraphParser::InitializeActiveNodesInOutputChain(ThisGraph,{失败的Domain=com.apple.coreaudio.avfaudio =UserInfo= call=err,*GetOutputNode(),isOutputChainActive)}。

EN

回答 1

Stack Overflow用户

发布于 2018-02-02 02:10:12

在最新的开发分支(尚未发布)中,必须将AudioKit.start()包装在do try catch块中

代码语言:javascript
复制
do {
    try AudioKit.start()
} catch {
    AKLog("Something went wrong.")
}

AudioKit附带的所有示例都展示了如何实现此更改。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48561184

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档