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

我正在调查aurioTouch2示例代码。
我注意到,当我们分析audio数据时,我们只使用这个数据的第一个缓冲区,而不使用其他的缓冲区。 在void FFTBufferManager::GrabAudioData(AudioBufferList *inBL)函数中:

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

function

 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中的数据?

由于iPhone上只有1个麦克风,因此2个立体声通道缓冲器(L和R)中的采样是相同的。 由于第二个缓冲区只是冗余的(或者在某些configuration中是空的),所以这些数据不需要再次分析。

可能是,我错了,但现在有区别,使用什么缓冲区。 你只有2个缓冲区:mBuffers [0]和mBuffers 1 。 我尝试在频谱图中使用缓冲区0,并且使用缓冲区1(发出相同的声音)。 使用缓冲区0完成图像的左侧部分; 右半部分 – 使用缓冲区1(在创build快照时创build右峰)。

所以,你可以看到,没有什么区别。

在这里输入图像说明

Interesting Posts