なるように、なる

徒然なつぶやき、備忘録です。

タブラの音を学習させた

タブラの演奏を視覚化させるために、タブラの音を識別させることにチャレンジしています。タブラは2つの太鼓から20種類ほどの音色をだすことが出来ますので、それをひとつひとつ識別して、演奏をリアルタイムにVJみたいにしたいと思ってます。

今回識別させた音

キールフセイン先生の曲を波形を見てみましょう。このピークになっているのが太鼓の音です。

f:id:Shampagne:20171111170959p:plain

今回はこの曲の中から4種類の音を切り出してみました。

「na」

f:id:Shampagne:20171111171723p:plain

「tun」

f:id:Shampagne:20171111171539p:plain

「te」

f:id:Shampagne:20171111171602p:plain

「ge」

f:id:Shampagne:20171111171615p:plain

波形を見てみると、それぞれ個性がありますね。なんとなくいけそうな気がしません?ちなみに、私はこの作業のために曲を聴きながらそれぞれの波形を30個ずつ切り出したので、波形を見て音を識別できるようになりましたw
同じことをプログラムにもやってもらおうと思います。

どうやって識別させるか?

色々と調べてみて、いちばんやりたいことに近かったのがこちらです。

webdatareport.hatenablog.com

あとは、「実践機械学習システム」の9章(音楽ジャンル分類)を参考にしました。

要点は音のデータをMFCC (メル周波数ケプストラム係数)に変換し、それを特徴量とするということです。はっきり言ってMFCCが何かはさっぱりですが、音声認識などではメジャーな手法ということです。先人の力に頼りまくりたいと思います。

識別させてみた

実は今回、大変だったのはここまでです。どうやるかを調べるのが大変でしたが、あとは凄く簡単(株式会社ルーター様!ありがと!)。

やったことは以下。

1.元の楽曲から学習用に太鼓の音を切り出す(4種類 x 30パターン)。
2.太鼓の音が入ってない部分をノイズデータとして切り出し、1.と混ぜてデータ水増し(soxという神ライブラリを利用)。
3.wavデータをMFCCに変換。
  ※scikits.talkboxなど、MFCCを計算するライブラリは色々ある。
4.3.で得た特徴量をCNNにかける。

結果

89%まで識別できるようになりました。おぉ。

 

 Epoch loss: 0.2590 - acc: 0.8841 - val_loss: 0.2423 - val_acc: 0.8900
Test loss: 0.242288478737
Test accuracy: 0.89

 

f:id:Shampagne:20171111180943p:plain

トライアルとしては十分な成果が得られました。
次回は学習したモデルを使って実際にザキール先生の曲を再生しながら太鼓の音をリアルタイムに識別してみたいと思います。