【发布时间】:2010-12-03 06:25:33
【问题描述】:
我正在使用 AVAudioRecorder 类录制到 wav 文件。我想实现一个显示录音级别的录音反馈(如 SpeakHere 示例)。
我确实浏览了 SpeakHere 示例,但无法理解录音电平是如何更改的。有人可以指导我需要做什么吗?
谢谢。
【问题讨论】:
我正在使用 AVAudioRecorder 类录制到 wav 文件。我想实现一个显示录音级别的录音反馈(如 SpeakHere 示例)。
我确实浏览了 SpeakHere 示例,但无法理解录音电平是如何更改的。有人可以指导我需要做什么吗?
谢谢。
【问题讨论】:
如果您使用的是 AVAudioRecorder,您可能只想使用以下命令来获取功率级别:
- (float)peakPowerForChannel:(NSUInteger)channelNumber
- (void)updateMeters
这些为您提供了要绘制的值。有更简单的方法来绘制这些值,但要了解 SpeakHere 示例是如何做到的,请参阅他们的 README:
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
【讨论】:
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 次,并使用记录级别更新进度条。看起来效果不错。
【讨论】: