簡體   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