ボーカル抽出という言葉を知っていますか?
他には、以下のように表現されます。
- ボーカルカット
- ボーカルキャンセル
- ボーカルを消す
- ボーカルを抜き出す
意味としては、音(曲)から音声とそれ以外の音を分離するということです。
これができれば、嬉しいことがたくさんあります。
すぐに思いつくことは、カラオケ音源を自作できることでしょう。
また、この技術を使えば、音声認識の精度を上げることもできるはずです。
もうすでに嬉しくないですか?
アイデア次第では、もっと嬉しいことができそうです。
そんな嬉しいことが、PythonのライブラリであるSpleeterでできるというのです。
それも簡単にです。
本記事の内容
- Spleeterとは?
- Spleeterのインストール
- Spleeterによるボーカル抽出
それでは、上記に沿って解説していきます。
Spleeterとは?
Spleeterは、フランスの音楽配信サービスを行うDeezer社が開発したオープンソースです。
オープンソースであるため、無料で利用できます。
そして、SpleeterはTensorflowを利用しています。
Tensorflowと言えば、Googleの公開した機械学習用のライブラリです。
よって、Spleeterも機械学習の成果と言うことになりますね。
「TensorflowではなくPyTorchの方がいい」と言う方は、Open-Unmixに関する記事をご覧ください。
では、Spleeterの機能の説明に入ります。
Deezer社としては、Spleeterをソース分離エンジンとして表現しています。
ここでいうソースは、音楽ソースです。
音楽ソースとは、各楽器の音(トラック・ステム)のことです。
そして、Spleeterを使えば、一つの音楽から各楽器のトラックを抽出できます。
だから、Spleeterのことをソース分離エンジンとDeezer社が表現しているのです。
また、Spleeterは次の二つの利用方法があります。
- コマンドラインツール
- Python API
コマンドラインツール
コマンドラインツールは、これ単体で利用可能です。
そのため、プログラマーでなくても利用が可能となります。
ただし、その場合はインストールするまでが大変かもしれません。
でも、一度インストールしてしまえば、後は何とでもなるでしょう。
Python API
上級者向けの使い方になります。
以下のようにPythonのプログラム上で、Spleeterの機能を利用できます。
# Use audio loader explicitly for loading audio waveform : from spleeter.audio.adapter import get_default_audio_adapter audio_loader = get_default_audio_adapter() sample_rate = 44100 waveform, _ = audio_loader.load('/path/to/audio/file', sample_rate=sample_rate) # Perform the separation : prediction = separator.separate(waveform)
当ブログは、プログラミングを扱っています。
そのため、近いうちにPython APIとしてSpleeterを利用する方法についても解説します。
Spleeterのインストール
Spleeterは、OS(Windows・macOS・Linux)問わずにインストール可能です。
ここでは、Windows環境でインストールを行います。
Linux(Ubuntu)へのインストールは、次の記事をご覧ください。
SpleeterがサポートしているPythonは、以下のバージョンです。
- Python 3.6
- Python 3.7
- Python 3.8
そこでまずは、Pythonのバージョンチェックを行います。
>python -V Python 3.7.3
サポートしているバージョンのため、OKですね。
あと、Spleeterのインストールは以下の2つの方法が用意されています。
- Condaを使ってインストール
- pipを使ってインストール
今回は、pipコマンドを利用してインストールします。
pipでインストールする場合、以下が事前にインストールされている必要があります。
- ffmpeg
- libsndfile
ただし、libsndfileは評価を行う予定がある場合のみ必要です。
今回は、Spleeterでボーカル抽出できればOKです。
よって、ffmpegだけのインストールを行います。
ただ、私の環境ではすでにffmpegはインストール済みです。
ffmpegのインストールは、次の記事で解説しています。
ffmpegのインストールまで完了していれば、次へ進みましょう。
次は、pip自体の更新を行います。
python -m pip install --upgrade pip
pipを利用する際には、常に更新を心がけましょう。
pipは、頻繁にバージョンアップが実施されています。
いざ、Spleeterです。
pip install spleeter
インストールには、そこそこ時間がかかりますね。
正確には測っていませんが、10分前後はかかりました。
もしインストールに失敗したら、「–user」を追加してください。
pip install spleeter --user
インストールは、以下の表示で終わります。
WARNING: The script spleeter.exe is installed in 'C:\Users\you\AppData\Roaming\Python\Python37\Scripts' which is not on PATH. Consider adding this directory to PATH or, if you prefer to suppress this warning, use --no-warn-script-location. Successfully installed ffmpeg-python-0.2.0 norbert-0.2.1 spleeter-2.0.2
Successfullyの前にWARNINGが出ています。
これは、「spleeter.exe」にPATHが通っていないことを言っているだけです。
あと、「spleeter.exe」の場所を教えてくれています。
spleeter.exeは、「C:\Users\you\AppData\Roaming\Python\Python37\Scripts\」にあるということです。
とりあえず、ここではPATHは通さずにspleeter.exeのあるフォルダへ移動します。
移動した後、以下のコマンドを実行。
>spleeter -h usage: spleeter [-h] {separate,train,evaluate} ... positional arguments: {separate,train,evaluate} separate Separate audio files train Train a source separation model evaluate Evaluate a model on the musDB test dataset optional arguments: -h, --help show this help message and exit
上記のように表示されれば、Spleeterのインストールは成功しています。
最後に、実際にSpleeterを使ってみましょう。
Spleeterによるボーカル抽出
Spleeterには、ソース分離するパターンが3つあります。
- stem2:ボーカル・演奏の2ステム
- stem4:ボーカル・ドラム・ベース・その他の4ステム
- stem5:ボーカル・ドラム・ベース・ピアノ・その他の5ステム
ボカール抽出が目的なので、stem2でソース分離します。
そして、分離する音楽は以下を利用します。
【魔王魂公式】UNiVERSE
https://www.youtube.com/watch?v=UgccwRi3e-A
上記の曲は、「販売したりストリーミング配信」する以外は、自由に使ってよいということです。
「spleeter.exe」のパスが通る前提で説明します。
ソース分離するためのコマンドは以下。
spleeter separate -i 音声ファイルのパス -o 出力先のフォルダのパス -p spleeter:○stems
○stemsの○には、2 or 4 or 5の値が入ります。
以下は、実際に発行したコマンドです。
spleeter separate -i C:\download\maou_25_universe.mp3 -o C:\download\ -p spleeter:2stems
このコマンドを実行すると、数分ほど待たされました。
処理中に次のような表示がありました。
Downloading model archive https://github.com/deezer/spleeter/releases/download/v1.4.0/2stems.tar.gz
選択した2temsのソース分離用のデータ(モデル?)をダウンロードしていたのでしょう。
処理が完了した後の出力先のフォルダ「C:\download\」の状態は以下。
音声ファイル名と同じフォルダが作成されています。
新たに作成されたフォルダの中は、以下。
accompanimentは、日本語で「伴奏」です。
見事に、2つのファイルに分離されています。
肝心の音声を確認してみましょう。
ボーカル音声(vocals.wav)
伴奏(accompaniment.wav)
パラメータ調整などもできるようなので、もっと質を上げることも可能かもしれません。
それにしても、抽出精度がスゴイですね。
こんな簡単にボーカル抽出ができるなんて、スゴイです。
Python APIとしてSpleeterを利用すれば、もっと可能性は広がります。
しばらくSpleeterで遊んでみようと思います。