2010-01-21 263 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));