目的
音楽データを処理する際によく使われる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倍)にし,ファイルに保存せよ.