Python | librosaを用いて周波数解析を行う(チュートリアルの実行)
- 2023.08.28
- librosa(Pythonプログラム)
みなさん、こんにちは!
今回は「音」をテーマに「周波数解析」を行うことができる「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)
今回は以上です。
エラー: データの取得に失敗しました。
-
前の記事
記事がありません
-
次の記事
Python | librosaを用いて信号を生成する(toneとchirp) 2023.08.28