我正在使用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
- 在相同的条件下相同的错误消息
后
AudioKit.output = AKOscillator()
AudioKit.start()
尝试;
do{
try AudioKit.stop()
try AudioKit.shutdown()
AudioKit.output = nil
}catch{
print(error)
}