我正在尝试将重播增益(即,响应音乐文件中的重播标签)实施到股票Android / AOSP音乐播放器应用中。这只是一个个人项目,但我可以提供它作为补丁或者自己创建一个lib或玩家。我只是在第一次看Track Meain。我的问题的本质可能是我不及数学的事实;)
任务是做两件事: A)在开始播放之前,将音量钳位到设备最大-14dB(或者更多,某些信号源建议-23dB)。 B)在开始播放每首曲目之前,读取其标签并按dB的数量进行调整。
我看到在Android involves logarithm scaling as well中调整播放音量,但由于我是对数的新手,因此我不确定这是否会让事情变得更容易,或者两次(10倍?)就更难了。
任何人都可以告诉我如何将分贝值转换为MediaPlayer.setVolume()的可用参数的线索吗?感谢您的任何提示。
编辑:我有一些(可能是不稳定的)断言可能会使连接成为必要,但我非常需要被告知是否有任何这些断言。
如果这些保持水,我会将Track Gain值-1.3转换为MediaPlayer.setVolume()的相应参数,如下所示:
这是远程的吗?
答案 0 :(得分:1)
因此,一旦你在两个尺度之间得到一个共同点,它们就会发展相同。您基本上通过说-14dbFS = 89 dBSPL来定义两个音阶的参考声压之间的比率。
因为乘法量表是一个麻烦,我们取这些乘法值的对数,并将它们除以10,这给我们称为分贝的附加值(额外的2因子来自我们比较声压的平方的事实,不是声压本身。)
现在最后,如果你认为你有一个103 dB的范围,以0.0f到1.0f的对数(你的dB)映射(这就是Android中播放音量的情况),那么 - 14dBFS是(103 - 14)/ 103。
只有当您想要进行线性缩放时,才需要进入log的数学:线性刻度上80%的最大声音在输出上为1-log(20)/ log(100)规模。
答案 1 :(得分:1)
我正在研究同样的问题,我想我明白了。
首先要意识到的是,无法通过调整播放器的音量来放大音频文件。你根本做不到。卷从0%到100%,就是这样。
你实际做的是削弱一切。 要做到这一点,你需要决定什么音量应该是0dB。也就是说,音频文件的音量应该是什么,其中没有应用衰减或放大。
假设您希望0dB为60%。这将是你的“基础”。
知道vol% = 100 * 10 ^ (db / 20) - base
,然后我们可以找出我们的公式来获得给定dB值的体积:
vol% = 100 * 10 ^ (REPLAYGAIN_TRACK_GAIN / 20) - 60
您可能还想知道您的dB范围是多少。
我们可以通过从上面的公式中隔离db
变量来实现这一点:
db = 20 * Log(vol% + base) / (Log(2) + Log(5)) - 40
将音量和基值插入前一个公式,我们将得到0%音量(静音)对应-4.44dB和100%(最大音量)对应+ 4.02dB。
这很有用,因为您需要知道公式能够处理的dB值。出于同样的原因,您需要调整vol%
公式,以便“剪切”超出支持范围的dB值:
vol% = Min(100, Max(0, 100 * 10 ^ (REPLAYGAIN_TRACK_GAIN / 20) - 60)