Seaside Laboratory

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 フィルター」のライブラリにある「波形反転」を選んで反転し、それを目的の効果音にミキシングしてやれば差分抽出を行うことができる。Sound Engine でのミキシングは操作ステップ数が多いので、サウンドレコーダーでやった方が簡単。

抽出した効果音は比較的クリアなものだったので、該当の WAV ファイルを見つけ出すことに成功し、無事再調整することが出来た。