Python モジュールインストール時の問題

提供:yonewiki

Pythonに戻る

概要

spleeter

 主に歌唱演奏音声ファイルを聞き分けることができるアプリケーション的なモジュールです。一筋縄でインストールできるモノでは無いです。こういうのはプログラマでも何でもない人が使って便利なモノなのに、これでは流行らないよね。凄い技術なのに。唄とドラムとその他の音声に分けれます。カラオケの練習にも使えます。しかも生バンド版なのでカラオケよりも物凄く難しい筈です。でも歌える様になるとリズム感が鍛えられるのでやり甲斐のあるものになります。あとはギターだけの音に近づけたりも出来ます。バンドのギターって意外と地味に大変な演奏をしていることが分かるのでギタリストの凄さが理解できるものになります。JUDY AND MARY の TAKUYAさんとかは無駄に頑張っているので、聞いてあげて欲しいな。唄が良すぎてかき消されてる感じが否めない。メッチャ面倒くさい演奏してます。そこまでしますかね。って言う感じがこのバンドの音楽の魅力なんだろうね。

うまく行った手順(2020年11月時点)

 まずminicondaをインストールする。このSiteの関連記事を読むと、やり方はわかるはず。まずはminicondaで検索したら、公式ページ出てくるし、インストールするだけ。それからチャンネルにconda-forgeを追加する。

Python 基本操作

(base) PS C:\.....>conda create -n py36 python=3.6 -y
(py36) PS C:\.....>conda activate py36
(py36) PS C:\.....>git clone https://github.com/deezer/spleeter
(py36) PS C:\.....>conda install -c conda-forge spleeter
(py36) PS C:\.....>spleeter separate -i C:\mp3\music.mp3 -o C:\mp3\music -p spleeter:2stems
INFO:spleeter:Downloading model archive https://github.com/deezer/spleeter/releases/download/v1.4.0/2stems.tar.gz
INFO:spleeter:Validating archive checksum
INFO:spleeter:Extracting downloaded 2stems archive
INFO:spleeter:2stems model file(s) extracted
(py36) PS C:\.....>

初回のspleeter実行時はこんな感じになります。出力されない。

もう一回PowerShellを起動しなおした2回目でこんな感じになりました。

(base) PS C:\.....>conda create -n py36 python=3.6 -y
(py36) PS C:\.....>conda activate py36
(py36) PS C:\.....>git clone https://github.com/deezer/spleeter
(py36) PS C:\.....>conda install -c conda-forge spleeter
(py36) PS C:\.....>spleeter separate -i C:\mp3\music.mp3 -o Output -p spleeter:2stems
INFO:spleeter:Downloading model archive https://github.com/deezer/spleeter/releases/download/v1.4.0/2stems.tar.gz
INFO:spleeter:Validating archive checksum
INFO:spleeter:Extracting downloaded 2stems archive
INFO:spleeter:2stems model file(s) extracted
INFO:spleeter:File Output/music/accompaniment.wav written succesfully
INFO:spleeter:File Output/music/vocals.wav written succesfully
(py36) PS C:\.....>spleeter separate -i C:\mp3\music.mp3 -o Output -p spleeter:4stems
INFO:spleeter:Downloading model archive https://github.com/deezer/spleeter/releases/download/v1.4.0/4stems.tar.gz
INFO:spleeter:Validating archive checksum
INFO:spleeter:Extracting downloaded 4stems archive
INFO:spleeter:4stems model file(s) extracted
INFO:spleeter:File Output/music/drums.wav written succesfully
INFO:spleeter:File Output/music/bass.wav written succesfully
INFO:spleeter:File Output/music/other.wav written succesfully
INFO:spleeter:File Output/music/vocals.wav written succesfully
(py36) PS C:\.....>spleeter separate -i C:\mp3\music.mp3 -o C:/mp3/music/5Stem/ -p spleeter:5stems
INFO:spleeter:Downloading model archive https://github.com/deezer/spleeter/releases/download/v1.4.0/5stems.tar.gz
INFO:spleeter:Validating archive checksum
INFO:spleeter:Extracting downloaded 5stems archive
INFO:spleeter:5stems model file(s) extracted
INFO:spleeter:File C:/mp3/music/5Stem/music/bass.wav written succesfully
INFO:spleeter:File C:/mp3/music/5Stem/music/vocals.wav written succesfully
INFO:spleeter:File C:/mp3/music/5Stem/music/drums.wav written succesfully
INFO:spleeter:File C:/mp3/music/5Stem/music/piano.wav written succesfully
INFO:spleeter:File C:/mp3/music/5Stem/music/other.wav written succesfully
(py36) PS C:\.....>

 プロンプトを再起動したら出力されました。何が起こった?インストール時のプロンプトに対して変な環境変数でも設定されてたのかなぁ。それが解放されたとか?わからん。謎のまま。


 処理時間としては2stemなら10分。4stemなら20分。5stemなら30分っていう感じかな。


 出力先は相対パスの場合カレントディレクトリが基点になります。自分の場合は仮想環境のインストールディレクトリをカレントにして作業をするので、C:\ProgramData\Anaconda3\envs\py36を起点にするようです。Conda環境の仮想環境インストールディレクトリ(自分の場合はpy36という名前のPython3.6.0仮想環境)ですね。


 主なモジュールでは以下のようなバージョン構成になっていました。

