Я разрабатываю аудиоприложение с 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
- такое же сообщение об ошибке при тех же условиях