Replaygainで音楽ファイルの音量を平均化

パソコンで音楽を聴いていると、音量の小さいファイルに出会うことがたまーにある。最初はリッピング時にノーマライズ処理を掛けていたが、ノイズが乗ったりとひどいことになるケースが多発したため、封印。その後はwinampにAudioStocker PROというDSPプラグインを組み合わせて使っていたが、どうも効きが悪かったり音が割れたりと微妙な感じだったので、最近ではもう諦めていた。
今日、なんとはなしにに検索して見つけたのが、Replaygainという技術。

Replaygainのしくみ

Replaygainはオープンな規格で、既存のオーディオファイルのタグ*1に、独自拡張のReplaygainタグを書き込む。Replaygainタグには、どのくらい補正をかければちょうどいい音量*2になるかが示されている。プレーヤーは再生時にこの値を読み取り、自動的に補正をかけて再生するという仕組みだ。
この仕組みにより、Replaygainは元の音データを破壊しない。音量は揃ったがノイズだらけ、なんていうことは起こらない*3。もし起きてしまっても、Replaygainタグだけを除去すればデータは元通り、である。いわゆる「ロスレス」と言った方がわかりやすいだろうか。
プレーヤー側で対応していないと無意味であるという欠点はあるものの、オープンな技術ということで、徐々に広まっているようである。ポータブルプレーヤの対応が遅いのはいつものことなので、まぁ、そこは…しょうがないかな。

さて、使ってみる

私はogg信者であるので、oggに対応したReplaygain設定ソフト(?)、VorbisGainをダウンロードした。Releaseフォルダ内にvorbisgain.exeが入っているので、コマンドプロンプトから起動してみる。


D:\Documents\Downloads\vorbisgain-0.37\Release>vorbisgain --help
VorbisGain v0.37 (libvorbis 1.1.2)
Copyright (c) 2002-2005 Gian-Carlo Pascutto
and Magnus Holmgren

Usage: vorbisgain [options] input.ogg [...]

OPTIONS:
-a, --album Run in Album (Audiophile) mode.
-g, --album-gain=n Set Album gain to the specified value. Implies -a
-c, --clean Remove any VorbisGain tags. No gains are calculated
-C, --convert Convert VorbisGain tags from old to new style
-d, --display-only Display results only. No files are modified
-f, --fast Don't recalculate tagged files
-h, --help Print this help text
-n, --no-progress Don't show progress, just print results
-q, --quiet Don't print any output (except errors)
-r, --recursive Search for files recursivly, each folder as an album
-s, --skip Skip non-Vorbis or faulty files
-v, --version Display version number and exit

INPUT FILES:
ReplayGain input files must be Ogg Vorbis I files with
1 or 2 channels and a sample rate of 48 kHz, 44.1 kHz,
32 kHz, 24 kHz, 22050 Hz, 16 kHz, 12 kHz, 11025 Hz or 8 kHz.
Wildcards (?, *) can be used in the filename.

ちょっと訳してみたりして。

書式: vorbisgain [オプション] input.ogg [...]

オプション:
-a, --album アルバムモードを有効にする。
-g, --album-gain=n Album gainをnの値に設定する。アルバムモードが自動的に有効になる。
-c, --clean ゲイン情報(Vorbisgainタグ)を削除する。ゲインの計算は行わない。
-C, --convert 旧式のVorbisgainタグを現在の仕様へコンバートする。
-d, --display-only 結果をファイルへ書き込まない。テストモード。
-f, --fast 既にVorbisgainタグが設定されているファイルは処理をスキップする。
-h, --help このヘルプを表示する。
-n, --no-progress 処理経過を表示しない。結果のみ表示する。
-q, --quiet エラーを除き、全ての表示を行わない。
-r, --recursive 各フォルダをアルバムと見なし、再帰的検索を行う。
-s, --skip ogg以外のファイルや破損ファイルをスキップする。
-v, --version vorbisgainのバージョンを表示する。

対応形式:
コーデック Ogg Vorbis
チャンネル数 1〜2ch
サンプリングレート 48kHz/44.1kHz/32kHz/24kHz/22050Hz/16kHz/12kHz/11025Hz/8kHz

ファイル名の指定にはワイルドカード(*,?)を含めることができます。

-aで有効になるAlbum modeとは、アルバム単位で音量を揃える機能のようだ。-aを使用しない場合は、それぞれのファイル単位で調整を行う。実際にどう違うか見てみよう。

D:\Documents\Downloads\vorbisgain-0.37\Release>vorbisgain "Z:\MUSIC\コブクロ\Saturday 8_pm\*.ogg"

Processing directory 'Z:\MUSIC\コブクロ\Saturday 8_pm':
Analyzing files...

Gain | Peak | Scale | New Peak | Track

                                                                                        • -

-2.99 dB | 33505 | 0.71 | 23747 | 01-ボクノイバショ.ogg
-1.28 dB | 33544 | 0.86 | 28947 | 02-夢唄.ogg
-2.77 dB | 33494 | 0.73 | 24348 | 03-ストリートのテーマ.ogg
-1.79 dB | 33317 | 0.81 | 27112 | 04-虹の真下.ogg
-1.56 dB | 26637 | 0.84 | 22258 | 05-遠くで・・.ogg


