在 iPhone 上的音频输入回调函数中,我得到了 1024 个样本缓冲区。我需要将它们保存大约 3 秒的输入声音。这意味着每个缓冲区是 23 毫秒,所以每秒或多或少 50 个缓冲区,所以我有这个数组:
int16_t buffersRing[200][1025];
每个回调都填充了数据:
static OSStatus recordingCallback(void *inRefCon,
AudioUnitRenderActionFlags *ioActionFlags,
const AudioTimeStamp *inTimeStamp,
UInt32 inBusNumber,
UInt32 inNumberFrames,
AudioBufferList *ioData)
{
AudioBuffer buffer;
buffer.mNumberChannels = 1;
buffer.mDataByteSize = inNumberFrames * 2; //* sizeof(SInt16) ?
buffer.mData = NULL;
AudioBufferList bufferList;
bufferList.mNumberBuffers = 1;
bufferList.mBuffers[0] = buffer;
OSStatus status;
status = AudioUnitRender(audioUnit,
ioActionFlags,
inTimeStamp,
inBusNumber,
inNumberFrames,
&bufferList);
int16_t *q = (int16_t *)(&bufferList)->mBuffers[0].mData;
buffersRing[ringNum][0]=inNumberFrames;
for( int k=1;k<inNumberFrames+1;k++)
buffersRing[ringNum][k]=q[k-1];
我可以看到它以某种方式占用了很多内存。(数组),我认为填充它们的时间也太多了。我想知道是否有更好的方法来保存 3-4 秒的所有缓冲区,以便稍后处理它们。谢谢 。