東方星蓮船4面道中曲「幽霊客船の時空を超えた旅」のノイズ除去

wavファイル編集つうことでやってたのはコレ。この曲は作者が録音中に間違えてXPのバルーンヒント音を混入させてしまい、それがループの度に再生されるという代物です。僕は割とこの曲が好きなだけにバルーン音が鬱陶しくて堪らないので、じゃあ消してしまおうという試みです*1

これが原曲の当該箇所で

こっちがキャンセル後。フルのはニコニコに上げました。
D

というわけで完全に綺麗さっぱり消えてると思います。はてなは写真も動画もアップできるのに音楽はアップできないってのがめんどい。まあWindows Live ムービーメーカーの練習にはなった。以下手順

  1. 原曲はサンプリング周波数44100Hz、XPのバルーンヒント音は22050Hzなので適当な方法でバルーン音を44100Hzに変換(どうやっても大差ないけどSoundEngine Freeを使用)
  2. 原曲はステレオ、バルーン音はモノラルなので、原曲中のバルーン音を浮き上がらせるために(左音+右音)/2を計算
  3. (左音+右音)/2をf(t)、バルーン音をg(t)とする。原曲中でバルーン音が鳴り始める時刻をs、原曲中のバルーン音の倍率をaとすれば、時間空間のL1ノルム
     P(a,s)=\sum_t|f(t)-a g(t-s)|
    は上記の(a,s)で最小になるはず*2
  4. とりあえずaは勘で適当に固定してもsの最適解はそう変わらないので、それでsを求めたあとにaを計算する。総当たりなのがかなり頭悪そうですが一応数分でsに関する最適化は終わります。sが求まればあとはaはすぐに最適化できます。大体a=3.7くらいになる模様。
  5. 左音:=左音-a*g(t-s)、右音:=右音-a*g(t-s)とすればバルーン音が完全に消えた曲が出てくる。めでたしめでたし。

*1:バルーン音があるからいいという人も結構いるみたいですが僕には理解し難い

*2:L2ノルムのほうが自然だけど、総当たりするぶんにはこっちのほうが計算が楽。凸最適化じゃないからL2ノルムの微分できるってのもあんまメリットないし