目的
音楽データは和音やコードと言われる心地良いいくつかの音の組み合わせで構成されることが多い.ここでは,和音と和音を表現するときに使用されることが多いクロマグラムについて学ぶ.
説明
和音
長三和音
ピアノでC3から1オクターブ上のC4までの13音「C3 C#3 D3 D#3 E3 F3 F#3 G3 G#3 A3 A#3 B3 C3」を順に弾いたオーディオデータにConstant-Q変換をかけ,パワースペクトログラムを表示してみよう.
実行すると以下のように表示され,例えば最初の1秒でC3の音を弾いている区間では,C3の2倍・3倍・4倍…の周波数成分が強く現れていることがわかる.これは調波構造や倍音構造と呼ばれる特徴で,弦楽器や管楽器で弾いた音に現れる特徴である.
C3の2倍の周波数の音は1オクターブ上のC4であり,4倍の周波数の音は2オクターブ上のC5であることは自明である.ここではC3の3倍の周波数の音や5倍の周波数の音が何かをlibrosaモジュールを使用して調べてみよう.
11行目でC3の周波数を求め,12,13行目でC3の1倍・2倍・3倍・4倍・5倍の周波数の音名を表示している.実行すると以下のように表示され,C3の3倍の周波数の音はG4であり,5倍の周波数の音はE5であることがわかる.
C3の2倍の周波数の音はC4であり,その間を12等分すると,半音あたり周波数は\(2^{\frac{1}{12}}\)倍になることがわかる.音が半音高くなる度に周波数がどれだけ高くなるかを調べてみよう.
2,3行目で,\(2^{\frac{1}{12}}, 2^{\frac{2}{12}}, \cdots 2^{\frac{12}{12}} \)を求め,表示している.実行すると以下のように表示され,C3の半音で4つ上の音であるE3の周波数がC3の周波数の約1.25倍であることがわかる.したがって,E3の1オクターブ上のE4の周波数はC3の周波数の約2.5倍となり,E3の2オクターブ上のE5の周波数はC3の周波数の約5倍となることがわかる.また,C3の半音で7つ上の音であるG3の周波数がC3の周波数の約1.5倍であることがわかる.したがって,G3の1オクターブ上のG4の周波数はC3の周波数の約3倍となることがわかる.これは,C3の3倍の周波数の音がG4であり,5倍の周波数の音がE5であることを説明している.
以上より,調波構造をもつ楽器においてCの音とEの音とGの音はよく響く(調和する)ことがわかる.この3音の関係を長三和音(major triad, major chord)と呼び,元となる音(根音)がCの場合,C Majorと呼ぶ.この性質は根音がCでない場合においても共通であり,根音と半音で4つ上の音と7つ上の音はよく調和する.12種類の根音に対する長三和音は以下のようになる.
短三和音
長三和音とともによく使用される和音に短三和音(minor triad, minor chord)がある.短三和音とは,根音と半音で3つ上の音と7つ上の音によって構成される和音である.12種類の根音に対する短三和音は以下のようになる.
その他の和音
3つの音から構成される和音には,長三和音・短三和音の他に減三和音や増三和音がある.また,4つ以上の音から構成される和音もある.ここでは,上記の長三和音と短三和音のみを扱うことにし,その他の和音については説明を省略する.
コード進行
和音(chord)を順に演奏したものをコード進行と呼び,音楽においてよく使用されるコード進行がいくつかある.例えば「C Major, G Major, A minor, F Major」の順に演奏したコード進行を「C-G-Am-F」と書くことにすると,よく使用されるコード進行には以下のようなものがある.
クロマグラム
オーディオデータに対してConstant-Q変換を行うと,音名に対応する中心周波数の振幅やパワーを求めることができた.オクターブが異なる同じ音名に対して振幅やパワーをまとめて,縦軸をピッチクラス・横軸を時間として描画したものをクロマグラムと呼び,音楽データの和音やコード進行を分析する際に使用されることがある.
ピアノで「C-G-Am-F」と2回演奏したオーディオデータに対してクロマグラムを描画してみよう.
21行目でピアノで「C-G-Am-F」と2回演奏したオーディオデータを読み込み,22行目で無音区間を削除している.24行目でフレーム周期に対応する標本点数を,25行目でピッチクラスの数を,26行目でオクターブ数を指定し,27行目でクロマグラムを求め.29行目で求めたクロマグラムのshapeを表示している.
実行すると以下のように表示され,クロマグラムのshapeが(12, 695)であることがわかる.12は指定したピッチクラスの数であり,695はオーディオデータの標本点数をフレーム周期に相当する標本点数で割った数に1を足した数である.30,31行目でこれを確認している.
また,35行目でクロマグラムを描画している.実行すると以下のようにクロマグラムが表示される.最初の2秒の区間はC Majorであり,C(根音)とE(根音から半音で4つ上)とG(根音から半音で7つ上)のピッチクラスの成分が強く現れている.次の2秒の区間はG Majorであり,G(根音)とB(根音から半音で4つ上)とD(根音から半音で7つ上)のピッチクラスの成分が強く現れている.次の2秒の区間はA minorであり,A(根音)とC(根音から半音で3つ上)とE(根音から半音で7つ上)のピッチクラスの成分が強く現れている.次の2秒の区間はF Majorであり, F(根音)とA(根音から半音で4つ上)とC(根音から半音で7つ上)のピッチクラスの成分が強く現れている.このように,クロマグラムは和音やコード進行を確認する際によく使用される.
コード進行の推定
ピアノで「C-G-Am-F」と2回演奏したオーディオデータのクロマグラムからコード進行を推定してみよう.
30行目で音名からなる配列を,31行目から54行目で長三和音と短三和音の辞書を,55行目で各フレームの時間のデータを作成している.57行目でクロマグラムの配列を転置し,58,59行目で各フレームのクロマ特徴を降順にソートし,値の大きい3つのクロマ特徴に対応するインデックスを求めている.60行目で値の大きい3つのクロマ特徴に対応する音名の集合を求め,61行目で時間と3つの音名を表示している.62行目から64行目で,3つの音名からなる長三和音か短三和音があれば,それを表示している.
実行すると以下のように表示され,多くのフレームで正しくコードを推定できていることがわかる.
課題
以下のオーディオデータを使用して課題を行え.
- ピアノで「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
課題0
D3の3倍の周波数の音名と5倍の周波数の音名を求めよ.
課題1
E3の3倍の周波数の音名と5倍の周波数の音名を求めよ.
課題2
F3の3倍の周波数の音名と5倍の周波数の音名を求めよ.
課題3
ピアノで「C-G-Am-F」と2回演奏したオーディオデータからコード進行を推定せよ.
課題4
ピアノで「F-G-Em-Am」と2回演奏したオーディオデータからコード進行を推定せよ.
課題5
ピアノで「F-C-G-Am」と2回演奏したオーディオデータからコード進行を推定せよ.
課題6
ピアノで「Am-F-G-C」と2回演奏したオーディオデータからコード進行を推定せよ.
課題7
ピアノで「Am-Dm-G-C」と2回演奏したオーディオデータからコード進行を推定せよ.
課題8
ピアノで「Am-F-C-G」と2回演奏したオーディオデータからコード進行を推定せよ.
課題9
ピアノで「Em-F-G-Am」と2回演奏したオーディオデータからコード進行を推定せよ.