[英]iOS Microphone capture LPCM not working for a sample rate of 8 kHz
我正在使用AudioComponentInstance audioUnit以各種采樣率(可從應用程序配置)在iOS,Liniar PCM上錄制麥克風。 奇怪的是,它對於11025、22050和44100正常工作,但對於8000則不工作。它不提供任何錯誤或其他信息,我只是在回調中沒有收到任何信息。 另外,還使用9600進行了測試,但無法正常工作。
有人知道原因嗎? 我開始與
status = AudioUnitInitialize(audioUnit);
status = AudioOutputUnitStart(audioUnit);
如果需要,我可以提供更多(全部)代碼,但是我認為這與代碼無關。
UPDATE
經過更多測試后,我發現在錄音回調中使用的緩沖區大小是一個問題。 在回調中,我打電話
status = AudioUnitRender([instance audioUnit],
ioActionFlags,
inTimeStamp,
inBusNumber,
inNumberFrames,
entry->bufferList);
看來inNumberFrames是186或185,我創建了一個帶128的緩沖區。但是現在它仍然失敗,狀態5為5,有4次失敗。 我將緩沖區大小設置為256、512、186,但是行為是相同的。 結果是由於幀丟失,記錄失真。
好吧,我自己找出答案。 由於某些模糊的原因,回調報告的186幀已經准備好了太多。 在對AudioUnitRender()的調用中將值替換為185后,它就像一個符咒一樣工作。 似乎有一個錯誤,有些東西CoreAudio報告說准備好了額外的幀。
對於更高的頻率,這個問題不存在,因為幀數始終是恆定的,並且冪為2(256、512、1024)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.