Spleeterを使って音源分離してみた
spleeterを使って音源分離してみました。
spleeterとは
ニューラルネットワークを使い、曲を複数トラックに分離するソフト。
普通の2Chのオーディオデータを入力すると、
「ドラム、ベース、ボーカル、ピアノ、その他」
のパートに分離してくれます。
詳細は日本語Wiki参照。
分離サンプル
打ち込み途中の耳コピ曲を使い、分離の具合を確認してみました。
ドラムがここまではっきりと分離できるのに驚きです。耳コピが捗りそう。
※ボーカル無しの打ち込みを使ったので、ボーカルの分離はできていません
※音声がチリチリ言っているのは、キャプチャの都合です
使い方(Win10 / 64bit、Anaconda環境)
以下URLのとおりです。
https://github.com/deezer/spleeter/wiki/1.-Installation
インストール
- Anacondaでspleeter用の環境を作成する
- コマンドプロンプトから、
conda install -c conda-forge spleeter
※ 強いGPUが使える人は、かわりに spleeter-gpu
を指定すると高速です。
自分の環境(GTX980 4GB)ではすぐGPUのメモリ不足になったので、本当に強いマシン向けっぽい。
実行(コマンドプロンプト)
- 適当なディレクトリに移動する
spleeter separate -i (入力ファイル.wav) -o (出力フォルダ) spleeter:5stems-16kHz
これで、出力フォルダに5トラックに分離された音声データが出力されます。
※ 「librosaがない」と怒られる場合は、conda install -c conda-forge librosa
すればOK。
実行(pythonスクリプト)
from spleeter.separator import Separator import os def main(): # Use CPU os.environ["CUDA_VISIBLE_DEVICES"] = "-1" input_audio = "./input/ed.wav" outdir_path = './output/5stems' os.makedirs(outdir_path, exist_ok=True) separator_ = Separator('spleeter:5stems-16kHz') separator_.separate_to_file(input_audio, outdir_path) if __name__ == "__main__": main()
通常DLしてくるpre-trained-modelとは別に、fine-tunedなモデルも公開されています。
スクリプトと同じフォルダに「pretrained_models」フォルダを作り、
githubのreleaseページの「-finetune」モデルをリネーム/展開しておくと、音質が多少よくなります。(多分)
その他オプション
5stems
となっているところは、4stems
や2stems
に変更できます。4stems
の場合は「ドラム、ベース、ボーカル、その他」2stems
の場合は「ボーカル、その他」
に分離します。
-16kHz
指定をやめると、低い周波数までしか計算しなくなります。