3

aurioTouch2サンプル コードを調査しています。
そして、音声データを分析するとき、このデータの最初のバッファーのみを使用し、他のバッファーは使用しないことに気付きました。void FFTBufferManager::GrabAudioData(AudioBufferList *inBL)関数内:

    UInt32 bytesToCopy = min(inBL->mBuffers[0].mDataByteSize, mAudioBufferSize - mAudioBufferCurrentIndex * sizeof(Float32));
    memcpy(mAudioBuffer+mAudioBufferCurrentIndex, inBL->mBuffers[0].mData, bytesToCopy);

機能中

static OSStatus PerformThru(
                            void                        *inRefCon, 
                            AudioUnitRenderActionFlags  *ioActionFlags, 
                            const AudioTimeStamp        *inTimeStamp, 
                            UInt32                      inBusNumber, 
                            UInt32                      inNumberFrames, 
                            AudioBufferList             *ioData)
if (THIS->displayMode == aurioTouchDisplayModeOscilloscopeWaveform)
{
        AudioConverterConvertComplexBuffer(THIS->audioConverter, inNumberFrames, ioData, THIS->drawABL);
        SInt8 *data_ptr = (SInt8 *)(THIS->drawABL->mBuffers[0].mData);
}

問題は、なぜ inBL->mBuffers 1 .mDataのデータを無視するのかということです。

4

2 に答える 2

5

iPhone にはマイクが 1 つしかないため、2 つのステレオ チャンネル バッファ (L と R) のサンプルは同一です。2 番目のバッファーは単に冗長であるため (または構成によっては空の場合)、そこにあるデータを (再度) 分析する必要はありません。

于 2012-07-17T22:25:42.823 に答える
0

私は間違っているかもしれませんが、使用するバッファに違いがあります。mBuffers[0] と mBuffers 1の 2 つのバッファしかありません。スペクトログラムでバッファ 0 を使用し、バッファ 1 を使用しようとしました (等しい音を発音します)。バッファ 0 を使用して、画像の左側の部分が完成しました。右側の部分 - バッファー 1 を使用 (右側のピークはスナップショットの作成中に作成されました)。

ご覧のとおり、違いはありません。

ここに画像の説明を入力

于 2012-07-17T08:00:29.430 に答える