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)中的样本是相同的。由于第二个缓冲区只是多余的(或在某些配置中为空),因此不需要(再次)分析那里的数据。

于 2012-07-17T22:25:42.823 回答
0

可能是,我错了,但现在有区别,使用什么缓冲区。您只有 2 个缓冲区: mBuffers[0] 和 mBuffers 1。我尝试在频谱图中使用缓冲区 0 而不是缓冲区 1(发音相同)。使用缓冲区 0 完成了图像的左侧部分;右侧部分 - 使用缓冲区 1(在制作快照期间产生了右侧峰值)。

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

在此处输入图像描述

于 2012-07-17T08:00:29.430 回答