带有AVAudioEngine的立体声麦克风直通?

时间:2019-04-28 17:45:44

标签: ios swift audio core-audio avaudioengine

我正在尝试使用AVAudioEngine创建一个图形,该图形从设备麦克风获取输入并支持立体声输出。

现在图形如下:

[audioEngine.inputNode] --> [Mic input mixer node] --> [Summing mixer node] --> [audioEngine.mainMixerNode]

由于audioEngine.inputNode的输出为1 ch, 48000 Hz, Float32,因此我想在麦克风之后通过混音器节点运行,这样我就可以 a)将信号发送到多个音频单元,然后 b)转换为立体声信号以进行更有趣的路由,平移等……

但是,只有当我设置整个图使其与1 ch, 48000 Hz, Float32的输入格式匹配时,音频直通才起作用,如下所示:

audioEngine.connect(microphoneNode!, to: microphoneInputMixer, format: inputSessionFormat!)
audioEngine.connect(microphoneInputMixer, to: summingMixer, format: inputSessionFormat!)
audioEngine.connect(summingMixer, to: mainMixerNode!, format: inputSessionFormat!)

我有两个格式变量,单声道inputSessionFormat和立体声outputSettingFormat,即2 ch, 44100 Hz, Float32, non-inter

根据the docs的了解,AVAudioMixerNode应该处理格式转换,但是在这种情况下,除非所有连接都设置为相同(单声道)格式,否则它拒绝播放音频。我也用AVAudioConnectionPoint测试了此代码,无济于事。

1 个答案:

答案 0 :(得分:0)

仅AVAudioEngine的inputNode和outputNode具有固定格式。连接到/从它们连接时,请使用nil。混音器将在其输入和输出格式之间进行隐式转换。使用microphoneInputMixer连接到nil,并使用所需格式从microphoneInputMixer连接到mainMixerNodelet desiredFormat = AVAudioFormat(standardFormatWithSampleRate: 44100, channels: 2) audioEngine.connect(microphoneNode!, to: microphoneInputMixer, format:nil) audioEngine.connect(microphoneInputMixer, to: summingMixer, format: desiredFormat) audioEngine.connect(summingMixer, to: mainMixerNode!, format: desiredFormat) 将采用任何输入格式,并且无法设置其输出格式。

{{1}}