ストック Android/AOSP 音楽プレーヤー アプリに Replay Gain (つまり、音楽ファイルの replaygain タグに応答) を実装しようとしています。これは単なる個人的なプロジェクトですが、将来的にはパッチとして提供したり、独自のライブラリやプレーヤーを作成したりできます。私は最初のインスタンスでトラック ゲインだけを見ています。私の質問の性質は、おそらく私が数学に失敗したという事実にかかっています;)
タスクは 2 つのことを行うことです: A) 再生を開始する前に、ボリュームをデバイスの最大 -14dB (またはそれ以上、一部のソースでは -23dB とアドバイスされています) にクランプします。B) 各トラックの再生が始まる前に、そのタグを読み取り、その dB 数だけ調整します。
Android での再生音量の調整には対数スケーリングも含まれていることがわかりますが、私は対数に慣れていないので、それが物事をより簡単にするのか、それとも 2 倍 (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) (ミュート) を 0dBSPL として扱うので、0 ~ 103 の抽象化された線形ボリューム スケールがあります。
これらに余裕がある場合は、次のように、-1.3 のトラック ゲイン値を MediaPlayer.setVolume() の適切なパラメーターに変更します。
- ターゲット ラウドネス = 89 - 1.3 = 87.7
- float newVol = 1.0f - (Math.log(103 - 87.7 / Math.log(103)) = 0.41143207395167
これはリモートで正しい軌道に乗っていますか?