2009-10-02 38 views
2

我正在使用AVAudioRecorder類記錄到一個wav文件。我想要實現一個記錄反饋(如SpeakHere示例),其中顯示了錄製級別。iPhone - 使用AVAudioRecorder顯示音頻記錄反饋

我確實經歷了SpeakHere樣本,但無法理解記錄級別是如何改變的。有人能指導我需要做什麼嗎?

謝謝。

回答

2

如果您正在使用AVAudioRecorder,您可能希望只使用以下方法來獲得的功率電平:

- (float)peakPowerForChannel:(NSUInteger)channelNumber 
- (void)updateMeters 

那些給你繪製的值。有曲線圖的值,但怎麼看SpeakHere樣品它,看到他們的自述更簡單的方法:

AQLevelMeter.h 
AQLevelMeter.mm 

The AQLevelMeter class defines the level meter view for the applcation, displaying the metering data from an AudioQueue object 

LevelMeter.h 
LevelMeter.m 

LevelMeter is a base metering class, providing simple functionality for displaying level data 

GLLevelMeter.h 
GLLevelMeter.m 

GLLevelMeter is a subclass of LevelMeter that uses OpenGL for drawing 

AQRecorder.h 
AQRecorder.m 
+0

但使用這些只會給我的價值。 SpeakHere究竟如何使用Core Animation來顯示錄音電平條?謝謝。 – lostInTransit 2009-10-02 09:26:05

+0

什麼是更簡單的方法?你能否也請包括這一點! – lostInTransit 2009-10-02 16:01:09

+0

最簡單的使用方法是使用十一種不同的png並使用它們,每個級別從0到10代表一個級別。然後是UIProgressBar。如果你想有一些能夠在當前級別的同時顯示最高級別的東西,那麼你可以使用一個PNG作爲背景,一個PNG作爲一個酒吧,並畫幾次酒吧,以顯示級別,並將最高酒吧保留幾秒鐘,然後淡出。你可以有一個紅色的酒吧,除了綠色的酒吧來表示價值超過極限。 – mahboudz 2009-10-02 18:43:32

0

mahboudz的答案是正確的,但我發現,這種方法比「peakPowerForChannel」更加敏感:

- (float)averagePowerForChannel:(NSUInteger)channelNumber 

然後我翻譯的浮點值的0-10與此計算一個較爲有用的規模:(請務必使用MIN和MAX強制執行數爲的範圍內,因爲在罕見的情況下它可以走到0-10之外。)

// 
// Decrease the divisor to increase the responsiveness 
// 
int translatedValue = (averagePowerFloat/6 + 11); 

然後我在後臺線程上有一個循環,每秒調用「updateMeters」10次,並更新進度條和記錄級別。似乎工作得很好。