Spleeterによるボーカル抽出のやり方【Python on Windows】

Spleeterによるボーカル抽出のやり方【Python】 プログラミング

ボーカル抽出という言葉を知っていますか?
他には、以下のように表現されます。

  • ボーカルカット
  • ボーカルキャンセル
  • ボーカルを消す
  • ボーカルを抜き出す

意味としては、音(曲)から音声とそれ以外の音を分離するということです。
これができれば、嬉しいことがたくさんあります。

すぐに思いつくことは、カラオケ音源を自作できることでしょう。
また、この技術を使えば、音声認識の精度を上げることもできるはずです。

もうすでに嬉しくないですか?
アイデア次第では、もっと嬉しいことができそうです。

そんな嬉しいことが、PythonのライブラリであるSpleeterでできるというのです。
それも簡単にです。

本記事の内容

  • Spleeterとは?
  • Spleeterのインストール
  • Spleeterによるボーカル抽出

それでは、上記に沿って解説していきます。

Spleeterとは?

Spleeterは、フランスの音楽配信サービスを行うDeezer社が開発したオープンソースです。
オープンソースであるため、無料で利用できます。

そして、SpleeterはTensorflowを利用しています。
Tensorflowと言えば、Googleの公開した機械学習用のライブラリです。
よって、Spleeterも機械学習の成果と言うことになりますね。

では、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)

Spleeterで曲(【魔王魂公式】UNiVERSE)からボーカル抽出した音声データ

伴奏(accompaniment.wav)

Spleeterで曲(【魔王魂公式】UNiVERSE)からボーカル抽出した後の伴奏データ

パラメータ調整などもできるようなので、もっと質を上げることも可能かもしれません。
それにしても、抽出精度がスゴイですね。

こんな簡単にボーカル抽出ができるなんて、スゴイです。
Python APIとしてSpleeterを利用すれば、もっと可能性は広がります。

しばらくSpleeterで遊んでみようと思います。

タイトルとURLをコピーしました