「Spleeter」で耳コピが楽になるかもしれない

# はじめに

**Spleeter**っていうツールが登場しました（と知人に教えてもらいました）。

基本的には機械学習データを使用して、楽曲をパート分けするものなんですが、
自分はアニソンとかゲームの曲を弾いたりするので、やはり見出す用途としては「耳コピ」です。

これが楽になっちゃう（かもしれない）！　ということで、早速飛びついてみた次第です。

以下、簡単な使い方と、使ってみた結果、使ってみた感想など。

# 導入

## 超便利なやつ

https://qiita.com/Ryo0o0oOO/items/65acd38f4034800388c0

ちょっと前に出たばかりの`spleeter`ですが、早速便利なツールを作成された方がいらしゃいました。
環境ゆえに少し処理時間はかかりますが、導入の手間がないので便利です！

## どうしても自分でやりたい

自分でやりたい欲ばりさんは[この記事] (https://gigazine.net/news/20191107-spleeter/)どおりにやれば大丈夫ですが、ざっと手順を書くと

1. Condaのインストール（記事ではMiniconda3を選択、以下Miniconda3を前提）
2. spleeterプロジェクトの`clone`
3. 設定
4. 起動
5. 実行！

です。

念のためいくつか引っかかりそうなとこなどを

### git入れとこうね

記事では`git clone`をAnaconda Prompt上で実行してますが、gitのパスが環境変数に登録されていないと無効なコマンド扱いされます。
仮にgitをインストール済みでも、`git bash only`でインストールしてたりすると登録されてないかも。
環境変数に `C:\Program Files\Git\cmd` みたいな感じで追加しましょう。

ただこの部分はspleeterのプロジェクトが持ってこれてればいいので、

- git bashで`git clone`する（spleeterを実行する時に、cloneしたディレクトリを指定すればいい）
- [github](https://github.com/deezer/spleeter)からzipでダウンロードして展開する

のいずれかでも問題ないと思います。

### `WARNING:spleeter:ffprobe error (see stderr output for detail)`がでる

実行した時にこのエラーが出ることがあります。

`stderr` 見ろってことなので `2> error.log` したけど特に詳細はでず･･･。
  [issue](https://github.com/deezer/spleeter/issues/52)によると実は詳細は出ない（！）らしいので、
`ffprobe xxx.mp3`を行うも、普通に動作するし･･･。

ということでよく分からないながらも

- [ffmpeg](https://www.ffmpeg.org/)の再インストール
- 環境変数へパス通す `C:\Program Files (x86)\ffmpeg\bin` みたいな
- 再起動

あたりを行うことで動作するようになりました。

### ファイルサイズ気をつけて

二台のPCで実行してみてたんですが、片方は3分強のmp3を処理したところ見事にフリーズしました。
もう一方では特に問題なく動きましたが、どっちかというとこっちPCの方が性能が低く、フリーズの理由も不明なので
ファイルを処理する時はフリーズしても大丈夫なようにしておいた方が良いかもしれません。


# 結果

分離したといっても、それが本当に分離できているのかが判断できなければ意味がありません。
というわけで、それぞれのパートを把握してる自作曲で試します。
（ボカロなので苦手な方はご注意を）

| A       | B      |
|:-----------------|:-----------------|
| [原曲] (https://tawaship.github.io/spleeter_test/d/origin.mp3)|[原曲] (https://tawaship.github.io/spleeter_test/w/origin.mp3)|  
| [ボーカル] (https://tawaship.github.io/spleeter_test/d/vocals.mp3)|[ボーカル] (https://tawaship.github.io/spleeter_test/w/vocals.mp3)| 
| [ドラム] (https://tawaship.github.io/spleeter_test/d/drums.mp3)|[ドラム] (https://tawaship.github.io/spleeter_test/w/drums.mp3)|   
| [ベース] (https://tawaship.github.io/spleeter_test/d/bass.mp3)|[ベース] (https://tawaship.github.io/spleeter_test/w/bass.mp3)|
| [ピアノ] (https://tawaship.github.io/spleeter_test/d/piano.mp3)|[ピアノ] (https://tawaship.github.io/spleeter_test/w/piano.mp3)|   
| [other] (https://tawaship.github.io/spleeter_test/d/other.mp3)|[other] (https://tawaship.github.io/spleeter_test/w/other.mp3)|   

気になる分離精度は･･･

#### ボーカル
ボカロってこともあるのか、otherと分け合ってしまっているイメージ
**40点**

#### ドラム
割とちゃんと分離できてるが、シンバル系がotherに持っていかれてるのが残念
**70点**

#### ベース
アタック音に該当するところが恐らくotherに持っていかれて音がもこもこしているものの、音程は問題ない
**90点**

#### ピアノ
ピアノが単独に近い状態であればきっちりここに入るが、他の音が混ざってくるとotherに持っていかれる
**40点**

#### その他
殆どの上モノが割と綺麗に出てるが、上4パート以外が全部まとまるので耳コピには使いづらいかも
**50点**

といった感じでした。

[ここ](https://dev.classmethod.jp/machine-learning/ml_dj_using_deezer_spleeter/)にあるテスト結果を聞くともっと綺麗に分離できているみたいなので、楽器構成やマスタリングの質などにも大きく左右されそうですね。

# 感想

思ったよりもドラムとベースの分離がしっかりできてたので、これらのパートであれば十分使えるのではないかと思います。
特にベースはバスドラとの聞き分けがしづらい事がそれなりにあるので、この辺が分離できてることで精度が上がりそうです。

otherについても、ドラムとベースがいなくなっている分、判別はしやすくなってるんじゃないかなという印象でした。

ボーカルとピアノは･･･これからに期待。

耳コピしたことがないという人には割とおススメできる使い方かもしれません。

# 終わりに

ラジカセ（死語）でカセットテープ（死語）を流しつつ
巻戻し（古語）を繰り返して耳コピしていた頃からは考えられないくらいに時代は進化してますね。

曲を渡すと全パート完全に綺麗に分離して、かつ譜面が生成された上に最適な演奏になるようなTAB譜ができる
みたいな時代がくるのもそう遠い日ではないのかも？