【发布时间】:2013-03-18 14:52:15
【问题描述】:
我正在开发一款适用于 iPad 的应用程序,我想分析我正在播放的视频中的音频。使用 MTAudioProcessingTap 一切顺利。 目前我有一些测试代码来测试/测量左右声道的音量。这一切进展顺利:
void process(MTAudioProcessingTapRef tap, CMItemCount numberFrames,
MTAudioProcessingTapFlags flags, AudioBufferList *bufferListInOut,
CMItemCount *numberFramesOut, MTAudioProcessingTapFlags *flagsOut)
{
OSStatus err = MTAudioProcessingTapGetSourceAudio(tap, numberFrames, bufferListInOut,
flagsOut, NULL, numberFramesOut);
if (err)
NSLog(@"Error from GetSourceAudio: %ld", err);
float leftVolume, rightVolume;
for (CMItemCount i = 0; i < bufferListInOut->mNumberBuffers; i++)
{
AudioBuffer *pBuffer = &bufferListInOut->mBuffers[i];
int cSamples = numberFrames * pBuffer->mNumberChannels;
float *pData = (float *)pBuffer->mData;
float rms = 0.0f;
for (int j = 0; j < cSamples; j++)
{
rms += pData[j] * pData[j];
}
if (cSamples > 0)
{
rms = sqrtf(rms / cSamples);
}
if (0 == i)
{
leftVolume = rms;
}
if (1 == i || (0 == i && 1 == bufferListInOut->mNumberBuffers))
{
rightVolume = rms;
}
}
NSLog(@"Left / Right Volume: %f / %f", leftVolume, rightVolume);
}
但出于此应用程序的目的,我希望它仅测量 0-80Hz 范围内的 RMS(“强度”)(例如)。因此,我需要一个低通滤波器。
我已经在谷歌上搜索了很长时间,但我的问题是我找不到任何明显的帖子、教程或解决方案。几乎每个听起来有点像我的问题都有一段随机的代码,其中包含糟糕或缺少 cmets,所以我无法弄清楚所有幻数在那里做了什么,以及它们的含义..
有人能把我推向正确的方向吗?请注意,在我的情况下,我确实想了解代码,而不仅仅是使用工作示例。
谢谢
【问题讨论】:
标签: ios core-audio measurement lowpass-filter