2012-11-16 23 views
2

我想比較我正在爲學校工作的iPhone應用程序的兩個音頻文件的平均音量(以dB爲單位)。我正在使用Objective-C的Xcode。如何使用Objective-C確定音頻文件的平均音量?

經過一番研究,我在AVFoundation Framework中發現了「averagePowerForChannel:」,但我無法弄清楚它是如何工作的。以下是一些代碼:

NSString *stringPath = [NSBundle mainBundle]pathForResource:wavname ofType:@"wav"]; 
NSURL *url = [NSURL fileURLWithPath:stringPath]; 
avPlayer = [[AVaudioPlayer alloc]initWithContentsOfUrl:url error:nil]; 
[avPlayer play]; 

上面的代碼播放名爲'wavname'的.wav文件。我該如何去確定其平均量?

[avPlayer averagePowerForChannel:0]; 

如果我只是在上面添加te代碼,它會返回-160.000。我猜,這是音頻文件開始時的音量級別。

如何正確使用它?因爲目前我沒有看到它被稱爲「averagePower」的原因,因爲它似乎只是在某個時間點檢查音量。

+2

「要獲得當前的平均功率值,您必須在調用此方法之前調用'updateMeters'方法」 - 您嘗試過嗎? – moonwave99

+0

謝謝你的回覆@ moonwave99。我補充說: '[avPlayer updateMeter];' 但是,它仍然返回-160.000。我想我可以創建一個循環,每隔一段時間檢查一次數值並計算平均音量。但是,當我需要自己做這件事時,爲什麼叫做averagePower? – RoelfMik

+0

回答我自己的問題: 體積測量總是一個平均值。因爲,您需要多個樣本值來確定一個體積。 – RoelfMik

回答

0

averagePowerForChannel:僅返回播放或記錄頻道的平均功率。喵,它分析整個文件不是很有用。該方法對電流計值有用(例如)。

來分析文件,讀取其所有樣本數據(例如使用ExtAudioFile API),計算其quadratic mean(對於RMS)。

+0

感謝您的回覆@justin! (: 我找到了擴展音頻文件服務參考,並期望在那裏找到一些有用的東西!:) – RoelfMik

+0

@RoelfMik歡迎您。也可以看看使用'ExtAudioFileCreateWithURL'作爲讀取樣本數據起點的示例代碼。 – justin

相關問題