Pythonで音声処理をするならlibrosaを使いましょう

Pythonで音声処理をするならlibrosaを使いましょう プログラミング

上図のようなグラフをlibrosaを使えば、簡単に表示できます。
もちろん、それ以外にもlibrosaでできることはたくさんあります。

そこで、本記事ではlibrosaに関する説明とそのインストール方法を解説していきます。

本記事の内容

  • librosaとは?
  • librosaのインストール
  • librosaの動作検証

それでは、上記に沿って解説していきます。

librosaとは?

公式サイト
https://librosa.org/

librosaは音楽・オーディオ分析のためのPythonパッケージです。
音楽情報検索システムを作成するために必要な構成要素を提供します。

librosaには、次のサブモジュールが用意されています。

  • librosa.beat
  • librosa.core
  • librosa.decompose
  • librosa.display
  • librosa.effects
  • librosa.feature
  • librosa.filters
  • librosa.onset
  • librosa.segment
  • librosa.sequence
  • librosa.util

上記サブモジュール一覧は、librosanの機能一覧とも言えます。
この機能を一つづつ確認していきます。

librosa.beat

テンポを推定し、ビートを検出する機能です。

テンポとは、音声の速さを表します。
単位は、BPM(beats per minute)。

ビート(beat)は、日本語だと拍となります。
心拍数や脈拍もビートですね。

BPMという表現からわかるように、1分間におけるビート数によりテンポは決まります。
そして、BPMが多くなればなるほど、拍と拍の間隔は短くなります。

つまり、音声の速さは、拍と拍の間隔によって決まると言えます。

librosa.core

coreであり、librosaの中核機能です。

  • オーディオファイルの読み込み
  • スペクトログラム表現の計算
  • 音楽分析のために一般的に使われるツール

つまりは、librosaは音楽分析に必要な機能は一通り揃えているということです。

librosa.decompose

調波打楽器音分離(HPSS)とスペクトログラムの分解に関する機能です。

HPSS(Harmonic/Percussive Sound Separation)は、簡単に言うと音を分離させます。
調波音と打楽器音を分離します。

調波音とは、ピアノやギターが奏でる音楽の音色部分です。
打楽器音とは、ドラムなどが発する突発音のことを言います。

HPSSを利用すれば、ドラムの音声だけを切り出すことができるということですね。

librosa.display

matplotlibによる音声データの可視化ができます。
グラフ化することができるということです。

matplotlibのインストール自体は、PIPコマンドで簡単にできます。
しかし、日本語化対応は若干面倒な部分があります。

以下の記事で日本語化に対しては、解説しています。

Windowsの場合

Linux(Ubuntu)の場合

librosa.effects

ピッチシフトとタイムストレッチといった音声処理機能です。

まずは、ピッチに関する説明が必要になります。
ピッチは、音の高さを表しています。
周波数(Hz)とも言いますね。

ピッチシフトは、ピッチスケーリングとも表現します。
音の長さを変えずに音の高さ(ピッチ)を変える編集機能のことを言います。

タイムストレッチは、ピッチシフトの逆です。
ピッチ(音の高さ)を変えずに音の長さを変える編集機能のことになります。

librosa.feature

音声の特徴抽出と操作に関する機能です。

抽出できる主な特徴は、以下。

  • クロマグラム(和音特徴量)
  • メルスペクトログラム
  • メル周波数ケプストラム(MFCC)
  • リズム

そして、これらの特徴量を操作することが可能です。

librosa.filters

定Q変換などのフィルタバンクを生成する機能です。
内部関数として存在しています。

そのため、みなさんが直接利用することはないでしょう。
内部関数は、無視しましょう。

librosa.onset

オンセット検出とオンセット強度計算に関する機能です。

オンセット検出により、音の立ち上がりを検出することできます。
音の立ち上がりとは、ある音が最初に鳴った時点のことです。

また、オンセット検出で検出した音声の強度を測定することができます。

librosa.segment

再帰行列の構築、逐次制約付きクラスタリングなどのための関数が用意されています。

  • cross_similarity
  • recurrence_matrix
  • recurrence_to_lag
  • lag_to_recurrence
  • timelag_filter
  • path_enhance
  • agglomerative
  • subsegment

librosaに標準で用意されている機能では物足りない人向けの機能と言えます。

librosa.sequence

librosa.segmentと同じようなモノです。
ビタビ復号化、遷移行列といった逐次モデリングのために必要な関数が用意されています。

librosa.util

正規化、パディング、センタリングといった関数が用意されています。
複雑な計算を行うための便利関数です。

librosaのインストール

最新バージョンは、0.8.0です。
公開日は、2020年7月22日となります。

librosaはリリースから、7年以上経過しています。
しかし、まだバージョン1.0には到達していないようです。

今のペースは、1年に0.1上がるペースになります。
そうだとすれば、2022年には1.0に到達するかもしれません。

では、このバージョン0.8をPIPでインストールします。
ただ、まずはPIPの更新からです。
PIPを利用する際には、常に更新を心がけましょう。

python -m pip install --upgrade pip

いざ、librosaのインストールです。

pip install librosa

上記インストールを実行すると、以下の表示で終了。

Successfully built librosa audioread resampy
Installing collected packages: soundfile, resampy, pooch, audioread, librosa
Successfully installed audioread-2.1.9 librosa-0.8.0 pooch-1.3.0 resampy-0.2.2 s
oundfile-0.10.3.post1

とりあえず、インストールは完了です。
では、最後に検証のためにlibrosaの動作を確認しましょう。
インストールはできたけど、動かないというケースもゼロではありません。

librosaの動作検証

公式サイトより、「Quickstart」用のコードを取得。
それを参考にしたのが、以下のコードです。

# ビートトラッキングのサンプル

import librosa

# 1. 付属のオーディオサンプルのファイルパスを取得する
filename = librosa.example('nutcracker')

# 2. オーディオを波形 `y` として読み込む
#    サンプリングレートを `sr` として格納する。
y, sr = librosa.load(filename)

# 3. デフォルトのビートトラッカーを実行する
tempo, beat_frames = librosa.beat.beat_track(y=y, sr=sr)

print('Estimated tempo: {:.2f} beats per minute'.format(tempo))

# 4. ビートイベントのフレームインデックスをタイムスタンプに変換します。
beat_times = librosa.frames_to_time(beat_frames, sr=sr)

「librosa.beat」で説明した内容が、コードの理解に役立ちます。
コードを実行した結果は、以下。

Estimated tempo: 107.67 beats per minute

1分間に約108回のビート(拍)があるということです。
なお、オーディオサンプルは以下URLからダウンロードしているようです。

https://librosa.org/data/audio/Kevin_MacLeod_-_P_I_Tchaikovsky_Dance_of_the_Sugar_Plum_Fairy.ogg
この音声ファイルを読み込んで(load)、処理しています。

ここまで上記プログラムの動きを確認できれば、インストールは成功と言えます。
ちなみに、冒頭の音声波形のグラフは、ダウンロードしたオーディオサンプルのモノです。

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