我正在尝试在Android/AOSP音乐播放器应用程序中实现重放增益(即响应音乐文件中的重放增益标记)。这只是一个个人项目,但我可以提供它作为一个补丁,或可能是我自己的自由或播放器。我一开始只看赛道的增益。我问题的本质很可能是因为我数学不及格;
任务是做两件事:( A)在回放开始之前,将音量夹到最大-14分贝(或更多,一些消息人士建议-23分贝)。( B)在开始播放每一首曲目之前,读取其标记并按该数量的dB进行调整。
我看到了在Android involves logarithm scaling as well中调整播放音量,但由于我刚到对数,我不确定这是否使事情变得更简单或两倍(10倍?)也一样难。
有谁能告诉我我在如何将分贝值转换为MediaPlayer.setVolume()可用的参数方面所缺乏的线索?谢谢你的建议。
编辑:我有一些(可能是摇摇欲坠的)断言,这些断言可能会导致连接的需要,但我迫切需要被告知,如果其中任何一个是轻率的。
如果这些参数成立,我会将跟踪增益值-1.3转换为MediaPlayer.setVolume()的适当参数,如下所示:
这条路走得对吗?
发布于 2014-11-28 02:01:10
因此,一旦你在你的两个天平之间找到了一个共同点,它们就会进化成相同的。您基本上定义了两个标度的参考声压之间的比率,即-14 14dbFS= 89 dBSPL。
因为乘法尺度是一个麻烦,我们取这些乘法值的对数除以10,它给我们的加值称为分贝(额外的2因子来自我们比较声压的平方,而不是声压本身)。
现在,最后,如果考虑到您的范围为103个dB,其范围是从0.0f到1.0f之间的对数映射(和dB一样)(这就是在Android中播放音量的情况),那么-14 14dBFS是(103-14)/103。
你需要进入对数的数学,只有当你想用它建立一个线性的音阶:在线性音阶上,最大声音的80%是输出比例尺上的1-log(20)/log(100)。
发布于 2017-03-22 22:47:03
我正在处理同样的问题,我想我明白了。
首先要认识到的是,不可能通过调整播放器的音量来放大音频文件。你就是不能。音量从0%到100%,就这样。
你实际上所做的就是削弱一切。要做到这一点,你需要决定什么音量应该是0分贝。也就是说,对于没有衰减或放大的音频文件,应该是什么音量。
假设你想要0分贝达到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)https://stackoverflow.com/questions/12639596
复制相似问题