objective-c - 如何使iPhone的录音和播放音频电平表看起来相同?

标签 objective-c iphone audio volume

我显示用于记录和播放该记录的音频电平表。级别值为0-1.0。我在屏幕上绘制一个表示0-1.0值的条。要获取录音的音频级别,请使用:

OSStatus status = AudioQueueGetProperty(aqData.mQueue, kAudioQueueProperty_CurrentLevelMeter, aqLevelMeterState, &levelMeterStateDataSize);

float level = aqLevelMeterState[0].mAveragePower;

对于回放,我使用:
// soundPlayer is an AVSoundPlayer
float level = [soundPlayer averagePowerForChannel:0];

我将等级标准化为0-1.0。

现在,显示栏时它们看起来非常不同。记录条形图条更多地位于低端,而回放条形表则在播放相同的已记录音频时更多地位于中间。

我试图使两个仪表看起来一样,但是我对音频还很陌生。我进行了一些研究,并且知道记录返回的是RMS值,而回放返回的是以分贝为单位。

一位精通音频的人可以将我指向链接或文档,或者给我一些提示以使这两个值有意义,以便使我开始使它们看起来相同吗?

最佳答案

它是给定计时器间隔的RMS或均方根。均方根值是通过将每个信号值的平方求和,除以要获取均值的样本数,然后取均值的平方根来计算的。

     uint64 avgTotal;
    for(int i =0; i < sampleCount; i++)
       avgTotal+= (sample[i]*sample[i])/(uint64)sampleCount; //divide to help with overlfow

    float rms = sqrt(avgTotal);

您将必须充分了解正在播放的数据才能获得信号值。您考虑的时间持续时间应该没什么大不了的。 50-80ms应该可以做到。

关于objective-c - 如何使iPhone的录音和播放音频电平表看起来相同?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5198387/

相关文章:

objective-c - 在 NSMenu 打开时捕获按键事件

objective-c - 您如何为大纲 View 提供交替的行颜色?

iphone - 如何为 iPhone 构建静态库?

ios - 更改工具栏高度时如何防止按钮向右移动?

audio - 为什么某些wav文件的数据子 block 会减少2个字节?

iphone - NSInternalInconsistencyException - 无法在 bundle 中加载 NIB

ios - 根据每个段中的标题更改分段控件的宽度?

iphone - 将 CGAffineTransform 应用于 CGPath

android - 音频音调和速度修改

Java 音频可视化工具 - 如何捕获实时声音输出到扬声器?