オーディオデータの簡単な処理

目的

音楽データを処理する際によく使われるPythonモジュールにlibrosaモジュールがある.ここでは,音楽情報処理の基礎として,librosaモジュールを使用したオーディオデータの入出力と時間領域における処理について学ぶ.

説明

オーディオデータの入力

librosaモジュールを使用してオーディオデータを読み込んでみよう.

1行目でlibrosaモジュールをインポートし,5行目でlibrosaモジュールとともにインストールされるオーディオファイルのファイル名を取得し,6行目で表示している.8行目でオーディオファイルからオーディオデータyとサンプリングレート(標本化周波数)srを取得し,9行目から12行目でそれらの情報を表示している.14行目ではサンプリングレートを指定してオーディオデータを読み込み,15行目から18行目で読み込んだ情報を表示している.20行目ではステレオデータとしてオーディオデータを読み込み,21行目から24行目で読み込んだ情報を表示している.

実行すると以下のように表示され,読み込んだオーディオファイルのファイル名,オーディオデータとそのshape・dtype,サンプリングレートが確認できる.

以上ではogg形式のオーディオデータを読み込んだが,librosaモジュールでは様々な形式のオーディオデータを読み込むことができる.ここでは,wav形式のデータを読み込んでみよう.

9,10行目でオーディオデータのURLと保存するファイル名を指定し,14行目から17行目でファイルをダウンロードし保存している.19行目から24行目でオーディオデータを読み込み,その情報を表示している.

実行すると以下のように表示され,wav形式のファイルが読み込めていることが確認できる.

波形の表示

読み込んだオーディオデータの波形を表示してみよう.

8行目でオーディオデータを読み込み,2行目でlibrosa.displayモジュールをインポートし,14行目でオーディオデータの波形を表示している.9行目では8秒から10秒間のオーディオデータを読み込み,16行目でその波形を表示している.10行目では4.2秒から0.1秒間のオーディオデータを読み込み,18行目でその波形を表示している.

実行すると以下のように表示され,指定した時間における波形が表示されていることが確認できる.

オーディデータの出力

オーディオデータをファイルに出力するには以下のようにすればよい.

6行目から8行目で開始時間と継続時間を変えてオーディオデータを読み込み,10行目から12行目でwav形式のファイルとしてそれぞれのデータを書き出している.実行すると3つのwavファイルができる.

サンプリングレート・時間の取得

オーディオデータのサンプリングレートと時間を取得してみよう.

8行目でオーディオデータを読み込み,サンプリングレートを取得し,9行目で時間を取得し,10,11行目でそれらを表示している.サンプリングレートと時間はオーディオデータを読み込まなくても取得することができる.13,14行目でオーディオデータのファイル名を指定してサンプリングレートと時間を取得し,15,16行目でそれらを表示している.

実行すると以下のように表示され,元のオーディオデータのサンプリングレートは44.1kHzであり,librosaモジュールでサンプリングレートを指定せずに読み込むと半分の22.05kHzとなっていることがわかる.

サンプリングレートの変更

オーディオデータのサンプリングレートはファイルから読み込むときに指定できるが,読み込んだ後に変更することもできる.

7行目でオーディオデータを読み込み,8,9行目でサンプリングレートとオーディオデータのshapeを表示している.11行目でサンプリングレートを8kHzに変更し,12行目でそのshapeを表示している.

実行すると以下のように表示され,サンプリングレートが変更されたことにより,標本点の数が変わっていることが確認できる.

時間方向に伸縮

時間方向にオーディオデータを伸縮するには以下のようにすればよい.

8行目のように記述すると速度を2倍(時間を1/2)にすることができ,9行目のように記述すると速度を0.5倍(時間を2倍)にすることができる.

実行すると以下のように表示され,速度(時間)が指定された縮尺で変更されていることがわかる.

無音区間の除去

オーディオデータによっては最初と最後に無音区間があることがある.無音区間を除去するには以下のようにすればよい.

23行目のように記述すると,オーディオデータyの最初と最後の無音区間を取り除いたデータtrimmed_yを取得することができる.また,元のデータから切り出した区間に相当するインデックス番号indexを取得することができる.24行目でindexを,30行目で無音区間を取り除いたオーディオデータの波形を表示している.

実行すると以下のように表示され,無音区間が取り除かれていることが確認できる.

課題

課題0

オーディオデータhttp://makotomurakami.com/blog/wp-content/uploads/2020/06/piano_cdefgabc3.wavを読み込み,波形を表示せよ.

課題1

自分で用意した音楽データを読み込み,波形を表示せよ.

課題2

サンプリングレートを指定し,オーディオデータhttp://makotomurakami.com/blog/wp-content/uploads/2020/06/piano_cdefgabc3.wavを読み込み,波形を表示せよ.

課題3

サンプリングレートを指定し,自分で用意した音楽データを読み込み,波形を表示せよ.

課題4

オーディオデータhttp://makotomurakami.com/blog/wp-content/uploads/2020/06/piano_cdefgabc3.wavの一部を読み込み,波形を表示し,ファイルに保存せよ.

課題5

自分で用意した音楽データの一部を読み込み,波形を表示し,ファイルに保存せよ.

課題6

オーディオデータhttp://makotomurakami.com/blog/wp-content/uploads/2020/06/piano_cdefgabc3.wavのサンプリングレートと時間を表示せよ.

課題7

自分で用意した音楽データのサンプリングレートと時間を表示せよ.

課題8

オーディオデータhttp://makotomurakami.com/blog/wp-content/uploads/2020/06/piano_cdefgabc3.wavを読み込み,速度を2倍(時間を1/2)にし,ファイルに保存せよ.

課題9

自分で用意した音楽データを読み込み,速度を0.5倍(時間を2倍)にし,ファイルに保存せよ.