MFCCと音色

目的

楽器の種類が異なると同じ音や同じ和音を演奏しても音色が異なる.音色の特徴を表す際にMFCCがよく用いられる.ここでは,librosaモジュールを使用してMFCC特徴を抽出する方法を学ぶ.

説明

MFCC

MFCCとはメル周波数ケプストラム係数(Mel-Frequency Cepstrum Coefficients)であり,音声データに対しては声道特性に対応するスペクトル包絡の特徴を表すものであった.音楽データにおけるスペクトル包絡の特徴は楽器の音色を表す特徴と考えられる.

librosaモジュールを使用して音楽データからMFCC特徴を抽出してみよう.

9行目から12行目でフレーム処理のパラメータを設定している.13行目でメルフィルタバンクの数を,14行目でMFCCの次元数を設定し,15行目で各フレームのMFCC特徴を抽出している.18行目でMFCC特徴のshapeを表示している.

実行すると以下のように表示され,MFCC特徴のshapeが(20, 216)であることがわかる.20は指定したMFCC特徴の次元数であり,216はオーディオデータの標本点数をフレーム周期に相当する標本点数で割った数に1を足した数である.19,20行目でこれを確認している.

また,24行目でMFCC特徴を描画しており,実行すると以下のように表示される.

以上の例では,オーディオデータから直接MFCC特徴を求めたが,メル周波数スペクトログラムを求めたてからMFCC特徴を求めることもできる.

16,17行目でメル周波数スペクトログラムを求め,23行目で描画している.次に,18行目でMFCC特徴を求め,28行目で描画している.実行すると以下のように表示され,先程の例と同じMFCC特徴が抽出されていることが確認できる.

楽器の音色

楽器のMFCC特徴

以下の4つのオーディオデータからMFCC特徴を抽出して描画してみよう.

  • ピアノで「C-G-Am-F」と2回演奏したオーディオデータ
  • ピアノで「F-G-Em-Am」と2回演奏したオーディオデータ
  • 弦楽器で「C-G-Am-F」と2回演奏したオーディオデータ
  • 弦楽器で「F-G-Em-Am」と2回演奏したオーディオデータ

9行目から16行目で4種類のオーディオデータのURLを保存するファイル名を指定し,18行目から22行目でファイルをダウンロードしている.31行目から27行目で,ファイルを読み込み,無音区間を取り除き,MFCC特徴を抽出し,リストに保存している.30行目から46行目で4種類のデータから抽出したMFCC特徴を描画している.

実行すると以下のように表示され,同じコード進行で演奏している異なる楽器よりも,異なるコード進行で演奏している同じ楽器のほうがMFCC特徴が似ていることが確認できる.

MFCC特徴の類似度

以上の4種類のオーディオデータでは2秒間隔でコードを演奏している.ここでは,各コードを演奏した直後に相当する2.1秒・4.1秒・6.1秒・8.1秒のフレームのMFCC特徴を抽出し,それらの類似度を求めてみよう.

32行目で取り出す時間を設定し,41行目で時間からフレーム番号に変換している.42,43行目で指定したフレームのMFCC特徴を取り出し,34行目で初期化したリストに追加している.44行目でリストをndarrayに変換している.46行目から48行目でMFCC特徴のコサイン類似度を求め,表示し,50,51行目でコサイン類似度が0.95より大きいかどうかを出力している.

実行すると以下のように表示され,初めの8つのピアノのMFCC特徴どうしの類似度が高く,後ろの8つの弦楽器のMFCC特徴どうしの類似度が高くなっていることがわかる.このことから,同じコードを演奏している異なる楽器よりも,異なるコードを演奏している同じ楽器のほうがMFCC特徴が似ていることがわかる.

課題

