1

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

4

0 回答 0