繁体   English   中英

立体声麦克风直通AVAudioEngine?

[英]Stereo mic passthrough with 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

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

只有AVAudioEngine的inputNode和outputNodes具有固定格式。 连接到/来自这些时使用nil 混音器将隐式地在输入和输出格式之间进行转换。 连接到microphoneInputMixer使用nil ,并从microphoneInputMixer使用所需的格式。 mainMixerNode将采用任何输入格式,并且无法设置其输出格式。

let 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)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM