我正在尝试在股票 Android/AOSP 音乐播放器应用程序中实现重播增益(即响应音乐文件中的重播增益标签)。这只是一个个人项目,但我可以将其作为补丁提供,或者制作我自己的库或播放器。我只在第一个实例中查看 Track Gain。我的问题的性质可能归结于我数学不及格的事实;)
任务是做两件事:A)在播放开始之前,将音量钳制到设备最大-14dB(或者更多,一些消息来源建议-23dB)。B) 在每首曲目开始播放之前,阅读其标签并按该数 dB 进行调整。
我看到在 Android 中调整播放音量也涉及对数缩放,但由于我是对数的新手,我不确定这是否会使事情变得更容易或两倍(10 倍?)。
谁能给我关于如何将分贝值转换为 MediaPlayer.setVolume() 的可用参数的线索?感谢您的任何提示。
编辑:我有一些(可能是不稳定的)断言可能需要建立联系,但如果其中任何一个是轻率的,我非常需要被告知。
- ReplayGain 假设目标电平为 -14 dBFS == 89dB SPL。因此,我假装这些比例上下都是等价的(我知道这是不准确的,但有多不准确?)
- 我将 MediaPlayer.setVolume(1.0f,1.0f) (最大音量)视为 0dBFS。
- 基于 (1),我将其等同于 89+14 = 103dBSPL。
- 我将 MediaPlayer.setVolume(0.0f,0.0f) (mute) 视为 0dBSPL,因此我有一个 0-103 的抽象线性音量刻度。
如果这些保持不变,我会将 -1.3 的 Track Gain 值转换为 MediaPlayer.setVolume() 的适当参数,如下所示:
- 目标响度 = 89 - 1.3 = 87.7
- 浮动 newVol = 1.0f - (Math.log(103 - 87.7 / Math.log(103)) = 0.41143207395167
这是在正确的轨道上吗?