Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typescript/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 可转换为分贝形式的音频输出电平_Android_Audio_Volume - Fatal编程技术网

Android 可转换为分贝形式的音频输出电平

Android 可转换为分贝形式的音频输出电平,android,audio,volume,Android,Audio,Volume,我需要找到一种方法,当手机在耳机上发出噪音时,获取当前音频输出音量,该值将转换为分贝级。安卓API似乎没有任何方法可以访问除看似任意的音量设置级别之外的恒定音量级别,但我看不到有任何方法可以将其转换为标准分贝级别或“响度”测量值。我已经看到了一些使用麦克风的方法,但是这对耳机不太好 是否有人知道一种方法来测量最大可能的分贝(或某些标准)输出电平以进行比较,或者测量发送到耳机的电压 欢迎您的帮助。请注意,“分贝”一词的含义不尽相同。它是相对于参考点表示某些量(例如强度/功率/响度)的一种方法。对于

我需要找到一种方法,当手机在耳机上发出噪音时,获取当前音频输出音量,该值将转换为分贝级。安卓API似乎没有任何方法可以访问除看似任意的音量设置级别之外的恒定音量级别,但我看不到有任何方法可以将其转换为标准分贝级别或“响度”测量值。我已经看到了一些使用麦克风的方法,但是这对耳机不太好

是否有人知道一种方法来测量最大可能的分贝(或某些标准)输出电平以进行比较,或者测量发送到耳机的电压

欢迎您的帮助。

请注意,“分贝”一词的含义不尽相同。它是相对于参考点表示某些量(例如强度/功率/响度)的一种方法。对于设备内部或音频应用程序中的音频信号,峰值为0dB。当扬声器发出声音时,感知的响度测量为a,通常称为“dB(SPL)”(或加权变量,如dBA)。当您看到诸如100分贝摇滚音乐会等价值表时,这就是所描述的SPL。该测量本身是相对于参考水平的


因此,API中可用的是音频数据缓冲区,从中可以轻松获得原始信号的音频电平(最大为0dB)。但是,您无法轻松地将其转换为物理音量,因为这将取决于硬件。不同型号的手机会有所不同,这也取决于耳机。唯一的方法是用SPL表测量校准手机,但这会给你一个结果,而这个结果只能在这个特定的手机上给出合理的结果。

我这样做:

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;
}
SLmillibel增益到衰减(浮动体积)
{
SLmillibel卷mb;
如果(音量>=1.0f)音量mb=SL毫贝最大值;
如果(volume0)volume_mb=SL_MILLIBEL_MIN;
}
返回卷(mb);
}

由于音量取决于正在播放的文件中的数据以及音量设置,因此这似乎很棘手。在桌面上,我建议你从声卡上的环回接口获取数据并检查音量,但我还没有听说有人在安卓上做过类似的事情。祝你好运:)谢谢,看来我需要它P可能是这些方面的东西,setAudioSource。我不知道它是否能捕获输出。我一直在研究这个问题,但至少看起来它不会捕获耳机的输出,只会捕获从手机扬声器中出来的东西。。。我会继续检查,以确保完全正确。我的手机在插入扬声器后会自动将所有内容从扬声器转发到耳机,因此可能是相同的。我知道了,你认为有没有办法达到近似值,或者这是否太不准确。否,我认为你不能做任何近似的事情,因为这取决于很多因素。谢谢。。。这不是我想要的,但它回答了这个问题,我用我所有的研究证实了这一点……很抱歉,我没有成为更好消息的传递者