【Python】オーディオ解析ライブラリ LibROSAで波形表示や分離する

LibROSA
この記事は約4分で読めます。

LibROSAとは、音楽やオーディオ解析が出来るPythonパッケージです。
Brian McFee氏らにより開発され、現在もアップデートされています。
現在のバージョンは0.7です。(2020年4月17日)
では、実際に使っていきましょう。

LibROSA — librosa 0.7.2 documentation

LibROSAでできること

  • オーディオファイル入出力とデジタル信号処理
  • 情報の表示機能
  • 特徴抽出や特徴量操作による楽曲データの変形
  • オンセット特定、ハミング検索、断片検索など
  • ビートとテンポの数値化や抽出
  • スペクトログラム分離、スペクトラム情報として取得
  • エフェクトをかける
  • 出力、外部ファイルとして保存
  • テンポを考慮したセグメント分け
  • 各種ユーティリティ
  • フィルタ機能

インストール方法

pipでインストールする

pip install librosa

Anaconda環境の場合

conda install -c conda-forge librosa

LibROSAを使ってみる

メルスケールのスペクトグラムを表示する

from __future__ import print_function

import numpy as np

import matplotlib.pyplot as plt
import matplotlib.style as ms
ms.use('seaborn-muted')
%matplotlib inline

import librosa
import librosa.display

audio = librosa.util.example_audio_file()

y, sr = librosa.load(audio)

S = librosa.feature.melspectrogram(y, sr=sr, n_mels=128)

log_S = librosa.power_to_db(S, ref=np.max)

plt.figure(figsize=(10, 4))

librosa.display.specshow(log_S, sr=sr, x_axis='time', y_axis='mel')

plt.title('mel power spectrogram')

plt.colorbar(format='%+02.0f dB')

リズムや和音を検出して分離する

# 和音とリズムに分離します。
y_harmonic, y_percussive = librosa.effects.hpss(y)

# 和音、リズムの波形を取得する
S_harmonic   = librosa.feature.melspectrogram(y_harmonic, sr=sr)
S_percussive = librosa.feature.melspectrogram(y_percussive, sr=sr)

# パワースペクトログラムをdBに変換する
log_Sh = librosa.power_to_db(S_harmonic, ref=np.max)
log_Sp = librosa.power_to_db(S_percussive, ref=np.max)

plt.figure(figsize=(10, 4))

# メルスケールのスペクトログラムを表示します。
# 和音
plt.subplot(2,1,1)
librosa.display.specshow(log_Sh, sr=sr, y_axis='mel')
plt.title('mel power spectrogram (Harmonic)')
plt.colorbar(format='%+02.0f dB')

# リズム
plt.subplot(2,1,2)
librosa.display.specshow(log_Sp, sr=sr, x_axis='time', y_axis='mel')
plt.title('mel power spectrogram (Percussive)')
plt.colorbar(format='%+02.0f dB')

最後に

オーディオ解析ライブラリ、LibROSAを使用して波形の表示、分離を行いました。
機能が豊富でとても使いやすいのでぜひ利用してみましょう。

タイトルとURLをコピーしました