在我的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秒的所有缓冲区,以便我可以在以后处理它们。 谢谢。