2017-09-21 57 views
0

我用AUMixer構建了AUGraph,當通過iPhone7plus上的回調播放流時,音頻播放聽起來很糟糕。您可以聽到音頻和正在說的內容,但它非常粗糙。如果我在iPhone6上構建並運行,那聽起來很好。AUG-> pcm轉換後的音頻流在iPhone7plus上聽起來波濤洶涌,但不是iPhone6

我也有一個單獨的音頻單元,沒有調音臺,在iPhone7和iPhone6上聽起來不錯,但我當然失去了調音臺所需的功能。我正在使用相同的AudioStreamBasicDescription來設置這兩個設置(帶有調音臺的圖形和單數audiounit)

想法爲什麼它聽起來很糟糕,特別是與我的iPhone7 plus上的圖形?

My current ASBD: 
_pcmASBD AudioStreamBasicDescription 
mSampleRate Float64 44100 
mFormatID AudioFormatID 1819304813 
mFormatFlags AudioFormatFlags 12 
mBytesPerPacket UInt32 4 
mFramesPerPacket UInt32 1 
mBytesPerFrame UInt32 4 
mChannelsPerFrame UInt32 2 
mBitsPerChannel UInt32 16 
mReserved UInt32 0 

我做AAC到PCM轉換,然後餵養的數據到AURenderCallback,然後最後一個由AudioUnit架構發揮出了pendingBufferList。

我需要使用混音器,因爲我想控制音量,所以一個單獨的AudioUnit方法(它不會顯示此錯誤,但使用相同的回調和一切)不適用於我,因爲我不喜歡調製音頻通過影響原始數據流。

編輯:

將更多的代碼和想法加入到這個有希望解決這一問題。

我使用AudioConverter處理AAC的傳入流,然後將其轉換爲LPCM,然後將它饋送到我的AudioBufferList中,該聲音在audiounit圖渲染過程中被填充。

我注意到,如果我去48Khz的(編碼然後流) - > 48kHz的(接收流,解碼,播放),這聽起來不錯,我的音頻渲染PROC顯示1024

inNumberFrames如果我去的44.1kHz - > 48khz它聽起來很scrat((我的音頻單元圖表使聲音是正確的音高,但由於採樣率轉換器我放入),但音頻渲染過程顯示inNumberFrames爲941或940

我覺得這可能是什麼hotpaw2正在談論,但是當我將我的AudioBufferList的大小設置爲4 * inNumberFrames的倍數時,它仍然聽起來很scrat。。

@ hotpaw2?

回答

0

檢查硬件採樣率。在很多較新的iOS設備上,硬件音頻採樣率可以默認爲48000,而不是44100,具體取決於插入的內容或以前播放的音頻。如果是這樣,並且您希望的格式是44100,那麼重新採樣器將提供不同的奇數長度的緩衝區。期望固定或者甚至是長度緩衝的音頻單元回調可能會因此出現問題。

解決這個問題的方法可能是檢查硬件採樣率。如果它是48000,那麼將您的格式設置爲相同,因此不需要重新採樣。還要確保所有音頻上下文回調塊都能處理不同的奇數長度/ frameCount的AudioBufferList緩衝區。

+0

感謝您的意見,我檢查了硬件採樣率,並確保他們使用支持的硬件(的確是48000)我仍然有問題。我收到一個AAC流,我將音頻轉換到PCM上,然後通過我的AUGraph播放。使用單一的AudioUnitComponent,它聽起來使用相同的回調邏輯找到,我用這兩個邏輯填充pendingBufferList,但只有Graph似乎顯示了這個問題。我只是使用單數AudioUnitComponent,但我需要使用該圖形來進行音量混合。 – theprojectabot

+0

我已更新我的原始問題?有什麼想法嗎? – theprojectabot

相關問題