5

ストック Android/AOSP 音楽プレーヤー アプリに Replay Gain (つまり、音楽ファイルの replaygain タグに応答) を実装しようとしています。これは単なる個人的なプロジェクトですが、将来的にはパッチとして提供したり、独自のライブラリやプレーヤーを作成したりできます。私は最初のインスタンスでトラック ゲインだけを見ています。私の質問の性質は、おそらく私が数学に失敗したという事実にかかっています;)

タスクは 2 つのことを行うことです: A) 再生を開始する前に、ボリュームをデバイスの最大 -14dB (またはそれ以上、一部のソースでは -23dB とアドバイスされています) にクランプします。B) 各トラックの再生が始まる前に、そのタグを読み取り、その dB 数だけ調整します。

Android での再生音量の調整には対数スケーリングも含まれていることがわかりますが、私は対数に慣れていないので、それが物事をより簡単にするのか、それとも 2 倍 (10 倍?) 難しくするのかわかりません。

デシベル値を MediaPlayer.setVolume() の使用可能なパラメータに変換する方法について、私が欠けている手がかりを教えてください。ヒントをありがとう。

編集:接続が必要になる可能性のある(おそらく不安定な)主張がいくつかありますが、それらのいずれかが頭脳明晰であるかどうかを伝える必要があります。

  1. ReplayGain は、-14 dBFS == 89dB SPL のターゲット レベルを想定して動作します。したがって、私はこれらの尺度が上から下までずっと等しいと仮定します (これが不正確であることはわかっていますが、どれほど不正確なのでしょうか?)
  2. MediaPlayer.setVolume(1.0f,1.0f) (最大音量) を 0dBFS として扱います。
  3. (1) に基づいて、これを 89+14 = 103dBSPL に等しくします。
  4. MediaPlayer.setVolume(0.0f,0.0f) (ミュート) を 0dBSPL として扱うので、0 ~ 103 の抽象化された線形ボリューム スケールがあります。

これらに余裕がある場合は、次のように、-1.3 のトラック ゲイン値を MediaPlayer.setVolume() の適切なパラメーターに変更します。

  1. ターゲット ラウドネス = 89 - 1.3 = 87.7
  2. float newVol = 1.0f - (Math.log(103 - 87.7 / Math.log(103)) = 0.41143207395167

これはリモートで正しい軌道に乗っていますか?

4

2 に答える 2

2
  • dBFS は deciBel Full Sound の略なので、それを最大レベルに割り当てることは完全に理にかなっています。
  • デシベルは、2 つの値の比率 (対数) を表す単位です。dBFS対dBSPLを使用するときにあなたが言っているのは、使用する基準音圧だけです。
    • -14 dBFS は、基準値 (つまり、可能な最大値) よりも 10^(-14/20) 小さい音圧を使用していることを意味します。
    • 89 dBSPL は、「一般的に使用される空気中の基準音圧 [...] p0 = 20 μPa (RMS) または 0.0002 ダイン/cm2[5]」よりも 10^(89/20) 倍大きな値を使用していることを意味します。通常、人間の聴覚の閾値と考えられています (おおよそ 3 m 離れた蚊の音)。」(ウィキペディアから)。

したがって、2 つのスケールの間で共通点が得られると、それらは同じように進化します。基本的に、-14dbFS = 89 dBSPL と言って、2 つのスケールの基準音圧の比率を定義しました。

乗法スケールは面倒なので、これらの乗法値の対数を取り、それらを 10 で割ります。これにより、デシベルと呼ばれる加算値が得られます (余分な 2 係数は、音圧ではなく音圧の 2 乗を比較するという事実から得られます)。彼ら自身)。

最後に、0.0f から 1.0f まで (dB と同様に) 対数的にマッピングされる 103 dB の範囲があると考える場合 (Android での再生ボリュームの場合の継ぎ目)、-14dBFS は ( 103 - 14)/103.

これから線形スケールを作成する場合にのみ、対数の計算を行う必要があります。線形スケールでの最大サウンドの 80% は、出力スケールで 1-log(20)/log(100) になります。

于 2014-11-28T02:01:10.250 に答える