wavdiff — フル+インストからボーカルを抽出するコマンドラインツール
Windows 向けのコマンドラインツール 「wavdiff」 を GitHub で公開しました。
このツールは、フルトラック(ボーカル+インスト)とインストトラックを入力すると、その差分から ボーカルのみを抽出することができます。
機能紹介
できること
- 16bit / 24bit PCM WAVE に対応
- フル/インストの タイミングずれを自動補正
- フルとインストの差分から ボーカルトラック(モノラル)を抽出
使い方
wavdiff <full.wav> <inst.wav> <out_dir>
出力ディレクトリには以下の 3 つのファイルが生成されます。
full.wav: フルトラック(必要に応じて無音パディング済み)inst.wav: インストトラック(必要に応じて無音パディング済み)vocal.wav: 抽出されたボーカル(モノラル)
技術的背景
相互相関によるタイミング補正
音楽のフルとインストは数秒程度ずれていることがあります。 wavdiff では冒頭 3 秒をスキップし、その後の 10 秒間を解析区間とし、FFT による 高速相互相関 を計算します。これにより、整数サンプル精度でラグを検出します。
FFT 相関ではテーパリング(三角窓効果)が生じるため、wavdiff では オーバーラップ長で正規化し、誤差を抑えています。また、極端に短いオーバーラップは無視することで頑健性を高めています。
無音パディング方式
ラグが検出されたら、位相を一致させるために 短い方のトラックのみに先頭無音を追加します。 たとえばインストが 200 サンプル早い場合は、インストの頭に 200 サンプル分の無音を追加し、フルに合わせます。 これにより余計な伸長はなく、両者の波形がきれいに重なります。
ボーカル抽出処理
フルとインストを完全に同期させた上でサンプル単位で減算。チャンネルが複数ある場合は平均してモノラル化し、vocal.wav として保存します。
- 出力の
vocal.wavは 入力と同じビット深度(16 or 24)を保持。 full.wavとinst.wavは 元のフォーマットを保持しつつ無音で整列済みです。
リポジトリ
まとめ
wavdiff は「フルとインストを揃えて引き算するだけ」というシンプルなアプローチを採用しつつ、
- FFT による高速相互相関
- テーパリング補正
- 短い方だけを無音パディングする整列
といった工夫を盛り込んだ実用的なツールです。