2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Pythonを用いた楽曲分析(BPM編)

Posted at

はじめに

どーも!!!!deoxyです!
音楽分析がしたい!と思いlibrosaを勉強してみました。
ゆくゆくは曲のコード分析やキー分析をしたい!!!

Python3.12以上はlibrosaとの依存関係が不安定であり、うまく作動しないことがあります

実行環境

  • Google Chrome 137.0.0.0
  • Google Colaboratory
    • Python 3.11.12
    • librosa 0.11.0

Librosa

librosaとは、音楽とオーディオ分析のためのPythonパッケージです。
公式ドキュメント

Windowsの場合は、terminalを起動して

$ pip install librosa

と打てばlibrosaがインストールされます。
Pythonのバージョンによってはちゃんと動かないこともあるから注意!

BPM検出

まずはBPMの検出を試してみます。
使った音源はこちら
Mrs.GREENAPPLE様のインフェルノです。

↓クリックでYouTubeに飛びます。
インフェルノ

インフェルノのBPMをネットで調べたところ92と180~189という2通りが出てきました。ちょうど倍になっているので取り方の違いですかね。
まあそれっぽい数字が出たらよしとしましょう

実装

import librosa

# 音声ファイルの読み込み(適切なサンプリングレートに設定)
music, hz = librosa.load("sample.wav", hz=22050)

# テンポとビートの検出
tempo, beats = librosa.beat.beat_track(y=music, sr=hz)

print(tempo)
[92.28515625]

なんとこんなに簡単に実装ができます。
検出されたBPMは92なので大体あっていますね。

音声ファイルの読み込み

musicはnumpy配列で、22050kHzにサンプリングされた音声波形データが格納されています。
hzはサンプリング周波数を格納します。サンプリングを行わない場合は、hz = noneとしてください。
librosa.loadはタプル型を返します。そのため変数が二個入っています。

BPM検出

librosa.beatがBPMやビートを検出するためのモジュールです。このモジュールもタプル型を返します。
librosaの中にあるbeat_track関数は引数としてysrを持っています。そのため、関数の引数y, srに音声ファイルの読み込み時に使ったmusicとhzを渡してあげます。
今回はBPM(テンポ)が知りたいので、テンポを出力します。

これで簡単にBPMが求まります。

ちょっと脱線

Librosaはローカルのファイルしか読み込めないらしいです。
YouTubeやニコニコから曲を取ってきたいなっていうときは一度ダウンロードしてあげる必要があります。不便;;
moviepyというパッケージを使えばPythonのプログラム内でYouTubeから音声をダウンロードし一時的に保存することが可能になります。
気が向いたら試してみます。

参考

おわりに

有名どころであればBPMは調べたら出てくるのですが、ちょっとマイナーな曲だと出てこなかったりします。練習するときにメトロノームは必須なのでBPMがわかると便利です。

今回は公式ドキュメント(英語;;)とChatGPT君を頼りに作りました。
ドキュメントを読みながらコードを自分なりに書いてみて、エラーがでてどうしようもなければGPT君にお願いしていました。GPT君に丸投げはよくないけどコード理解のために使うのはいいですね。便利です。

deoxyでした!

2
1
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
2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?