Wizard Notes

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

メロディ分析/抽出のための、librosa.salience() によるSalience (顕著性) スペクトログラムの算出

はじめに

Python の音楽信号分析モジュールである LibROSAには、楽曲の音高/メロディ/和音情報をより精度よく抽出するためのツールとして、Salience (顕著性)スペクトログラムを抽出する関数 librosa.salience が実装されています。

今回は、librosa.salience を使って音高を抽出をするサンプルコードを紹介します。

なお、Salience スペクトログラムの説明やlibrosa.salience() の具体的な計算方法については、以下の記事にまとめています。

www.wizard-notes.com

librosa.salience の使い方

必要な入力と、始めに調整すべきパラメタについてコメントにて説明しております。

詳細は、LibROSAのドキュメントをご覧ください。

librosa.salience(
   S, # 分析する信号の STFT もしくは CQT スペクトログラム
   freqs, # Sの、角周波数ビンの中心周波数
   h_range, # Salience スペクトログラムの算出において、
            # どの倍音を考慮するか
   weights=None,  # ↑で指定した、各倍音をどれだけ重視するかの重み付け
   aggregate=None, 
   filter_peaks=True, 
   fill_value=nan, 
   kind='linear', 
   axis=0
)

ソースコードと音源

分析する音源は、以下の合成音声(初音ミク)を使いました。

分析結果

  1. 振幅スペクトログラムベースの Salience スペクトログラム算出結果 f:id:Kurene:20201220150515p:plain

  2. CQT (クロマグラム) ベースの Salience スペクトログラム算出結果 f:id:Kurene:20201220181223p:plain

どちらの結果でも、Salience スペクトログラムは入力スペクトログラムと比べて近隣周波数ビンへの漏れが軽減された信号となりました。

従って、 Salience スペクトログラムを使うことでメロディや音高、和音の分析アルゴリズムの精度が向上する可能性があります。

Fo抽出HPSSなどと組み合わせて使用するのもよいかもしれません。

www.wizard-notes.com

www.wizard-notes.com

実用時に参考になりそうなこと

  • 分析対象の音の調波構造を確認し、h_rangeweightsをチューニングするとよさそうです。