# Name                  Version        Build  Channel
spleeter                  1.5.3            py36h9f0ad1d_2         conda-forge
tensorflow                1.15.0           eigen_py36h932cce6_0
tensorflow-base           1.15.0           eigen_py36h07d2309_0
tensorflow-estimator      1.15.1           pyh2649769_0
scipy                     1.5.3            py36h7ff6e69_0         conda-forge
mkl                       2020.2           256

 最新版のmklは2020.4だったので、そんなに違いは無さそう。py36環境にしたことの方が効いてそうな感じはする。確かめていないので分からない。mklを最新版に置き換えても動くような気がするけどやってない。せっかく動いてるし、余計なことをする気にはなれない。


 最初はギターの音だけを聞きたいと思って導入したのですが、好きなアーチストの曲がアカペラに近いものを聞けるのは、また別の楽しみがあって良いと思います。音楽の楽しみ方が広がる良い技術だと思います。こういうニーズってあると思うので、トラック別で配信しても面白いのかもしれないと思いました。よっぽど個別のパートの演奏・歌唱技術に自信がないと出来ない事なのかもしれません。


 spleeterのインストールによって、以下のようなモジュールがminicondaの初期状態から増えました。vsを導入したwindows版です。

absl-py 0.10.0
aiohttp 3.7.2
appdirs 1.4.4
astor 0.8.1
async-timeout 3.0.1
attrs 20.3.0
audioread 2.1.8
blinker 1.4
brotlipy 0.7.0
cashed-priority 1.5.1
cachetools 4.1.1
click 7.1.2
cycler 0.10.0
decorator 4.4.2
ffmpeg-python 0.2.0
ffmeeg 4.3.1
freetype 2.10.4
future 0.18.2
gast 0.2.2
google-auth-cauthlib 0.4.1
google-auth 1.23.0
google-pasta 0.2.0
grpcio 1.33.2
h5py 3.1.0
hdf5 1.10.6
idna_ssl 2.10
importlib-metadata 2.0.0
importlib_metadata 2.0.0
importlib_resources 3.3.0
intel-openmp 2020.3
joblib 0.17.0
jpeg
keras-applications 1.0.8
keras-preprocessing 1.1.0
kiwisolver 1.3.1
krb5 1.17.1
libblas 3.8.0
libcblas 3.8.0
libcurl 7.71.1
libflac 1.3.3
liblapack 3.8.0
libogg 1.3.2
libpng 1.6.37
libprotbuf 3.13.0.1
librosa 0.8.0
libsndfile 1.0.29
libssh2 1.9.0
libtiff 4.1.0
libvorbis 1.3.7
llvmlite 0.34.0
lz4-c 1.9.2
m2w64-gcc-libgfortran 5.3.0
m2w64-gcc-lib-core 5.3.0
m2w64-gcc-libs 5.3.0
m2w64-gmp 6.1.0
m2w64-libwinpthread-git
markdown 3.3.3
matplotlib-base 3.3.3
mkl 2020.2
msys2^conda-epoch 20160418
multidict 4.7.5
norbert 0.2.1
numba 0.51.2
numpy 1.19.4
oauthlib 3.0.1
olefile 0.46
opt_einsum 3.3.0
packaging 20.4
pandas 1.1.4
pillow 8.0.1
pooch1.2.0
protbuf 3.13.0.1
pyasn1-modules 0.2.7
pyasn1 0.4.8
pyjwt 1.7.1
pyparing 2.4.7
pysoudfile 0.10.2
python-dateutil 2.8.1
python_abi 3.6
pytz 2020.4
requests-oauthlib 1.3.0
resampy0.2.2
rsa 4.6
scikit-learn 0.23.2
scipy 1.5.3
spleeter 1.5.3
tensorboard-plugin-wit 1.7.0
tensorboard 2.4.0
tensorflow-base 1.15.0
tensorflow-estimator 1.15.1
tensorflow 1.15.0
termcoloar 1.1.0
threadpoolctl 2.1.0
tk 8.6.10
tomado 6.1
typing-extensions 3.7.4.3
typing_extensions 3.7.4.3
werkzeug 0.16.1
wrapt 1.12.1
xz 5.2.5
yarl 1.6.1
zipp 3.4.0
zlib 1.2.11
zstd 1.4.5
_tflow_select 2.2.0

