簡體   English   中英

為什么我的iOS錄音回調中的音頻緩沖區未滿?

[英]Why is the audiobuffer not full in my iOS audio recording callback?

音頻記錄按其應有的方式工作:我可以記錄和播放記錄。 唯一奇怪的是,有時會使用未完全填充的緩沖區來調用Callback函數。 我已經在StreamCallback函數中記錄了inNumPackets變量的值,並且序列看起來像這樣:

2048,2048,2048,2048,2048,2048,2048,2048,2048,2048,1568,2048,2048,2048,2048,2048,2048,2048,2048,2048,2010,2048,2048,

當前,處理緩沖區的代碼依賴於固定大小,這意味着每當緩沖區未填充時,我都會得到偽像。

我可以做些什么來始終獲得完整的緩沖區嗎? -還是預期的行為?

我的代碼的一些摘錄:

DataFormat.mFormatID := kAudioFormatLinearPCM;
DataFormat.mSampleRate := 44100;
DataFormat.mChannelsPerFrame := 1;
DataFormat.mBitsPerChannel := 16;
DataFormat.mBytesPerPacket := 2;
DataFormat.mBytesPerFrame := 2;
DataFormat.mFramesPerPacket := 1;
DataFormat.mFormatFlags := kLinearPCMFormatFlagIsSignedInteger OR kLinearPCMFormatFlagIsPacked;

lStatus := AudioQueueNewInput(@DataFormat,@StreamCallback,nil,nil,kCFRunLoopCommonModes,0,fAqDataQueue);
...
//allocate 3 buffers with a buffer size of 2048 packets with 2 bytes per packet
AudioQueueAllocateBuffer(fAqDataQueue,2*2048,fAqDataBuffers[li]);

您不能使用依賴於固定大小的iOS Core Audio緩沖區的處理。 這是因為由於應用程序無法控制的原因,iOS可以自由更改音頻單元緩沖區的大小(例如,由於設備上運行的其他音頻進程需要采樣率重采樣或由於設備的硬件功能,或者為了節省各種電量)模式等)

如果您需要處理固定大小的緩沖區,請對輸入的音頻單元樣本使用無鎖循環FIFO /緩沖區,並輪詢該FIFO以查看其是否包含足夠的樣本用於您的處理步驟。 有關更多詳細信息,請參見此答案

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM