2009-10-02 62 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次,并更新进度条和记录级别。似乎工作得很好。