添加AKMicrophone时崩溃

问题描述 投票:5回答:1

我正在使用AudioKit开发一个音频应用程序,它涉及定期停止AudioKit,重新排列或替换AKNode子类链,然后重新启动AudioKit。这一直顺利进行,直到我和AKMicrophone一起尝试。

如果AKMicrophone存在于初始声链中,即当我第一次调用AudioKit.start(时,它工作正常。但是如果我在之前调用AKMicrophone之后的某个时刻将AudioKit.start()放入声音链中,应用程序将在下一个AudioKit.start()调用时崩溃,产生以下错误消息:

...[avae] AVAudioEngine.mm:149:-[AVAudioEngine prepare]: Engine@0x1c0007170: could not initialize, error = -10875
...[mcmx] 338: input bus 0 sample rate is 0
...[avae] AVAEInternal.h:103:_AVAE_CheckNoErr: [AVAudioEngineGraph.mm:1266:Initialize: 
(err = AUGraphParser::InitializeActiveNodesInOutputChain(ThisGraph, kOutputChainOptimizedTraversal, *GetOutputNode(), isOutputChainActive)): error -10875

为了说明,以下代码顺利运行:

    let mic = AKMicrophone()
    if let input = AudioKit.inputDevice {
        try! mic.setDevice(input)
    }
    AudioKit.output = mic
    AudioKit.start()

但如果在调用AudioKit.start()之前它会崩溃:

    AudioKit.output = AKOscillator()
    AudioKit.start()
    AudioKit.stop()

    let mic = AKMicrophone()
    if let input = AudioKit.inputDevice {
        try! mic.setDevice(input)
    }
    AudioKit.output = mic
    AudioKit.start()

有什么方法可以避免这种情况吗?甚至帮助理解错误消息也会有所帮助。谢谢。

编辑:我注意到相同的行为AKStereoInput - 在相同的条件下相同的错误消息

ios avaudioengine audiokit
1个回答
0
投票

AudioKit.output = AKOscillator()
AudioKit.start()

尝试;

do{
   try AudioKit.stop()
   try AudioKit.shutdown()
   AudioKit.output = nil
}catch{
   print(error)
}
© www.soinside.com 2019 - 2024. All rights reserved.