私は 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 (「強度」) を測定したいだけです (例として)。したがって、ローパスフィルターが必要です。
私は長い間グーグルをしてきましたが、私の問題は、明確な投稿、チュートリアル、または明らかな解決策が見つからないことです。私のように聞こえるほとんどすべての問題は、その下にランダムなコードがあり、コメントが不足しているか、コメントがないため、すべてのマジックナンバーがそこで何をしているのか、そしてそれらが何を意味するのかを理解できません..
誰かがここで私を正しい方向に押してくれますか? 私の場合、コードを理解したいだけでなく、実際のサンプルを実行するだけではないことに注意してください。
ありがとう