Мне нужно сделать возможность менять устройство ввода для записи на лету во время работы программы (между сеансами записи, а не в процессе записи).Вот код, который, я полагаю, должен сделать это.Но когда я пытаюсь изменить устройство ввода, AKNodeRecorder ничего не записывает (длительность всегда 0), и после попытки вызвать exportAsynchronously на рекордере .audioFile, я всегда получаю следующую ошибку:
[central] 54: ОШИБКА:> avae>AVAudioFile.mm:37: AVAudioFileImpl: ошибка 2003334207
Пытался изменить почти все, но ничего не дает эффекта.Вот код, который меняет устройство ввода.
func setupRecordingChain(_ deviceIndex: Int = 0)
{
AudioKit.stop()
setupInputDevice(for: deviceIndex)
self.micMixer = AKMixer(self.mic)
self.micBooster = AKBooster(self.micMixer)
self.micBooster.gain = 0
do {
self.recorder = try AKNodeRecorder(node: self.micMixer)
}
catch {
//catch error
}
self.mainMixer = AKMixer(self.micBooster)
AudioKit.output = self.mainMixer
AudioKit.start()
}
private func setupInputDevice(for deviceIndex: Int)
{
guard let inputDevices = AudioKit.inputDevices else { return }
let inputDevice = inputDevices[deviceIndex]
do {
try self.mic.setDevice(inputDevice)
} catch {
//catch error
}
}