1

iPhoneのオーディオ入力コールバック関数で、1024個のサンプルバッファを取得しています。入力音を約3秒間保存する必要があります。これは、各バッファーが23ミリ秒であるため、1秒あたり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