为啥我们在 aurioTouch 项目中只使用第一个缓冲区
Posted
技术标签:
【中文标题】为啥我们在 aurioTouch 项目中只使用第一个缓冲区【英文标题】: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中的数据?
【问题讨论】:
【参考方案1】:由于您的 iPhone 上只有 1 个麦克风,因此 2 个立体声通道缓冲区(L 和 R)中的样本是相同的。由于第二个缓冲区只是冗余的(或者在某些配置中是空的),因此不需要(再次)分析那里的数据。
【讨论】:
【参考方案2】:可能是,我错了,但现在有所不同,使用什么缓冲区。您只有 2 个缓冲区: mBuffers[0] 和 mBuffers1。我尝试在频谱图中使用缓冲区 0 而不是缓冲区 1(发音相同)。使用缓冲区 0 完成了图像的左侧部分;右侧部分 - 使用缓冲区 1(在制作快照期间产生了右侧峰值)。
所以,你可以看到,没有区别。
【讨论】:
我也在尝试将 auriotouch 项目集成到我的应用程序中。我已经尝试了很长时间,但我仍然无法弄清楚。那么,你能帮我解决这个问题吗?以上是关于为啥我们在 aurioTouch 项目中只使用第一个缓冲区的主要内容,如果未能解决你的问题,请参考以下文章
为啥我在 pandas 列中只得到一个项目(而不是多个项目)?
如何更改 aurioTouch 项目以将录音写入 .caff 或 .wav 文件
AudioBufferList 的 AurioTouch 用途