以下のオーディオデータを使用して課題を行え.

  • ピアノで「C-G-Am-F」と2回演奏したオーディオデータ
    • http://makotomurakami.com/blog/wp-content/uploads/2020/06/piano_C-G-Am-F.wav
  • ピアノで「F-G-Em-Am」と2回演奏したオーディオデータ
    • http://makotomurakami.com/blog/wp-content/uploads/2020/06/piano_F-G-Em-Am.wav
  • ピアノで「F-C-G-Am」と2回演奏したオーディオデータ
    • http://makotomurakami.com/blog/wp-content/uploads/2020/06/piano_F-C-G-Am.wav
  • ピアノで「Am-F-G-C」と2回演奏したオーディオデータ
    • http://makotomurakami.com/blog/wp-content/uploads/2020/06/piano_Am-F-G-C.wav
  • ピアノで「Am-Dm-G-C」と2回演奏したオーディオデータ
    • http://makotomurakami.com/blog/wp-content/uploads/2020/06/piano_Am-Dm-G-C.wav
  • ピアノで「Am-F-C-G」と2回演奏したオーディオデータ
    • http://makotomurakami.com/blog/wp-content/uploads/2020/06/piano_Am-F-C-G.wav
  • ピアノで「Em-F-G-Am」と2回演奏したオーディオデータ
    • http://makotomurakami.com/blog/wp-content/uploads/2020/06/piano_Em-F-G-Am.wav
  • 弦楽器で「C-G-Am-F」と2回演奏したオーディオデータ
    • http://makotomurakami.com/blog/wp-content/uploads/2020/06/strings_C-G-Am-F.wav
  • 弦楽器で「F-G-Em-Am」と2回演奏したオーディオデータ
    • http://makotomurakami.com/blog/wp-content/uploads/2020/06/strings_F-G-Em-Am.wav
  • 弦楽器で「F-C-G-Am」と2回演奏したオーディオデータ
    • http://makotomurakami.com/blog/wp-content/uploads/2020/06/strings_F-C-G-Am.wav
  • 弦楽器で「Am-F-G-C」と2回演奏したオーディオデータ
    • http://makotomurakami.com/blog/wp-content/uploads/2020/06/strings_Am-F-G-C.wav
  • 弦楽器で「Am-Dm-G-C」と2回演奏したオーディオデータ
    • http://makotomurakami.com/blog/wp-content/uploads/2020/06/strings_Am-Dm-G-C.wav
  • 弦楽器で「Am-F-C-G」と2回演奏したオーディオデータ
    • http://makotomurakami.com/blog/wp-content/uploads/2020/06/strings_Am-F-C-G.wav
  • 弦楽器で「Em-F-G-Am」と2回演奏したオーディオデータ
    • http://makotomurakami.com/blog/wp-content/uploads/2020/06/strings_Em-F-G-Am.wav

課題0

ピアノで「F-C-G-Am」と2回演奏したオーディオデータと弦楽器で「F-C-G-Am」と2回演奏したオーディオデータを読み込み,MFCC特徴を描画せよ.

課題1

ピアノで「Am-F-G-C」と2回演奏したオーディオデータと弦楽器で「Am-F-G-C」と2回演奏したオーディオデータを読み込み,MFCC特徴を描画せよ.

課題2

ピアノで「Am-Dm-G-C」と2回演奏したオーディオデータと弦楽器で「Am-Dm-G-C」と2回演奏したオーディオデータを読み込み,MFCC特徴を描画せよ.

課題3

ピアノで「Am-F-C-G」と2回演奏したオーディオデータと弦楽器で「Am-F-C-G」と2回演奏したオーディオデータを読み込み,MFCC特徴を描画せよ.

課題4

ピアノで「Em-F-G-Am」と2回演奏したオーディオデータと弦楽器で「Em-F-G-Am」と2回演奏したオーディオデータを読み込み,MFCC特徴を描画せよ.

課題5

ピアノで「F-C-G-Am」と2回演奏したオーディオデータと弦楽器で「F-C-G-Am」と2回演奏したオーディオデータを読み込み,各コードを演奏しているフレームのMFCC特徴を取り出し,コサイン類似度を求めよ.

課題6

ピアノで「Am-F-G-C」と2回演奏したオーディオデータと弦楽器で「Am-F-G-C」と2回演奏したオーディオデータを読み込み,各コードを演奏しているフレームのMFCC特徴を取り出し,コサイン類似度を求めよ.

課題7

ピアノで「Am-Dm-G-C」と2回演奏したオーディオデータと弦楽器で「Am-Dm-G-C」と2回演奏したオーディオデータを読み込み,各コードを演奏しているフレームのMFCC特徴を取り出し,コサイン類似度を求めよ.

課題8

ピアノで「Am-F-C-G」と2回演奏したオーディオデータと弦楽器で「Am-F-C-G」と2回演奏したオーディオデータを読み込み,各コードを演奏しているフレームのMFCC特徴を取り出し,コサイン類似度を求めよ.

課題9

ピアノで「Em-F-G-Am」と2回演奏したオーディオデータと弦楽器で「Em-F-G-Am」と2回演奏したオーディオデータを読み込み,各コードを演奏しているフレームのMFCC特徴を取り出し,コサイン類似度を求めよ.