目次
1. librosaとは
 – librosaのモジュール一覧
 2. librosaの実験
 2.1 librosaの環境構築
 2.2 音声ロード
 2.3 音楽情報検索
 2.4 beat tracker
 2.5 音声の可視化
 2.6 harmonic-percussive
 2.7 スペクトログラム
1. librosaとは
librosaは音楽・オーディオの処理と解析をするPythonパッケージです。
– librosaのモジュール一覧
librosa : ibrosaのコア
 librosa.beat : テンポ、ビートを検出する機能
 librosa.decompose: 調波打楽器音分離とスペクトログラムの分解に関する機能
 librosa.display: 音声データの可視化する機能
 librosa.effects: ピッチシフトとタイムストレッチといった音声処理機能
 librosa.feature: 音声の特徴抽出機能
 librosa.filters: フィルタバンクを生成する機能
 librosa.onset: オンセット検出とオンセット強度計算に関する機能
 librosa.segment: 再帰行列の構築、逐次制約付きクラスタリングなどのための関数の機能
 librosa.sequence: ビタビ復号化、遷移行列といった逐次モデリングのために必要な関数の機能
 librosa.util: 正規化、パディング、センタリングといった関数の機能
資料:https://librosa.org/doc/latest/index.html
 Github:https://github.com/librosa/librosa
2. librosaの実験
2.1 librosaの環境構築
PyPIでのインストール
| pip install librosa | 
Anacondaでのインストール
| conda install -c conda-forge librosa | 
今回はGoogle Colabで実験します。Librosaがインストールされています。
2.2 音声ロード
Nutcrackerのサンプルデータをロードします。yの音声のデータとsrのサンプルレートを出力します。
サンプリングレートは、1秒間に実行する標本化処理の回数です。例えば、標準的なサンプリングレートである44.1kHzの場合、毎秒44100回標本化を行うということです。
| # Load example import librosa 
 filename = librosa.example(‘nutcracker’) y, sr = librosa.load(filename, duration=20.0) | 
音声を確認します。
| import IPython.display 
 IPython.display.Audio(data=y, rate=sr) | 
2.3 音楽情報検索
結果を確認します。
22050のサンプルレート、441000のサンプルデータ、20秒です。
| print(sr)        # sampling rate print(y) print(len(y)) # total sample print(len(y)/sr) # second | 
22050
[ 2.2716861e-06 5.3327208e-06 -7.2473290e-06 … 7.9551965e-02
7.2584212e-02 6.9123745e-02]
441000
20.0
ビット深度(びっとしんど)は、ある単位あたりのビット数です。 ビットの深さ、ビットデプス (bit depth) とも表現します
これらは、以下の対応あります。
ただし以下の場合はビットレートで、下記のような音声の品質表です。
2.4 beat tracker
テンポ、ビートを検出するができます。
112 ビート・パー・ミニッツになります。
ビート・パー・ミニッツ(BPM:Beat Per Minute)は1分間の拍数を示す値で曲のテンポを示す数値。
| # Run beat tracker tempo, beat_frames = librosa.beat.beat_track(y=y, sr=sr) 
 # tempo beats per minute print(f’Estimate tempo {tempo :.2f} beats per minute’) | 
Estimate tempo 112.35 beats per minute
2.5 音声の可視化
Matplotlibで音声の可視化します。
| import matplotlib.pyplot as plt import librosa.display 
 plt.figure() plt.subplot(3, 1, 1) librosa.display.waveplot(y, sr=sr) plt.title(‘Monophonic’) | 
2.6 harmonic-percussive
HPSS(Harmonic/Percussive Sound Separation)というのは、音源中の調波音/打楽器音が、それぞれ時間方向に滑らか/周波数方向に滑らかという異った性質を持つことを利用して、両者を分離する方法のことです。
y_harm, y_perc とのharmonic-percussiveの音声を簡単にできます。
| # Separate harmonics and percussives into two waveforms import librosa.display 
 y_harm, y_perc = librosa.effects.hpss(y) 
 print(y_harm.shape) print(y_harm) | 
harmonic-percussiveの可視化
| plt.subplot(3, 1, 3) librosa.display.waveplot(y_harm, sr=sr, alpha=0.25) librosa.display.waveplot(y_perc, sr=sr, color=’r’, alpha=0.5) plt.title(‘Harmonic + Percussive’) plt.tight_layout() plt.show() | 
2.7 スペクトログラム
音声信号に「短時間フーリエ変換(Short-time Fourier transform : STFT)」を行うことでスペクトログラムが得られます。
harmonic-percussiveのスペクトログラムを可視化します。スペクトログラムの画像データは画像の深層学習ネットワークに入力することができます。
| import numpy as np import matplotlib.pyplot as plt 
 from IPython.display import Audio 
 import librosa import librosa.display 
 D = librosa.stft(y) 
 D_harmonic, D_percussive = librosa.decompose.hpss(D) 
 # Pre-compute a global reference power from the input spectrum rp = np.max(np.abs(D)) 
 fig, ax = plt.subplots(nrows=3, sharex=True, sharey=True) 
 img = librosa.display.specshow(librosa.amplitude_to_db(np.abs(D), ref=rp), y_axis=’log’, x_axis=’time’, ax=ax[0]) ax[0].set(title=’Full spectrogram’) ax[0].label_outer() 
 librosa.display.specshow(librosa.amplitude_to_db(np.abs(D_harmonic), ref=rp), y_axis=’log’, x_axis=’time’, ax=ax[1]) ax[1].set(title=’Harmonic spectrogram’) ax[1].label_outer() 
 librosa.display.specshow(librosa.amplitude_to_db(np.abs(D_percussive), ref=rp), y_axis=’log’, x_axis=’time’, ax=ax[2]) ax[2].set(title=’Percussive spectrogram’) fig.colorbar(img, ax=ax) | 
担当者:KW
 バンコクのタイ出身 データサイエンティスト
 製造、マーケティング、財務、AI研究などの様々な業界にPSI生産管理、在庫予測・最適化分析、顧客ロイヤルティ分析、センチメント分析、SaaS、PaaS、IaaS、AI at the Edge の環境構築などのスペシャリスト
 
 