D:\Documents\Downloads\vorbisgain-0.37\Release>vorbisgain -a "Z:\MUSIC\コブクロ\Saturday 8_pm\*.ogg"

Processing directory 'Z:\MUSIC\コブクロ\Saturday 8_pm':
Analyzing files...

Gain | Peak | Scale | New Peak | Track

                                                                                        • -

-2.99 dB | 33505 | 0.71 | 23747 | 01-ボクノイバショ.ogg
-1.28 dB | 33544 | 0.86 | 28947 | 02-夢唄.ogg
-2.77 dB | 33494 | 0.73 | 24348 | 03-ストリートのテーマ.ogg
-1.79 dB | 33317 | 0.81 | 27112 | 04-虹の真下.ogg
-1.56 dB | 26637 | 0.84 | 22258 | 05-遠くで・・.ogg

Recommended Album Gain: -2.17 dB
Writing tags to '01-ボクノイバショ.ogg'
Writing tags to '02-夢唄.ogg'
Writing tags to '03-ストリートのテーマ.ogg'
Writing tags to '04-虹の真下.ogg'
Writing tags to '05-遠くで・・.ogg'

Album modeが有効な状態では、トラック全てを一度チェックした後、アルバム全体で平均してどのくらいのゲインに設定するかを決めている。と、いうことは、アルバムを通して聞けばちょうどいい音量でも、他の曲と混ぜて聞くとブレるってこと?あれ?それって意味あるの…?いやぁ、よくわかりません!
この「Album gain」と各曲ごとの「Track gain」は別々に保存されているようなので、両方設定しても構わない。再生機側でTrack gainを優先する設定にすればいいだけである。Album modeを有効にした場合でも、track gainは通常通り書き込まれる。
一曲の処理にかかる時間は、おおよそ3〜5秒程度。Album modeの場合はこれにalbum gainの書き込み処理が追加されるため、単純に2倍程度の時間がかかるようだ。

再生してみる

winampでは、v5.3辺りからReplaygainに対応しているようだ*4。オプションより「Playback > プレイゲインを使用」にチェックを入れることにより使用可能だ。
拡大モードの各項目は次の通り。

Apply Gain
Replaygainタグの値を用いる。
Apply Gain / Prevent Clipping
Replaygainタグの値を使用し、それでもクリップ(音割れ)するようであれば音量を下げる。
Normalize
Replaygainの値を無視し、独自のノーマライズ処理を行う。
Prevent Clipping
Replaygainの値を無視し、クリップだけは回避する。

通常はApply gainを選択すればよい。音が割れる場合には、Apply Gain / Prevent Clippingを使用するといいだろう。その他二つはReplaygainを無視するので論外である。Normalizeは汚い仕上がりになるし、Prevent Clippingではそもそも音量の平均化を行わない。
優先ソースは前述の通り、Album gainとTrack gainのどちらを優先的に用いるかを設定する。Albumを選択しても、Track gainのみしか記録されていない場合にはTrack gainを使用する。その下のチェックボックスにチェックを入れれば、Album gainが見つからなければReplaygainを使用しない設定にもできる。
一番下のスライドバーでは、Replaygainが設定されていないファイルの音量を調整することができる。なんでこんなものがあるのかというと……

あれ?音ちっちゃくね?

実は、Replaygainが調節を行う89dbというのは、かなり小さい音になる。Replaygainが有効な曲と無効な曲を一緒に再生すると、むしろ音の差が激しくなるという、全く意味のない状態になるのだ。なんだそりゃ。
この現象を対症療法的に回避する方法として、Replaygainが設定されていない曲に強制的に一定のゲインを掛けて再生する機能がこの「リプレイゲインがないファイルの調整」というわけである。ああ、なんという本末転倒…。とりあえず-8dbにしてみることで音量は揃ったが、そもそも音が小さすぎる。ここでアントワネット嬢であれば『小さければスピーカーの音量を上げればいいじゃない』なんて言いかねないが、とんでもない。そうすればWindowsのエラー音が頭の芯まで強烈に鳴り響いたり、同じスピーカーに繋いでいるゲームが近所迷惑喧嘩上等の暴走族サウンドを響かせたりしてしまう。
え?ゲームをする時は音量を調節しろって?はて、そもそも何のために音楽ファイルの音量を揃えたんでしたっけ…?

foobar2000がいいらしい

そこで、foobar2000を引っ張り出してみます。foobarでは、Replaygainが有効なファイルの音量を調節することができます。winampではReplaygainが無効のファイルの音量を下げることしかできませんが、foobarではそれに加えてReplaygainが有効なファイルの音量を上げることもできるというわけです。早速無効なファイルを標準(±0db)として、有効なファイルのゲインを+8dbにしてみましょう。
…。音が割れますね。
かなり細々と調節を試みましたが、結局、満足のいく状態に仕上げることはできませんでした。

結論

音量を揃えていただけるのは有り難いですが、89db固定では使い物になりません。お蔵入り確定ということで…。本当に残念です。

*1:ID3やAPETagなど、既存のタグ規格

*2:89db。一部ソフトによる設定だと83dbという噂?

*3:そもそもはReplaygainのノーマライズ処理部がしっかりしているので起こらないのだが

*4:実際は以前よりinputプラグイン側での独自対応が進んでいたようだ。winamp本体の機能としての対応はv5.3からとなる。