我显示用于记录和播放该记录的音频电平表。级别值为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/