[英]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.