TadaoYamaokaの開発日記

個人開発しているスマホアプリや将棋AIの開発ネタを中心に書いていきます。

【公開】wavdiff — フル+インストからボーカルを抽出するコマンドラインツール

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.wavinst.wav元のフォーマットを保持しつつ無音で整列済みです。

リポジトリ

👉 GitHub: wavdiff


まとめ

wavdiff は「フルとインストを揃えて引き算するだけ」というシンプルなアプローチを採用しつつ、

  • FFT による高速相互相関
  • テーパリング補正
  • 短い方だけを無音パディングする整列

といった工夫を盛り込んだ実用的なツールです。