耳コピ/ボーカル抽出が捗る!Spleeterの使い方

この記事はあるくおすし氏による寄稿記事です。感謝。


2021/08/06 本記事はあるくおすし先生に2020年に寄稿頂いた記事をもとに2021年8月時点の情報に更新した記事になります。


はじめに

はじめまして、あるくおすしというものです。去年(2019)の半ばあたりから主に音MAD等の映像作品を作っています。自分に興味があるという方は@walkingsushiboxなりuser/52842941を覗いてやってください。

Spleeterってなんぞ

早速本題です。 Spleeterとはフランスの音楽配信サイトであるDeezerが開発したパート分離ソフトで、任意の楽曲をコイツに食わせるとドラム、ベース、伴奏、ボーカル、などのパート毎に分離された音声ファイルを出力してくれます。 今流行りの機械学習の技術を使用しており、自分の手元にある曲を使ってアルゴリズムを「訓練」することもできるそうです(自分はやりませんが)。 うまく活用すれば耳コピやボーカル抽出のワークフローが劇的に変化します。

実際に使用する方法ですが

  1. melody mlなどのオンラインサービスを使う
  2. ソフトをダウンロードして自分のパソコンで走らせる

の2種類があります。この記事では自分の手元で走らせる方法を解説していきますが、少々手間がかかります。しかし一度導入してしまえば様々な場面で強力な効果を発揮するので、地道にやっていきましょう。 また英語が分かるという方はこちらの動画をご覧ください。ぶっちゃけこの記事はこの動画の受け売りですので。 https://www.youtube.com/watch?v=tgnuOSLPwMI(削除済み)

(編集注 : 改稿にあたり基本的にはGithub上の情報を参考にしました。)

前提

この記事で紹介するのはWindowsマシンへのインストール方法です。Macとか使ってる人は別の記事を探してください。またSpleeterはGPUで動作するバージョンも用意されていますが、今回解説するのはCPUで動作するバージョンです。グラフィックカードを持っていて、その性能を有効活用したい方は以下のリンクからGPUバージョンの導入方法を見てやってみてください。https://github.com/deezer/spleeter/wiki/1.-Installation

導入方法

Pythonの導入

SpleeterはPythonというプログラミング言語で書かれているため、その言語をパソコンにインストールする必要があります。こちらのサイトから自分の環境に合ったものを選びます。 Spleeterは最新のPythonのバージョン3.9.xでは動かないようなので、3.8.x以前のものを導入して下さい。

Pythonには複数のバージョンがあります。3.6.1以降かつ3.9より前のバージョンを選びます。
Filesの項目がないときは一つ前のバージョンを選ぶと有ったりします。

ダウンロードしたら実行してInstall Nowをクリックします。この時 “Add Python 3.x to PATH”という項目に必ずチェックを入れてください。

enter image description here

こんな感じになる 

enter image description here

既に3.9.xを導入済みの方はhttp://imdkm.com/archives/1560の情報を参考にしてみると良いかも?です。

PowerShellの起動

Pythonのインストールが終わったらPowerShellを起動してみましょう。コマンドプロンプトと同じようなものですがシンタックスハイライト(色分け)が行われるので非常に見やすいです。検索窓から探してもよし、任意のフォルダーのフィールドをShift + 右クリックするとPowerShell ウィンドウをここで開くというオプションが表れますのでそれを選択してもよし。 

enter image description here

 うまく起動できれば以下のような青い画面が立ち上がります。 Spleeterはコマンドラインで動作するソフトウェアなのでインストール・実行もすべてこの画面から行います。 

enter image description here

まずは先ほど入れたPythonが正しく動作しているかのチェック。 python --versionと入力してみます。 

enter image description here

Python 3.x.xと正しく出力されればOKです。

Spleeterのインストール

※ここではpipを利用した導入方法のみを紹介します。conda などを利用する場合は他サイトの情報を参照して下さい。なお、最新版ではconda を用いた導入は推奨されていないようです。

ではコマンドを使ってSpleeterをインストールしていきます。Spleeterはオンライン上でパッケージ化されて配布されているのでpipコマンドで取り寄せます。

pip install spleeterと入力してください。 

enter image description here

少々待つとなんかうじゃうじゃ出てきますがこれでOKです。試しにspleeter --helpを実行してみましょう。

