【问题标题】:iPhone - show audio record feedback using AVAudioRecorderiPhone - 使用 AVAudioRecorder 显示录音反馈
【发布时间】:2010-12-03 06:25:33
【问题描述】:

我正在使用 AVAudioRecorder 类录制到 wav 文件。我想实现一个显示录音级别的录音反馈(如 SpeakHere 示例)。

我确实浏览了 SpeakHere 示例,但无法理解录音电平是如何更改的。有人可以指导我需要做什么吗?

谢谢。

【问题讨论】:

    标签: iphone avaudiorecorder


    【解决方案1】:

    如果您使用的是 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
    

    【讨论】:

    • 但是使用这些只会让我得到值。 SpeakHere 究竟是如何使用 Core Animation 来显示录音电平条的?谢谢。
    • 更简单的方法是什么?能否请您也包括在内!
    • 最简单的使用方法有十一个不同的 png 并使用它们,每个级别一个从 0-10 表示级别。然后是 UIProgressBar。如果你想要在显示当前关卡的同时显示最大关卡,那么你可以使用一个 png 作为背景,一个 png 作为一个条形图,并绘制几次条形图以显示水平,然后将最高的条保持几秒钟以达到最大值,然后将其淡出。除了绿色条之外,您还可以使用红色条来表示超出限制的值。
    【解决方案2】:

    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 次,并使用记录级别更新进度条。看起来效果不错。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-11-03
      • 1970-01-01
      • 2012-11-24
      • 1970-01-01
      • 2011-07-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多