Posts
Sound Engine による音の差分抽出
ゲームで使用している効果音を再調整してみようと思ったが、ミキシング後の WAV ファイルしか残っていない。どうせやるなら劣化が起きていない状態から始めたいので、効果音素材の中から元となった WAV ファイルを探すことにした。
ベースとなった幾つかの WAV ファイルの突き止めはできたが、残りの WAV ファイルがどうしてもわからないので、音の差分を取ることで残りの効果音を抽出してみることにした。
ミキシングは足し算なので、元となる音を a, b とした場合、
a + b
と表すことができる。ミキシング後の波形データが足し算で作られたものなら、引き算をしてやれば片方の音を抽出できることになる。
(a + b) - a = b (a + b) - b = a
ミキシング時に最大音量オーバーによるクリップが発生することもあるので、完全な状態で復元できるわけではないが、突き止めるヒントとしては十分である。ちなみに、この特定の音を消去するという考え方はノイズキャンセラーに使われていたりもする。
WAV ファイルを読み込んで差分を抽出するプログラムを書くのはかったるいので、Sound Engine 上で出来る方法を探してみたところ、「通常トラックとカラオケトラックがある場合に歌を取り出すスクリプト」という公式のチュートリアルが見つかった。差分抽出スクリプトが記載されていたので試してみたが、旧バージョンを対象にした説明なのか最新版 (5.10) では動作しない。仕方がないので、スクリプトを使わずに手動でやってみることにした。
出来ることはミキシング (足し算) だけなので、予め正負を反転しておくことで引き算をするしかない。
a + (-b) = a - b
音の正負反転は波形を逆位相にすることなので、「FIR フィルター」のライブラリにある「波形反転」を選んで変換、保存する。出来た WAV ファイルを目的の効果音にミキシングしてやれば差分抽出は完了。Sound Engine でのミキシングは操作ステップ数が多いので、サウンドレコーダーでやった方が簡単。
抽出した効果音は比較的クリアなものだったので、該当する WAV ファイルを見つけ出して再調整することが出来ました。