iPhone音频分析

7

我正在研究开发一款iPhone应用程序,可能涉及对来自标准电话麦克风接收到的音频进行“简单”的分析。具体来说,我对麦克风捕捉到的高音和低音感兴趣,其他中间的音调对我来说并不重要。

是否有已经实现这一功能的应用程序(只是为了让我看看它的能力)?我该从哪里开始编写这样的代码呢?

感谢您的帮助。


太棒了,感谢大家的回复。我还没有开始运行这个应用程序,所以在我运行之前,我不知道哪个答案是正确的。 - Honus Wagner
4个回答

9

请参考音频队列框架。这是我用来获取高水位标记的方法:

AudioQueueRef audioQueue; // Imagine this is correctly set up
UInt32 dataSize = sizeof(AudioQueueLevelMeterState) * recordFormat.mChannelsPerFrame;
AudioQueueLevelMeterState *levels = (AudioQueueLevelMeterState*)malloc(dataSize);

float channelAvg = 0;

OSStatus rc = AudioQueueGetProperty(audioQueue, kAudioQueueProperty_CurrentLevelMeter, levels, &dataSize);
if (rc) {
    NSLog(@"AudioQueueGetProperty(CurrentLevelMeter) returned %@", rc);
} else {    
    for (int i = 0; i < recordFormat.mChannelsPerFrame; i++) {
        channelAvg += levels[i].mPeakPower;
    }
}
free(levels);

// This works because one channel always has an mAveragePower of 0.
return channelAvg;

您可以通过kAudioQueueProperty_CurrentLevelMeterDB以dB自由比例的形式获得峰值功率,也可以将其作为介于[0.0、1.0]区间的浮点数获得(使用kAudioQueueProperty_CurrentLevelMeter)。


4
不要忘记先为AudioQueue激活级别计量功能:
UInt32 d = 1;
OSStatus status = AudioQueueSetProperty(mQueue, kAudioQueueProperty_EnableLevelMetering, &d, sizeof(UInt32));

2

查看“SpeakHere”示例代码。它将向您展示如何使用AudioQueue API录制音频。它还包含一些代码来分析实时音频以显示电平计。

实际上,您可能能够使用大部分电平计代码来响应“高峰”和“低谷”。


0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接