Python | librosaを用いて周波数解析を行う(チュートリアルの実行)

Python | librosaを用いて周波数解析を行う(チュートリアルの実行)

みなさん、こんにちは!

今回は「音」をテーマに「周波数解析」を行うことができる「librosa」を使ってみます。

librosa

librosaは音声を解析するためのライブラリです。詳細は以下のサイトから↓

インストール&試しに使ってみる

実際に使って理解します。(公式サイトのチュートリアルを参考としています)

※今回の開発環境は「Jupyter Notebook」で行っています。

1)librosaのインストール

以下のコマンドでインストールを行います。

pip install librosa

2)音源の取得

今回は librosaが提供するサンプル音源を用います。

サンプルの使い方

librosa.exsample(Key)で対象の音源をダウンロードし、利用することができます。

例えば↓

filename = librosa.example('nutcracker')

ダウンロードした音源を聴くには

音源を聴くには以下のように書きます。

import librosa
import librosa.display
import IPython

# nutcracker(くるみ割り人形)をダウンロード
filename = librosa.example('nutcracker')

# ファイルを読み込む
y, sr = librosa.load(filename)

#再生
IPython.display.Audio(data=y, rate=sr)

3)サンプルプログラム

公式で公開されているサンプルプログラムを実行します。

import librosa

# 1)音源のダウンロード
filename = librosa.example('nutcracker')

# 2)音源のロード
#   波形データ: `y`
#   サンプリングレート:`sr`(デフォルトは 22050 Hz )
y, sr = librosa.load(filename)

# 3)ビートトラッカーを実行
tempo, beat_frames = librosa.beat.beat_track(y=y, sr=sr)

# 4)BPMを表示(1分間あたりの四分音符の数)
print('テンポ : 毎分 {:.2f} ビート'.format(tempo))

# 5)ビート発生時のタイムスタンプを取得
beat_times = librosa.frames_to_time(beat_frames, sr=sr)

4)の結果としては「テンポ : 毎分 107.67 ビート」となりました。

実際のビート発生時のタイムスタンプは、以下のように格納されています。

「ハーモニー」と「パーカッション」を分離

引き続いてチュートリアルの「高度な使用法」の一部を実行します。

librosa.effects.hpss(y) によって、メロディーと打楽器を分けることができます。

import numpy as np
import librosa

# 1)音源のダウンロード
y, sr = librosa.load(librosa.ex('nutcracker'))

# 2)窓関数をシフトさせる幅
#     音源のsr(サンプリングレート)はデフォルトで 22,050Hzとなる
#     23msec(≒ 512サンプル/22,050Hz)毎に窓をシフトさせる
hop_length = 512

# 3)ハーモニーとパーカッションを分離する
y_harmonic, y_percussive = librosa.effects.hpss(y)

# 4)パーカッションを元に、ビートを抽出する
tempo, beat_frames = librosa.beat.beat_track(y=y_percussive,sr=sr)

# 5)BPMを表示(1分間あたりの四分音符の数)
print('テンポ : 毎分 {:.2f} ビート'.format(tempo))

# 6)再生(パーカッション)
IPython.display.Audio(data=y_percussive, rate=sr)

今回は以上です。

エラー: データの取得に失敗しました。