めっちゃ増えた。本当にこんなに必要なのか?謎だわ。

うまくいかない手順

 python環境をpython3.7やpython3.8にするとERRORが発生する。  

 例えば、python3.7のconda create -n py37 python=3.7 anaconda -y のようにAnaconda環境ありのpython3.7でやっても滅茶苦茶に容量を食うにも関わらずエラーになる。spleeterのコマンドを実行するとmkl_Intel_thread.dllが合致するのが見つからないというエラーになります。

Intel MKL FATAL ERROR: Cannot load mkl_intel_thread.dll.

この不具合を解消するには、mklをインテルのホームページからダウンロードしてきて最新版にするのがいいとかという情報が手に入る。面倒くさくてやってない。

対処方法

ここからregister&downloadから入手できる。ユーザ登録必須。インストーラの容量500MBくらいあって、C++向けのMKLだけをインストールしても3GBくらい必要。かなりのデータサイズの割に本当に欲しいファイルは少しだけです。
  • C:\Program Files (x86)\IntelSWTools\compilers_and_libraries_2020.4.311\windows\redist\intel64_win\mkl
デフォルト設定でインストールすると上記のようなもの。これらのmkl_core.dll、mkl_def.dll、mkl_intel_thread.dllをC:\Windows\System32とかPythonのC:\ProgramData\Anaconda3\envs\py36\Library\bin\にインストールすると良いらしい。後者にはmkl_で始まるdllファイルの全てをコピーした方が良いらしい。此処までやって上手くいった人もいればそうでもない人がいるみたいなで真剣にはやらなかった。

でもpy36ならmkl_Intel_thread.dll関連のエラーが出なかったという情報があったので、そっちを選択したら上記のように上手くいった。mklはIntelが開発したMath Kernel Libraryで計算技術の頂点にたつメカニズムを発信している。高速演算とかなのかもしれない。こういう技術があると知れたことは今回の躓きの収穫だ。すげぇぜインテル。C++とFortran用があって3GB超えのLibrary。何じゃコレ。凄い気になる。今後、この技術がなんのか調べてみようと思う。


 例えばpython3.8.0のconda create -n py38 python=3.8 anaconda -yのようにやってもダメ過ぎて疲れる。いつまでもモジュールが見つからないとかいうエラーが出たり、競合の永久ループになったりする。

以下のようなエラーです。(連続して表示されるわけではなく、それぞれ単体で出るエラーです。)

PackagesNotFoundError: The following packages are not available from current channels:

Solving environment: failed with initial frozen solve. Retrying with flexible solve.
Solving environment: failed with repodata from current_repodata.json, will retry with next repodata source.

 これから挑む人には、上記にあるような、この手順がお勧めだと思う。うまく行かない場合は世の中が動いているということなんだろう。世の中が動くことはいいこともある。なので、新たな対処法を考えよう。

Pythonに戻る