目的
楽曲データは様々な楽器音で構成されている.ここでは,楽曲データを要素に分離する方法を学ぶ.
説明
NMF
スペクトログラムは縦軸が周波数・横軸が時間で表現されている.これを\(f \times t\)の行列\(M_{ft}\)とみなし,非負値行列因子分解(Non-negative matrix factorization: NMF)を行うと,行列\(M_{ft}\)を\(f \times c\)の行列\(M_{fc}\)と\(c \times t\)の行列\(M_{ct}\)の積に分解できる.$$M_{ft}=M_{fc}M_{ct}$$このとき,\(c\)はcomponentの数を表し,NMFはスペクトログラムをいくつかのcomponentに分割する手法と考えることができる.librosaモジュールを使用してオーディオデータのスペクトログラムに対してNMFを行ってみよう.
9行目でオーディオデータに短時間離散フーリエ変換をかけ,振幅スペクトログラムを求め,10行目でcomponent数を16とし,NMFを行い,得られた2つの行列を20行目から29行目で描画している.11行目で2つの行列を乗算し,振幅スペクトルを求め,31行目から34行目で描画している.実行すると以下のように表示され,振幅スペクトルから2つの行列が求められており,1つ目の行列は縦軸が周波数・横軸がcomponentであり,2つ目の行列は縦軸がcomponent・横軸が時間となっており,オーディオデータが16個のcomponentに分解されていることがわかる.
調波打楽器音分離
楽曲データは様々な楽器音から構成されている.楽曲データを調波楽器音と打楽器音に分離する処理をHarmonic Percussive Source Separation: HPSSと呼ぶ.librosaモジュールを使用して,楽曲データを調波楽器音と打楽器音に分離してみよう.
9行目でオーディオデータに短時間離散フーリエ変換をかけ,スペクトログラムを求め,10行目で調波楽器音と打楽器音のスペクトログラムに分離している.分離したスペクトログラムを19行目から27行目で描画している.実行すると以下のように表示され,調波楽器音のスペクトログラムと打楽器音のスペクトログラムが表示されていることがわかる.
課題
課題0
librosaのサンプルオーディオデータをNMFにより分解せよ.その際にcomponent数を8とせよ.
課題1
librosaのサンプルオーディオデータをNMFにより分解せよ.その際にcomponent数を16とせよ.
課題2
librosaのサンプルオーディオデータをNMFにより分解せよ.その際にcomponent数を32とせよ.
課題3
自分で用意した音楽データをNMFにより分解せよ.その際にcomponent数を8とせよ.
課題4
自分で用意した音楽データをNMFにより分解せよ.その際にcomponent数を16とせよ.
課題5
自分で用意した音楽データをNMFにより分解せよ.その際にcomponent数を32とせよ.
課題6
librosaのサンプルオーディオデータの一部を調波楽器音と打楽器音に分離し,スペクトログラムを表示せよ.
課題7
自分で用意した音楽データの一部を調波楽器音と打楽器音に分離し,スペクトログラムを表示せよ.
課題8
librosaのサンプルオーディオデータを調波楽器音と打楽器音に分離し,オーディオデータとして保存せよ.
課題9
自分で用意した音楽データの一部を調波楽器音と打楽器音に分離し,オーディオデータとして保存せよ.