android – 将ReplayGain值转换为音量调整

我正在尝试将重播增益(即,响应音乐文件中的重放标签)实施到股票
Android / AOSP音乐播放器应用程序中.这只是一个个人项目,但我可以提供它作为补丁或者自己创建一个lib或玩家.我只是在第一次看Track Meain.我的问题的本质可能是我不及数学的事实;)

任务是做两件事:
A)在开始播放之前,将音量钳位到设备最大-14dB(或者更多,某些信号源建议-23dB).
B)在开始播放每个音轨之前,读取其标签并按dB的数量进行调整.

我看到在Android involves logarithm scaling as well中调整播放音量,但由于我是对数的新手,我不确定这是否会让事情变得更容易,或者两次(10倍?)如此困难.

任何人都可以给我一些线索,我缺乏如何将分贝值转换为MediaPlayer.setVolume()的可用参数?谢谢你的任何提示.

编辑:我有一些(可能是不稳定的)断言可能会使连接成为必要,但我非常需要被告知是否有任何一个是harebrained.

> ReplayGain假设目标水平为-14 dBFS == 89dB SPL.因此,我假装这些音阶在上下都是等效的(我知道这是不准确的,但是多么不准确?)
>我将MediaPlayer.setVolume(1.0f,1.0f)(最大音量)视为0dBFS.
>基于(1),我将其等于89 14 = 103dBSPL.
>我将MediaPlayer.setVolume(0.0f,0.0f)(静音)视为0dBSPL,因此我的抽象线性音量标度为0-103.

如果它们保持水,我会将Track Gain值-1.3转换为适当的MediaPlayer.setVolume()参数,如下所示:

>目标响度= 89 – 1.3 = 87.7
> float newVol = 1.0f – (Math.log(103 – 87.7 / Math.log(103))= 0.41143207395167

这远远地走在正确的轨道上吗?

最佳答案 > dBFS代表deciBel Full Sound,因此将其分配到最高级别是完全合理的.

>分贝是表示两个值的比率(的对数)的单位.当你使用dBFS与dBSPL时,你所说的是你使用的参考声压.

> -14 dBFS意味着您使用比参考值小10 ^( – 14/20)倍的声压(即最大可能)
> 89 dBSPL意味着您使用的值比“空气中常用的参考声压p0 =20μPa(RMS)或0.0002达因/ cm2,[5]大10 ^(89/20)倍通常被认为是人类听觉的门槛(大约是3米外飞行的蚊子的声音).“ (来自维基百科).

所以,一旦你在两个尺度之间得到一个共同点,它们就会发展相同.您基本上通过说-14dbFS = 89 dBSPL来定义两个音阶的参考声压之间的比率.

因为乘法量是一个麻烦,我们取这些乘法值的对数,并将它们除以10,这给我们称为分贝的附加值(额外的2因子来自我们比较声压的平方,而不是声压的事实他们自己).

最后,如果你认为你有一个103 dB的范围,以0.0f到1.0f的对数(你的dB)映射(这是Android中播放音量的情况),那么-14dBFS是( 103 – 14)/ 103.

只有当你想要进行线性缩放时,才需要进入log的数学计算:线性刻度上80%的最大声音在输出比例上为1-log(20)/ log(100).

点赞