Wizard Notes

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

LibROSA ver. 0.8.0 で基本周波数推定(YIN, pYIN)

Python の楽曲解析モジュール LibROSA が 2020年7月22日に ver. 0.8.0 に更新されていました。

Changelog — librosa 0.10.0 documentation

インストール方法

python -m pip install librosa=0.8.0

気になる変更点として、基本周波数推定アルゴリズムとして有名なYINと、確率的YINアルゴリズムが追加されたようです。

これまでのlibrosaには基本周波数推定用モジュールがなかったので、非常にありがたいです。。

librosa.yin — librosa 0.10.0 documentation

librosa.pyin — librosa 0.10.0 documentation

以下、サンプルコードを書いてみました。

サンプルコード

import librosa
import matplotlib.pyplot as plt


filepath = "audio/vcl_speech_database.wav" # your audiofile
sr = 16000
y, sr = librosa.load(filepath, sr=sr, mono=True)

fmin, fmax = 180, 520
fo_yin = librosa.yin(y, fmin, fmax)
fo_pyin, voiced_flag, voiced_prob = librosa.pyin(y, fmin, fmax)

plt.subplot(2,1,1)
plt.plot(fo_yin,  label="YIN",  alpha=0.75)
plt.plot(fo_pyin, label="pYIN", alpha=0.75) 
plt.legend(loc='upper right')
plt.title("Estimated Fo")

plt.subplot(2,1,2)
plt.plot(voiced_flag, label="voiced_flag")
plt.plot(voiced_prob, label="voiced_prob")
plt.title("Voiced flag and prob. by pYIN")
plt.legend(loc='upper right')

plt.tight_layout()
plt.show()

実行結果