2014-11-25 19 views
0

我正在使用AudioComponentInstance audioUnit在iOS,Liniar PCM上錄製麥克風,並使用各種採樣率(可從app進行配置)。怪異的部分是,它對11025,22050和44100工作正常,但對8000不起作用。它沒有提供任何錯誤或者什麼,我只是在回調中沒有收到任何東西。 此外,測試與9600,它不工作。iOS麥克風捕捉LPCM無法工作在8 kHz的採樣率下

有人知道這個的原因嗎? 我

status = AudioUnitInitialize(audioUnit); 
status = AudioOutputUnitStart(audioUnit); 

如果需要,我可以提供更多(全部)的代碼啓動會話,但我不認爲這是相關的代碼。

UPDATE

一些更多的測試後,我發現我在錄音回調使用緩衝區的大小是一個問題。在回調我叫

status = AudioUnitRender([instance audioUnit], 
          ioActionFlags, 
          inTimeStamp, 
          inBusNumber, 
          inNumberFrames, 
          entry->bufferList); 

看來inNumberFrames是186還是185,我創建了一個緩衝帶128.但是,現在它還是老樣子,狀態-50失敗的4超過了5倍。我將緩衝區大小設置爲256,512,186,但行爲相同。結果是錄製失真,因爲幀丟失了。

回答

0

好吧,自己找出答案。由於一些不明的原因,據報道186個幀被回調所準備的幀太多了。在AudioUnitRender()的調用中將值替換爲185後,它的功能就像魅力一樣。 看起來有一個bug和一些特定的事件CoreAudio報告一個額外的框架就緒。

對於更高的頻率,問題並不存在,因爲幀的數量總是恆定的,並且功率爲2(256,512,1024)