从回调函数中保存音频缓冲区

时间:2013-01-20 11:26:31

标签: ios objective-c c

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

0 个答案:

没有答案