【问题标题】:Why do we use only the first buffer in aurioTouch project为什么我们在 aurioTouch 项目中只使用第一个缓冲区
【发布时间】:2012-07-16 11:18:17
【问题描述】:

我正在调查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->mBuffers1.mData中的数据?

【问题讨论】:

    标签: iphone ios audio fft frequency


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

      • 我也在尝试将 auriotouch 项目集成到我的应用程序中。我已经尝试了很长时间,但我仍然无法弄清楚。那么,你能帮我解决这个问题吗?
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-12-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多