Demucs で音源分離

音源分離という技術分野があります。
音楽データを入力として、各楽器や音声毎に分離して出力するというものです。
例えば曲の中から歌の部分だけを分離して消してしまえばカラオケのデータになります。
音源分離は昔から様々な手法で取り組まれてきましたが、近年ではこの分野でもAI技術が応用されています。

オープンソースの音声分離ソフトウェアの一つに「Demucs」があります。
Metaの研究所が開発しているもので、GitHub で公開されています。
Python が動く環境であれば簡単にインストールできるようなので使ってみました。

https://github.com/facebookresearch/demucs/blob/main/docs/linux.md
に従ってインストールします。
まずはpythonのバージョンを確認。

$ python3 --version
Python 3.9.2

Python 3.8以上であれば大丈夫です。

pip でインストール

$ pip3 install --user -U demucs

これだけです。
実行します。

$ python3 -m demucs --mp3 -d cpu music.mp3

Core i5 8400 のマシンで2分10秒ほど。
結果ファイルは以下のようなディレクトリ構造に置かれます。

$ find separated
separated
separated/htdemucs
separated/htdemucs/music
separated/htdemucs/music/bass.mp3
separated/htdemucs/music/vocals.mp3
separated/htdemucs/music/drums.mp3
separated/htdemucs/music/other.mp3

ボーカル、ベース、ドラム、それ以外といったところですね。
mp3 オプション無しで実行すれば、結果は wav ファイルになります。

ボーカルとそれ以外、みたいな分離もできます。

$ python3 -m demucs --two-stems=vocals --mp3 music.mp3
$ ls separated/htdemucs/music
no_vocals.mp3  vocals.mp3

実際に聴いてみると、綺麗にそれぞれのパートに分かれています。変なノイズが乗っていたり、別のパートが混ざっていたりということもほぼありません。
ボーカルだけのファイルを聴くのはなかなか不思議な気分です。

Related Post