82
76

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

信号処理とか音楽の分析に大活躍しそうなlibrosa

Last updated at Posted at 2019-12-20

振動センサーとかマイクとかを使って取得した振動や音、信号をPythonで処理するときに便利なツール見つけたので、自分の備忘録としてもQiitaに投稿します。
音響信号だったり、センサの信号だったりをディープラーニングや、機械学習になげるときに使えそうです。

LibROSA
https://librosa.github.io/librosa/

ドキュメントを見ると、音楽や音の分析につかうパッケージのようです。
音楽分析の機能が豊富ですが、信号処理の必要なものはあるていどそろっている気がします。

2019年12月現在では、v0.7.1が最新のようです。

インストール方法

pip もしくは、Anacondaでインストールできます。

pipの場合

pip install librosa

condaの場合

conda install -c conda-forge librosa

公式のドキュメントには、ソースからインストールする方法も記載されてます。
Pythonのバージョンやインストール環境(Linux, OSX, Windowsなど)ごとに注意点もあるようなのでチェックが必要。

Wavの読み込み

音楽用のファイル形式は色々ありますが、wavやmp3が使えるそうです。
あとで書きますが、読みだした信号は配列に数字がならんでいるだけなので他のライブラリを組み合わせれば、さまざまな音源に対応できそう。

ライブラリの確認のために、ESC-50の音源を使います。
環境は、Jupyter Lab上でPython3.6を使ってます。

ESC-50のエンジン音を読み込んでみます。
librosa.loadを使用します。
引数には、ファイル名とサンプリング周波数を指定します。

import librosa

file_name = '/home/sound_process/data/sound/engine/1-18527-A-44.wav'
wav, sr = librosa.load(file_name, sr=44100)

注意しないといけないのが、srの値です。
srの値がデフォルトで22,050Hzになっています。
なので、返ってくる値が22,050Hzになってしまいます。
読み込みに直接影響はないですが、周波数計算する時とかグラフの横軸に影響がでます。

波形の表示も簡単にできました。
内部でmatplotlibを使っているので、画像サイズや線の色もmatplotlibの書き方で変更できます。

import librosa.display
import matplotlib.pyplot as plt

plt.figure()
plt.figure(figsize=(15, 5))
librosa.display.waveplot(wav, sr)
plt.show()

実行するとこんな感じです。
image.png

信号の形式

loadで読み込まれた信号は1次元の配列に格納されています。
こんな感じ。
image.png
もし、信号のデータがcsvであってもPythonで読み込んで配列にしてしまえば、wavを読み込んだ時と同じようにlibrosaで扱えます。

フーリエ変換

信号処理といえば?フーリエ変換ですね。
stft というフーリエ変換の関数が用意されています。
Short-time Fourier transform (短時間フーリエ変換) ができます。

import numpy as np

stft_result = librosa.stft(wav)
abs_result = np.abs(stft_result)
power_spec = librosa.amplitude_to_db(abs_result, ref=np.max)

plt.figure(figsize=(25,5))
librosa.display.specshow(power_spec, y_axis='log', x_axis='time', sr = sr)
plt.title('Power Spectrogram')
plt.colorbar(format='%+2.0f dB')
 
plt.tight_layout()
plt.show()

image.png

他にも、信号分析系で言えばメル周波数ケプストラム係数(MFCC)が計算できたり、逆フーリエ変換も簡単にできます。
ピッチシフトができたり、クロマグラムも取得できるので音程に変換したりできるのも面白そうです。

82
76
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
82
76

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?