ボーカル分離ソフト Spleeter を Apple silicon で動かす

Spleeter は曲のパート(ボーカル、ドラムなど)を分離してくれるソフトウェアである。 機械学習を利用しており、精度が高い。

github.com

これを手元の M2 Macbook Air で動かすことができたので備忘録を残す。

主な部分は以下の issue のコメントを参考にしている。

github.com

必要なもの

手順

レポジトリを任意の場所にクローンして、Apple silicon に対応したブランチに切り替える

git clone https://github.com/deezer/spleeter.git
git checkout tf_apple

pyproject.toml[tool.poetry.dependencies] をいじる

  • llvmlite^0.37.0 にする
  • protobuf = ">3.19.0,<3.21.0" を追加する
  • grpcio = "1.49.1" を追加する*1

conda 環境をつくってアクティベート(名前はなんでもいい)

conda create -n spleeter python=3.9 poetry
conda activate spleeter

lock ファイルを更新

poetry update --lock

依存モジュールを入れる (各モジュールのバージョンは記事執筆時点のもので、インストールするタイミングによって変わるかもしれないので、poetry.lock の中身を参照するなどして適切なバージョンに合わせること)

conda install -c conda-forge numpy==1.19.5 numba==0.54.1 grpcio==1.49.1 cffi==1.15.1 typed-ast==1.4.3 h5py==3.1.0 librosa==0.8.0

本体をインストール

poetry install

うまく動いているか確認

spleeter --version
poetry run pytest tests/

テストはいくつか失敗するかもしれないが、動作に支障はない。

実際に使う

spleeter separate -p spleeter:2stems -o [出力先ディレクトリ] [音楽ファイル]

出力先に、ボーカルとそれ以外が分かれた wav ファイルが吐き出される。 2stems のところを 4stems にすればドラムとベースも分けてくれるし、5stems にすればピアノも分かれるようだ。

*1:これを追加しないと 1.50.0 が選択されるが、記事執筆時点で conda-forge に 1.50.0 がなくてインストール時にエラーになるため