为什么我们只使用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右峰)。
所以,你可以看到,没有什么区别。