2023年1月17に行われたデモ大会にて発表した内容です。
[実験環境]
・プログラム作成および実行:MATLAB2017
・音源の作成:Cakewalk by bandlab
[使用する用語の説明]
・クロマベクトル:音名を周波数軸として、パワーの分布を表現した特徴量
・コード:同時に演奏された2つ以上の和音
[発表内容]
初めに、今回の実験の大まかな手順について説明をします。
①推定したいコード音からクロマベクトルを構築し、なっている音を抽出する。
②抽出した音の組み合わせからコードを推定する
なお、今回の実験は打ち込み音源とギターを録音した音源の2つで行います。
[予備実験についての説明]
先述した発表にあたって、デモ大会本番に向けた予備実験を行いました。
発表本番を想定して、打ち込み音源とギターを録音した音源の2種類であらかじめ実験を行うことで本番の精度を上げることを目的としています。
[打ち込み音源を用いた予備実験]
予備実験の打ち込み音源で使用した楽器およびコードを以下に示します。
<使用楽器>
1. Piano1 2. Marimba 3. Harp 4. Soprano Sax 5. Nylon Gt. 6. Cello 7. Natural Lead
※楽器名はCakewalk by bandlabのプラグインを参照
<使用コード>
1. Cmaj 2. Gmaj 3. Amin 4. Emin 5. Dsus4 6. Bsus4 7. Gaug 8. F#aug 9. A#dim 10. Fdim
参考として使用したコード10パターンを鳴らした音源を示します。
各楽器に対して10個のコードの音源、計70個の音源を作成してコードの推定を行っていきます。
[ギターの実音源を用いた予備実験]
予備実験のギターの実音源に使用したエフェクトおよびコードを以下に示します。
<使用エフェクト>
1. AC-Top30 Basic Clean 2. The Crunch 3. Dirty
※エフェクト名はCakewalk by BandlabのアンプシミュレーターTH3を参照
<使用コード>
・先ほど打ち込み音源で使用した10個のコードを使用
各エフェクトに対して10個のコードの音源、計30個の音源を作成してコードの推定を行っていきます。
参考として、ギターで10個のコードを録音した音源を示します。
[実験結果]
MATLABにおける実行結果を以下に示します。
※この表の見方は0-1 ~ 0-10が正解のコード、1 -1 ~ 7-10が打ち込み音源で出力されたコード、11-1 ~ 13-10がギター音源で出力されたコードとなっています。
この表からもわかるように、打ち込み音源は5-1, 5-2, 5-4, 5-7, 5-10でミスがあり、ギターを録音した音源については、13-7, 13-8, 10-1, 10-2, 10-3でミスがありました。一方で、それ以外の音源は正解のコードが出力されていました。
[デモ大会本番で行った実験]
デモ大会では、予備実験に使用したプログラムを用いてデモを行いました。
打ち込み音源を用いた実験では、時間の都合上予備実験で用いたすべての音源に対してコード推定を行うことが難しかったため、使用した音源のうち1.Piano1と2.Marimbaの20個の音源のコードを推定しました。
ギターを録音した音源では、発表時にギターの音を録音したものを用いて実験を行いました。なお、こちらも時間の都合上10個のコードを演奏することが難しかったため、1. AC-Top30 Basic Cleanのエフェクトを用いて1. Cmaj 3. Amin 5. Dsus4 7. Gaug 9. A#dimの5つのコードを推定します。
[実験結果]
発表本番で行った実験の結果を以下に示します。
※0-1 ~ 0-10および00-1 ~ 00-10は正解のコード、1-1 ~ 2-10は打ち込み音源によって出力されたコード、14-1 ~ 14-5はギターの音源によって出力されたコードを示す。
表からわかるように、すべての音源において正常にコード推定ができていることがわかります。
[考察・まとめ]
今回のデモ大会では打ち込み音源・録音した音源の2種類の音源からクロマベクトルを生成してコードの推定を行いました。
発表時に行った実験ではすべてのコードを正常に推定することができました。
一方で、予備実験の際には正常に推定できていないコードが存在しました。この理由として
・楽器やエフェクトによって倍音成分の出方が異なる
・押さえ方が同じコードが存在すること(GaugとBaug, FdimとBdimなど)
が考えられます。これを踏まえたうえで倍音成分の除去を行うことでより推定制度が向上すると考えられます。