Сбой при добавлении AKMicrophone

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


person c_booth    schedule 02.02.2018    source источник


Ответы (1)


После

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

Пытаться;

do{
   try AudioKit.stop()
   try AudioKit.shutdown()
   AudioKit.output = nil
}catch{
   print(error)
}
person Trevor    schedule 25.04.2019