为什么我们只使用aurioTouch项目中的第一个缓冲区

Pau*_* T. 3 iphone audio fft frequency ios

我正在调查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);
Run Code Online (Sandbox Code Playgroud)

在功能上

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);
}
Run Code Online (Sandbox Code Playgroud)

问题是为什么我们忽略inBL-> mBuffers 1 .mData中的数据?

hot*_*aw2 5

由于iPhone上只有1个麦克风,因此2个立体声通道缓冲区(L和R)中的样本完全相同.由于第二个缓冲区只是冗余(或者在某些配置中为空),因此不需要再次分析那些数据.