Swift AVAudioEngine: изменение устройства ввода звука для MacOS - PullRequest
0 голосов
/ 15 октября 2018

Я пытаюсь изменить устройство ввода, используемое для прослушивания входящего звука.Я пробовал несколько решений, но большинство из них заканчивалось следующей ошибкой при подготовке и запуске аудио-движка:

AVAEInternal.h:82:_AVAE_CheckAndReturnErr: required condition is false: [AVAudioEngineGraph.mm:1295:Initialize: (IsFormatSampleRateAndChannelCountValid(outputHWFormat))]

Текущий (упрощенный) код:

var engine = AVAudioEngine()

var inputDeviceID: AudioDeviceID = 41 // another audio input device
let sizeOfAudioDevId = UInt32(MemoryLayout<AudioDeviceID>.size)
let error = AudioUnitSetProperty(engine.inputNode.audioUnit!, kAudioOutputUnitProperty_CurrentDevice, kAudioUnitScope_Global, 0, &inputDeviceID, sizeOfAudioDevId)
if error > 0
{
    print(error)
}

let inputNode = engine.inputNode
engine.connect(inputNode, to: engine.mainMixerNode, format: nil)
engine.connect(engine.mainMixerNode, to: engine.outputNode, format: nil)

engine.prepare()
do
{
    try engine.start()
}
catch
{
    print("Failed to start the audio input engine: \(error)")
}

AudioDeviceId (41) правильный, потому что использование случайного числа приводит к различным ошибкам.

Что я делаю не так?

1 Ответ

0 голосов
/ 18 октября 2018

Я не могу проверить ваш код должным образом из-за аппаратных проблем.Какая строка выдает ошибку?

Чего именно вы пытаетесь достичь?Прошло много времени с тех пор, как я посмотрел на AVAudioEngine, но я не думаю, что необходимо подключать узлы встроенного движка.По крайней мере, не вывод.

Из документов для mainMixerNode:

При первом обращении к свойству звуковой движок создает основной микшер-одиночка иподключает его к выходному узлу по требованию.

Я бы также попробовал проверить формат узлов-нарушителей с помощью node.outputFormat(forBus: 0) и, возможно, явно установить формат при установлении соединений, как в этот ответ.

...