enter image description here

ご覧のようにヘルプが表示されれば成功です。ヨシ!

(編集注 : 私の場合常用している3.8.3でのインストールには失敗しました。ただし別の環境ではうまく導入できたので何かが悪さをしているのでしょう。tensorflow が導入できませんでした。他のバージョンのPythonをインストールしpy -3.7 -m pip install spleeterで実行し導入に成功しました。同じように導入に失敗する方は参考にして下さい。この方法で導入した場合、以下の記事のコマンドでは頭にpy -3.7 -mをつけて下さい。3.7のPythonを使ってねって意味です)

ffmpegの導入

ソフト本体は入ったわけですが、まだやることがあります。ffmpegの導入です。 ffmpegは音声や動画を扱うための前提ソフトとなります(動画編集とかやってる方なら知っていると思います)。https://www.gyan.dev/ffmpeg/builds/にアクセスして必要なものをダウンロードしていきましょう。 

ダウンロードが完了したら任意の場所に解凍します。このとき解凍後のフォルダをどこか忘れない場所に設置してください(デスクトップはお勧めしない)。今回はドキュメントに設置した前提で話を進めます。

環境変数の追加

次にffmpegをspleeterが呼び出せるようにします。 ドキュメントに戻り、フォルダの名称をffmpegに変更し、アイコンをShift + 右クリックしてパスのコピーを行います。 

enter image description here

検索欄に「システム」と入力しシステムのコントロールパネルを開きます。

enter image description here

  パネルから システムの詳細設定 > 環境変数 > システムの環境変数 > PATH にたどり着きます(画像拡大推奨)。

enter image description here

 編集を押すと以下の画面が出てくるので、右上から新規を選択し、さっきコピーしたフォルダへのパスを貼り付けます。  

enter image description here

このとき左右の””を外し、末尾に/binを追加することを忘れないでください。 最後にPowerShellでffmpegを実行し、ffmpegが正しく認識されているか確認しましょう。 

enter image description here

以上のように表示されれば成功です。インストールは完了しました。お疲れ様。

使用方法

早速ソフトを使ってみましょう。今回は相対性理論の「ミスパラレルワールド」を例に使用方法を解説していきます。

東京都心 is 並行世界

spleeterには音を分割する際全部で3つのモードがあります。

  • stem2: ボーカル/伴奏
  • stem4: ボーカル/ベース/ドラム/その他
  • stem5: ボーカル/ベース/ピアノ/ドラム/その他

Stem2はオーソドックスなボーカル抽出が行えますが、stem4, 5を使うと楽器ごとにパートを分離できます。半端ねえ!実際に試していきましょう。

まずは、適当なフォルダを用意して、その中に分離したい音源を用意しましょう。

音源をボーカルと伴奏に分離するときのコマンドはこんな感じです。

 spleeter separate -o 出力する先のフォルダのパス 分離したい音源のパス

今回の場合は、

spleeter separate -o D:\document\spleeter_test "D:\document\spleeter_test\bgm.wav"

と入力しました(音源へのパスは、Shift + 右クリックからコピーできます)。 CPUの性能にもよりますが、少なくとも1分ほどはかかるので気ままに待ちましょう。 

(別バージョンのPythonで実行するときは、py -3.7 -m pip install ffmpeg-pythonを実行した上で、先に述べたように、py -3.7 -m spleeter separate -o D:\document\spleeter_test "D:\document\spleeter_test\bgm.wav"で実行します。)

Spleeterの初回実行時、学習モデルのダウンロードがあるため多少時間がかかります。根気強く待ちましょう。

/accompaniment.wav/vocals.wavがしっかり書き込まれてますね。 では実際にどの程度分離できているのか、出力された音声ファイルを聞いていきたいと思います。

ちなみに、ウイルス対策ソフトをオンにしている場合、ファイルの書き込みに失敗することがあります。失敗するときは一時的にウイルス対策ソフトを無効にしてみましょう。

2stems (ボーカル/伴奏)

かなりクオリティの高いボーカル抽出が行えていますね。カラオケ音源が手に入らない場合、これを使ってカバー音源を作ったりできそう。

4stemsや5stemsで分離したいときは-pオプションで設定します。

例:

spleeter separate -o 出力する先のフォルダのパス -p spleeter:4stems 分離したい音源のパス

