2010-01-21 265 views
7

我正在研究开发一个iPhone应用程序,它可能会涉及对标准手机麦克风收到的音频进行“简单”分析。具体来说,我对麦克风图像的高点和低点感兴趣,而且真正的一切都与我无关。

有没有这样做的应用程序(只是让我可以看到它的能力)?我应该在哪里开始使用这些代码?

感谢您的帮助。iPhone音频分析

+0

好极了,谢谢大家的回复。我还没有到处解决应用程序,所以我恐怕我不知道谁的答案是正确的,直到我做。 – 2010-01-22 16:58:57

回答

9

请看Audio Queue framework。这是我用它来获得一个高水位标记:

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)得到的峰值功率,或简称为在区间[0.0,1.0](带有kAudioQueueProperty_CurrentLevelMeter)的浮动。

+0

明智的答案和示例代码非常有用。 – 2011-07-30 08:53:04

2

检查'SpeakHere'示例代码。它会告诉你如何使用AudioQueue API录制音频。它还包含一些代码来分析音频实时显示电平表。

您可能实际上可以使用大部分电平表代码来响应“高点”和“低点”。

3

别忘了先激活级计量为AudioQueue:

UInt32 d = 1; 
OSStatus status = AudioQueueSetProperty(mQueue, kAudioQueueProperty_EnableLevelMetering, &d, sizeof(UInt32));