pythonの音楽解析ライブラリlibrosaを試してみた

librosaというのはpythonのライブラリの1つであり、音楽を解析するのに使う。

python 音楽 解析」で検索してみると、結構な割合でlibrosaを使っている。

Pythonを使った音楽解析をやってみる - のんびりしているエンジニアの日記

深層学習を使って楽曲のアーティスト分類をやってみた! - Platinum Data Blog by BrainPad
この記事はブレインパッドの公式ブログのもので、音楽からアーティストの分類をしている。なかなか面白いなと思う。ここでもスペクトログラムを描くのにlibrosaを使っている。

どうやらlibrosaは、pythonを使って音楽の分析をしようと思ったらメジャーに使われているライブラリらしい。
しかし、pythonの良いライブラリを紹介しているawesome pythonには入っていない。(何でやねん。)
awesome-python: A curated list of awesome Python frameworks, libraries, software and resources

ちょっと使い始めて、公式サンプルを動かしてみたところまでのメモです。

公式ドキュメント

https://github.com/librosa/librosa
https://librosa.github.io/librosa/
同じようで少し違うドキュメントが2ヶ所に存在している。

上のgithub.comのほうに「Introduction notebook」のリンクがあった。リンク先のjupyter notebookを落として、動かしてみる。
なお、下のgithub.ioのほうがより詳細で、ライブラリ内の各関数の使い方が書いてある。

サンプルを動かしたらエラーが出た

librosaのインストールは簡単で、pip install librosaでインストールできる。
ダウンロードしたnotebookを起動して、実行……
あれ、エラーが出てきた。

---------------------------------------------------------------------------
NoBackendError                            Traceback (most recent call last)
<ipython-input-5-9f5c39d613b9> in <module>
      5 # audio_path = '/path/to/your/favorite/song.mp3'
      6 
----> 7 y, sr = librosa.load(audio_path)

c:\program files\python37\lib\site-packages\librosa\core\audio.py in load(path, sr, mono, offset, duration, dtype, res_type)
    110 
    111     y = []
--> 112     with audioread.audio_open(os.path.realpath(path)) as input_file:
    113         sr_native = input_file.samplerate
    114         n_channels = input_file.channels

c:\program files\python37\lib\site-packages\audioread\__init__.py in audio_open(path)
    114 
    115     # All backends failed!
--> 116     raise NoBackendError()

NoBackendError: 

librosaのForum上でも同じ報告が上がっているし、
githubのissueも立っている
これらを読むと、「対象のファイルの読み込みに失敗している(読み込める形式でない)。ffmpegをインストールすれば解決する」ということが分かる。

audio_path
 -> 'c:\\program files\\python37\\lib\\site-packages\\librosa\\util\\example_data\\Kevin_MacLeod_-_Vibe_Ace.ogg'

audio_path = librosa.util.example_audio_file() で指定されるファイルは、拡張子oggである。デフォルトで(ffmpeg不使用で)どの形式の音楽ファイルが読み込めるのかよくわからない。oggがデフォルトでは読み込めず、ffmpegを使う必要があるということだろう。

http://librosa.github.io/librosa/tutorial.html の方には

The first step of the program:
filename = librosa.util.example_audio_file()
gets the path to the audio example file included with librosa. After this step, filename will be a string variable containing the path to the example audio file. The example is encoded in OGG Vorbis format, so you will need the appropriate codec installed for audioread. と書いてある。「appropriate codec installed」ってのが「ffmpegをインストールしておけ」ってことなんだろうか?

https://www.ffmpeg.org/
からffmpegを落とすが、Windows版ではソースからビルドすることができないので実行ファイル形式でダウンロードする。 https://www.ffmpeg.org/download.html
から上の「Download」を選ばずに下のWindowsロゴマークから進み、ビルド済みの実行ファイルをダウンロードする。exeファイルのあるディレクトリに対してパスを通せば完了だ。

librosaチュートリアルでは何をやってるの

  • メル・スペクトログラムの描画
  • Harmonic-percussive source separation (HPSS) 音程のある音と打楽器の音を分離する
  • クロマグラム(Chromagram) 12音のうちどれが鳴っているか
  • MFCC (メル周波数ケプストラム係数)

など。