Wizard Notes

Python, JavaScript を使った音楽信号分析の技術録、作曲活動に関する雑記

librosa.core.load() のバックエンドが audioread から PySoundFile に代わった件

PySoundFile vs audioread ?

LibROSAを最新版 (0.7.1) に更新したら、LibROSAの音楽信号の読込を担う load()のバックエンドが、audioreadからPySoundFileに代わったとのこと。

ただし、LibROSA 0.7.1では、PySoundFileがインストールされていない場合は代わりにaudioreadを使う実装になっています。

>>> y, sr = librosa.load(filepath, sr=sr, duration=10, mono=True)
...Python36\site-packages\librosa\core\audio.py:146: UserWarning: PySoundFile failed. Trying audioread instead.
  warnings.warn('PySoundFile failed. Trying audioread instead.')

PySoundFileでは、様々なオーディオデータを扱うことができる C言語実装のライブラリ Libsndfile を使っています。audioreadFFmpegをバックエンドとしているため、導入に一手間必要&処理的に非効率ということなのでしょうか…。

また、audioreadでは、強制的にPCM16-bitのデータになってしまうため、24-bit等のデータをそのまま扱えないという問題もあるようです。

デベロッパーの Brian McFee 氏曰く、

bmcfee commented on 12 Mar

Quick benchmark: loading a 4-minute wave file brings the average load time from 92ms down to 8ms.

Speedup is less dramatic on compressed files (eg ogg), but everything seems to work as expected.

[CR needed] Soundfile-based loader #847

とのことなので、長い or 大量の楽曲信号を扱うときに嬉しい気がします。

github.com

github.com