カラオケ音源や練習用の伴奏を作りたいとき、「曲からボーカルだけを消す」方法は大きく2つあります。昔からある L−R(センターキャンセル) と、学習済みモデルで音を分ける AI音源分離 です。どちらも「ボーカル除去」と呼ばれますが、仕組みも得意・不得意もまったく違います。
この記事では、まず L−R を Python で数行で実装して何が起きるかを確認し、そのあと AI 音源分離の代表的な実装である Demucs をコマンドラインで動かします。
方式1:L−R(センターキャンセル)
仕組み
多くのポップスでは、リードボーカルは左右のチャンネルに同じ音量・同じタイミングで入っています(いわゆる「センター定位」)。それなら左チャンネルから右チャンネルを引けば、左右で同じ成分は打ち消されて消える、というのが L−R の考え方です。
import numpy as np
import soundfile as sf
data, sr = sf.read("song.wav") # ステレオなら shape は (フレーム数, 2)
left, right = data[:, 0], data[:, 1]
karaoke = (left - right) / 2 # 左右で同じ成分(センター)を打ち消す
sf.write("karaoke_center_cancel.wav", karaoke, sr)
MP3 しか手元にない場合は、先に ffmpeg -i song.mp3 song.wav で WAV にしておくと確実です。
実際に聴くと分かること
L−R はとても軽く、どんな環境でも一瞬で終わります。ただ、聴いてみると次のような問題がすぐに分かります。
- センターにある楽器も一緒に消える:ベース、キック、スネアもセンターに置かれることが多く、ボーカルと一緒に薄くなります。結果として「スカスカ」な音になりがちです。
- リバーブは残る:ボーカルにかかった残響は左右に広がっているので打ち消されず、声の「影」のような音が残ります。
- 出力はモノラルになる:引き算の結果は1チャンネルなので、ステレオの広がりは失われます。
- モノラル音源には使えない:左右がまったく同じなら、引き算の結果は無音です。古いモノラル録音では何も残りません。
- ボーカルだけを取り出すことはできない:消すことはできても、アカペラを作る用途には向きません。
方式2:AI音源分離
仕組み
AI 音源分離は、「声とはどういう音か」「ドラムとはどういう音か」を大量の楽曲で学習したモデルが、ミックスされた音からそれぞれの音源を推定して書き出す方式です。左右の差を使うのではなく音の特徴で分けるので、センターにあるベースやドラムを残したままボーカルだけを取り除けますし、ボーカル側を単独のトラックとして取り出すこともできます。
代表的なオープンソース実装が Meta(旧 Facebook Research)の Demucs です。最新の v4 は Hybrid Transformer ベースのモデルで、デフォルトモデルの htdemucs は曲を drums / bass / other / vocals の4つのステムに分けます。ライセンスは MIT です。なお、公式リポジトリは 2025年1月1日にアーカイブされており、作者のフォーク(adefossez/demucs)で重要な修正のみが続けられています。
動かしてみる
python3 -m pip install -U demucs
# 4ステム(drums / bass / other / vocals)に分ける
demucs song.mp3
# ボーカルとそれ以外の2つに分ける(カラオケ用途)
demucs --two-stems=vocals song.mp3
結果は separated/モデル名/曲名/ フォルダに WAV で書き出されます。MP3 で保存したい場合は --mp3 を付けます。
GPU で動かす場合、README によるとデフォルト設定では約 7GB の GPU メモリが必要です。足りない場合は --segment で分割長を短くするか、-d cpu を付けて CPU で処理します(そのぶん時間はかかります)。
AI分離でも残る弱点
AI 分離は L−R よりはるかに自然な結果になりますが、万能ではありません。
- ボーカルに深いエコーがかかった曲、観客が一緒に歌っているライブ録音、古いモノラル録音では、伴奏側に声の痕跡が残ることがあります。
- コーラスやハモりは、リードボーカルと同じ「vocals」側に入ります。リードだけを抜き出す用途には向きません。
- スタジオ録音のクリーンな音源ほど、きれいに分かれます。
どちらを選ぶか
| L−R(センターキャンセル) | AI音源分離(Demucs など) | |
|---|---|---|
| 処理の重さ | ほぼゼロ | 重い(GPU 推奨) |
| センターの楽器 | 一緒に消える | 残る |
| ボーカル単体の取り出し | できない | できる |
| モノラル音源 | 無音になる | 分離できる |
| 出力 | モノラル1本 | ステレオのステム |
仕組みを理解したい、あるいは軽さが最優先なら L−R、聴ける品質の伴奏やアカペラが欲しいなら AI 分離、という使い分けになります。
環境構築なしで試したい場合
Python や GPU の準備をせずに結果だけ確認したい場合は、ブラウザから使えるサービスもあります。筆者が開発している Voice Remover はバックエンドで htdemucs を動かしていて、曲や動画をアップロードすると伴奏とボーカルの2本を MP3 で返します。無料ではアカウントなしで1日1曲、ログインすると1日2曲まで使えます。仕組みや料金について詳しくはこちら(see more)。
用途別のページもあり、アカペラを先に聴きたいなら曲からボーカルだけを抽出するページ、ドラムやベース、ギター、ピアノまで分けたいなら楽器ごとにトラックを分けるステム分割、練習用の伴奏を作りたいなら原曲からカラオケ音源を作るページが使えます。
まとめ
- L−R は「左右で同じ成分を消す」だけの単純な処理で、センターの楽器も道連れになり、モノラル音源には効かない。
- AI 音源分離は音の特徴でボーカルと伴奏を分けるので、伴奏の厚みを保ったまま声を消せ、ボーカル単体も取り出せる。
- Demucs は
pip install demucsとdemucs --two-stems=vocalsだけで手元で試せる。ただし GPU メモリと処理時間には注意。
まずは手元の曲で L−R の結果と Demucs の結果を聴き比べてみると、違いがはっきり分かると思います。