我显示一个音频电平表,用于录制和播放该录音 . 级别值为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值,播放以分贝为单位返回 .
知识渊博的音频人员可以指向链接或文档,或者给出一些提示来理解这两个值,以便我可以开始使它们看起来一样吗?
2 回答
它是给定计时器间隔的RMS或均方根 . 通过将总信号的每个信号值的平方相加来计算RMS,将得到的样本数除以得到均值,然后取平均值的平方根 .
您必须充分了解所播放的数据以获取信号值 . 你考虑的时间的推移应该不重要 . 50-80ms应该这样做 .
分贝以对数方式缩放 . 所以你可能想要一些方程式,例如:
在某个地方,您必须校准scaleFactor以匹配您想要满量程的值 .