多数のオーディオ セグメントをオーバーレイし、(1, 1, 1, 0.5, 0...) の形式で値のタプルを関数に渡すことができるようにしたいと考えています。各数値はボリュームの比率です。にスケーリングする必要があります。0 は完全に無音、1 は変更されていない元の音量、0.5 は正確に半分です。私が理解している限り、これはGainNode の「gain」プロパティの動作です。
これまでにこれらを試しました:
def adjust_volume(audio_segment, ratio):
decibel = pydub.utils.ratio_to_db(audio_segment.rms)
return audio_segment - decibel * (1 - ratio)
と
SILENCE_THRESHOLD = -120.00
def adjust_volume(audio_segment, ratio):
difference = SILENCE_THRESHOLD - audio_segment.dBFS
return audio_segment + (difference - (difference * ratio))
残念ながら、どちらも不完全に動作します。つまり、ブラウザー (Mozilla Firefox) の動作を正確に再現するわけではありません。最初のものを使用すると、0 のみを含むタプルを渡してもオーディオ プレーヤー (foobar2000) で音を聞くことができます。同じ値を使用してブラウザで観察できるレベルよりもはるかに低いレベルです。
私の技術的なオーディオ知識は非常に限られていることに注意してください。これらは、異なるオーディオ機器、オーディオ実装の詳細などによって作成された単なる技術的な不正確さですか? その場合、誰かがこのスケーリングを行うための最も「正しい」方法を提案できますか?