当手机在耳机上发出噪音时,我需要找到一种获取当前音频输出音量的方法,此值将转换为分贝级别。除了看似任意的音量设置级别之外,android API似乎没有任何方法可以访问恒定的音量级别,但我没有看到将其转换为标准分贝级别或“响度”测量的方法。我已经看到了一些使用麦克风的方法,但是它不能很好地用于耳机。
有没有人知道一种方法来测量要比较的最大可能分贝(或某些标准)输出电平,或者可能发送到耳机的电压?
欢迎提供帮助。
答案 0 :(得分:5)
请注意'deciBel'这个词有many different meanings。它是表示相对于参考点的一些量(例如强度/功率/响度)的手段。对于设备内部或音频应用中的音频信号,峰值电平为0dB。当从扬声器发出声音时,感知响度被测量为Sound Pressure Level,通常被描述为'dB(SPL)'(或加权变体,例如dBA)。当您看到摇滚音乐会等值的表格为100dB时,这就是正在描述的SPL。该测量本身相对于参考水平。
因此API中可用的是音频数据缓冲区,您可以从中轻松获得原始信号(最大值为0dB)的音频电平。但是,您无法轻松将其转换为物理响度,因为这取决于硬件。一种型号的手机和下一款手机的型号会有所不同,也取决于耳机。这样做的唯一方法是通过SPL测量仪进行测量来校准手机,但这会给你一个只能在这个特定手机上给出合理结果的结果。
答案 1 :(得分:0)
我这样做:
SLmillibel gain_to_attenuation(float volume)
{
SLmillibel volume_mb;
if(volume>=1.0f) volume_mb=SL_MILLIBEL_MAX;
else if(volume<=0.02f) volume_mb=SL_MILLIBEL_MIN;
else
{
volume_mb=M_LN2/log(1.0f/(1.0f-volume))*-1000.0f;
if(volume_mb>0) volume_mb=SL_MILLIBEL_MIN;
}
return volume_mb;
}