4stems (ボーカル/ベース/ドラム/その他)

ボーカル、othersがところどころ聞きづらくなっていますが、ベースやギターの耳コピは格段にやり易くなっていると思います。

5stems (ボーカル/ベース/ピアノ/ドラム/その他)

今回の楽曲にはピアノが入っていないため4stemsとほとんど同じような結果になってしまいました。 電子音楽やクラシックなどジャンルが違う曲を使えば全く違った結果になると思われます。


分離したい音源を複数個並べて記述することで、一気に分離をすることができるようです。沢山分離したいときは便利です。

まとめ

以上でSpleeterの導入方法と使用方法の解説は終わりとなります。少々手間はかかりますが、手軽に先端技術に触れるよい機会になるのではないでしょうか。また記事で紹介していない機能に、手元にある楽曲データを用いてモデルをさらに強化する方法などがあります。興味がある人はGitHubのドキュメントを読んでもっと遊んでみてください。機械学習に関する開発は昨今技術の進展が目覚ましいため、今後このサービスがどのように変わっていくのか引き続き動向をチェックしていきたいと思います。 ブログ初の寄稿ということで気合を入れて書きました。それではまた逢う日までノシ。

コメント

  • ダウンロードが成功し試しに上記のコマンド(“”ありなし)を入力したところ、指定されたモジュールがないと出てしまいました。解決法を教えていただけませんか?

      • 返信ありがとうございます。
        ffmpegは、上記の通りに入力しコマンドでも確認できました。
        Anacondaで試してもやはり最終的にモジュールがないと言われ使えませんでした。
        しかし、
        https://qiita.com/Ryo0o0oOO/items/65acd38f4034800388c0
        このサイトのspleeterは上手く動いてくれました。
        しばらくは、これを使って出力しようと思います。

        • ImportError: DLL load failed: 指定されたモジュールが見つかりません。

          Failed to load the native TensorFlow runtime.

          See https://www.tensorflow.org/install/errors

          for some common reasons and solutions. Include the entire stack trace
          above this error message when asking for help.

          私もこのメッセージがでます。
          ffmpegは、上記の通りに入力しコマンドでも確認できました。
          Anacondaで試してもやはり最終的にモジュールがないと言われ使えませんでした。
          リンク先のサイトではうまくいきましたが、アップロードをするタイプなので長い曲のwav等がうまく行かない時があるのがネックですね。

  • インストールしようとしても、

    ERROR: Could not find a version that satisfies the requirement spleeter (from versions: none)
    ERROR: No matching distribution found for spleeter

    と出て、止まってしまっています。
    どうすればいいですか?

  • PC初心者なので、Anaconda経由の記事で、完全に手詰まりしていて、本当に助かりました!
    ありがとうございます!

  • 以前のセットアップ方法でspleeterを使おうとするとエラーになるようになり、このページのやり方で再インストール中です。

    本文中のhttps://www.gyan.dev/ffmpeg/builds/のリンク先が、記載されているのとは別のURLになっていて、404になり一瞬戸惑いました。

  • 上記に記載されている方法でDLしいざ、やってみよう!
    としたらこちらが出てきました。何が悪いのでしょうか。

    PS C:\Users\Users\Desktop> spleeter separate -i C:\Users\Users\Desktop\01.mp3 -o C:\Users\Users\Desktop\ -p spleeter:2stems
    Usage: spleeter separate [OPTIONS] FILES…
    Try ‘spleeter separate –help’ for help.

    Error: Missing argument ‘FILES…’.

    • インストール自体は出来ているように見えるので、指定した場所にファイル、フォルダが存在するか、またコマンドにスペースなど余計な文字が含まれないか確認してみると良いかもしれません。
      あるいはファイルのパスを””で括るとか?現在試す環境が無いのでわかりませんが…

    • 私も同様のエラーが発生します。
      過去にspleeterで分割した元ファイルでも試しましたが同様のエラーが発生しています。
      python 3.7.5での動作保証がなくなったか?

    • 自分も同じエラーで困っていたのですが、最近 -i の指定ができなくなったようで
      spleeter separate -p spleeter:2stems C:\Users\Users\Desktop\01.mp3
      といった感じにすれば動くようです。

  • お世話になります。
    上の方で紹介されていた方法を活用し、
    spleeter separate -p spleeter:2stems -o c:\spleeter C:\Users\user\spleeter\spleeter_music\1.wav
    を実行すると、無事に分離に成功したのですが、4stemsや5stemsで分離しようとすると、エラーも表示されずにスルー状態になります。
    しかし、コマンド実行直後にCドライブをチェックすると確実に容量が減っています。何度も実行し続けると、その度に容量が減り続けているので、おそらくどこかに保存されているのだと思います。
    思い当たるフォルダ(userフォルダ直下の「spleeter」や「miniconda3」「pretrained_models」など)は一通りチェックしましたが、そもそも容量が増加した形跡は確認できませんでした。
    この件につきまして、何か情報をお持ちの方はいらっしゃいますか?
    4つや5つで分離を試してみたいので、よろしくお願いします。

    • 4stemsや5stemsを試してみましたが私は成功しました。私の場合は
      spleeter separate -p spleeter:5stems C:\Users\UserName\Downloads\音源.wav
      で実行し、処理が終わると
      C:\Users\UserName\AppData\Local\Temp\separated_audio\音源
      にvocals,piano,other,drums,bass,accompaniment の計6つの音声データが確認できました。成功例として参考になれば良いのですが、私はこういった知識に疎いため的確なアドバイスが出来ず申し訳ありません。

  • 上の方を参考にし、spleeter separate -p spleeter:2stems “C:\Users\Owner\Music\separate_factory\音源.wav” でやってみたのですが、pretrained_modelしか作成されません。この場合の音源が分離されない原因は何なのでしょうか。

  • pip install spleeterを実行したら
    ERROR: Cannot install spleeter==1.4.1, spleeter==1.4.3, spleeter==1.4.4, spleeter==1.4.5, spleeter==1.4.6, spleeter==1.4.7, spleeter==1.4.8, spleeter==1.4.9, spleeter==1.5.0, spleeter==1.5.1, spleeter==1.5.2, spleeter==1.5.3, spleeter==1.5.4, spleeter==2.0, spleeter==2.0.1, spleeter==2.0.2, spleeter==2.1.0, spleeter==2.1.1, spleeter==2.1.2, spleeter==2.2.0, spleeter==2.2.1 and spleeter==2.2.2 because these package versions have conflicting dependencies.
    といったエラーが表示され、ダウンロードできませんでした。
    どうすればいいですか?

  • 素人質問で大変恐縮なのですが、スペースが含まれている曲名やアルバムはどのように記述すればいいでしょうか。

    例;
    [01. XXXXXX.flac]

    • 最も簡単な方法はファイル名を変更することです。この方法をおすすめします。
      多分” “で括る方法でも行けると思いますが、現在試す環境がないため分かりません。
      動かなかったらWeb版の利用がオススメです

  • こんにちは。

    以前、こちらのサイトを参考にしてspleeterを使ったことがあり、どんな感じだったかなーと、またこちらを参考にしてspleeterのインストールから使用までしてみようと思ったら、まさかの失敗!
    なんで!?と思ってPCの再起動やらspleeterの再インストールとかをするも上手くいかず、一応と思ってコメントを覗いてみたらまさかの”-i”が使えないとの情報。
    「spleeter 使い方」で検索して一番上に来るサイトなので、コメントだけじゃなく記事本文の方にも情報更新をしていただけたら、未来のspleeter初心者も助かるかと思います。

    具体的には、記事本文の、
    “spleeter separate -i 音源のパス -o 出力先のパス -p spleeter:[2/4/5]stems”

    “spleeter separate -o 出力先のパス -p spleeter:[2/4/5]stems 音源のパス”
    とすることで、以前と同じような結果が得られるっぽいです。

    ですので、
    “spleeter separate -i C:\Users\UserName\Desktop\original.mp3 -o C:\Users\UserName\Desktop\ -p spleeter:2stems”
    でしたら、
    “spleeter separate -o C:\Users\UserName\Desktop\ -p spleeter:2stems C:\Users\UserName\Desktop\original.mp3″
    になりますね。

    それと、”-p spleeter:[2/4/5]stems”では11 kHzまでを分離しているらしく、16 kHzまでを分離するモードもあり、そちらは”-p spleeter:[2/4/5]stems-16kHz”でできるみたいです。使い分けの基準はわかりませんが。

    • こんにちは。指摘ありがとうございます。現在多忙なため。1週間以内に対応します。

  • 使ってみました。エラーに悩まされましたが、2021-07-14さんのコメントを参考に実行したら、うまくいきました。見事に分離されてます。素晴らしいソフトです!!
    インストールの手順も主さんの記述がわかりやすく、大変助かりました。ありがとうございました。

  • お世話になっております。
    これまで使用できていたのですが、少し間を開けて実行させた所
    CPU使用率が上がり、動き出したかと思ったタイミングで

    raise ValueError(“Can’t load save_path when it is None.”)
    ValueError: Can’t load save_path when it is None.

    と表示されエラーで止まりました。
    spleeterの再インストール、環境変数の確認、ffmpegの動作確認は行いましたがやはり同じ画面が出る状態です。

    解決法に心当たりはありませんでしょうか? よろしくお願いします。

      • お返事ありがとうございます。
        pretrained_modelsフォルダについて調べた所spleeterと同じ階層にあるようなのですが
        そもそもフォルダが存在していませんでした。
        わざわざ教えていただきありがとうございます。

        以下がspleeterがエラーした際のログの全文です。
        度々恐縮ですが、わかることがあればよろしくお願い致します。

        Traceback (most recent call last):
        File “c:\users\user\appdata\local\programs\python\python38\lib\runpy.py”, line 194, in _run_module_as_main
        return _run_code(code, main_globals, None,
        File “c:\users\user\appdata\local\programs\python\python38\lib\runpy.py”, line 87, in _run_code
        exec(code, run_globals)
        File “C:\Users\user\AppData\Local\Programs\Python\Python38\Scripts\spleeter.exe\__main__.py”, line 7, in
        File “c:\users\user\appdata\local\programs\python\python38\lib\site-packages\spleeter\__main__.py”, line 256, in entrypoint
        spleeter()
        File “c:\users\user\appdata\local\programs\python\python38\lib\site-packages\typer\main.py”, line 214, in __call__
        return get_command(self)(*args, **kwargs)
        File “c:\users\user\appdata\local\programs\python\python38\lib\site-packages\click\core.py”, line 829, in __call__
        return self.main(*args, **kwargs)
        File “c:\users\user\appdata\local\programs\python\python38\lib\site-packages\click\core.py”, line 782, in main
        rv = self.invoke(ctx)
        File “c:\users\user\appdata\local\programs\python\python38\lib\site-packages\click\core.py”, line 1259, in invoke
        return _process_result(sub_ctx.command.invoke(sub_ctx))
        File “c:\users\user\appdata\local\programs\python\python38\lib\site-packages\click\core.py”, line 1066, in invoke
        return ctx.invoke(self.callback, **ctx.params)
        File “c:\users\user\appdata\local\programs\python\python38\lib\site-packages\click\core.py”, line 610, in invoke
        return callback(*args, **kwargs)
        File “c:\users\user\appdata\local\programs\python\python38\lib\site-packages\typer\main.py”, line 497, in wrapper
        return callback(**use_params) # type: ignore
        File “c:\users\user\appdata\local\programs\python\python38\lib\site-packages\spleeter\__main__.py”, line 128, in separate
        separator.separate_to_file(
        File “c:\users\user\appdata\local\programs\python\python38\lib\site-packages\spleeter\separator.py”, line 378, in separate_to_file
        sources = self.separate(waveform, audio_descriptor)
        File “c:\users\user\appdata\local\programs\python\python38\lib\site-packages\spleeter\separator.py”, line 321, in separate
        return self._separate_librosa(waveform, audio_descriptor)
        File “c:\users\user\appdata\local\programs\python\python38\lib\site-packages\spleeter\separator.py”, line 265, in _separate_librosa
        sess = self._get_session()
        File “c:\users\user\appdata\local\programs\python\python38\lib\site-packages\spleeter\separator.py”, line 240, in _get_session
        saver.restore(self._session, latest_checkpoint)
        File “c:\users\user\appdata\local\programs\python\python38\lib\site-packages\tensorflow\python\training\saver.py”, line 1291, in restore
        raise ValueError(“Can’t load save_path when it is None.”)
        ValueError: Can’t load save_path when it is None.

コメントする?

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です