2012-07-16 36 views
3

我在調查aurioTouch2示例代碼。
我注意到,當我們分析音頻數據時,我們只使用這個數據的第一個緩衝區,而不使用其他緩衝區。 在void FFTBufferManager::GrabAudioData(AudioBufferList *inBL)功能:爲什麼我們只使用aurioTouch項目中的第一個緩衝區

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數據?

回答

5

由於只有1在iPhone麥克風,在2信道立體聲的緩衝器的樣品(L和R)是相同的。由於第二個緩衝區只是冗餘的(或者在某些配置中爲空),因此不需要再次分析那些數據。

0

可能是,我錯了,但現在有差異,使用什麼緩衝區。您只有2個緩衝區: mBuffers [0]和mBuffers 1。我試圖在頻譜圖中使用緩衝區0,並使用緩衝區1(發出相同的聲音)。使用緩衝區0完成圖像的左側部分;右半部分 - 使用緩衝區1(在創建快照時創建右峯)。

所以,你可以看到,沒有區別。

enter image description here

+0

我也試圖在我的應用程序中集成auriotouch項目。我一直在嘗試很長時間,但仍然無法弄清楚。那麼,你能幫我解決這個問題嗎? – 2013-03-27 14:38:23

相關問題