音メディア処理研究室

 
デモ大会2022

クロマベクトルを用いた音楽コードの推定

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など)

が考えられます。これを踏まえたうえで倍音成分の除去を行うことでより推定制度が向上すると考えられます。

VR動画と2D動画の合成で作成したVR動画

2022年度のデモ大会の内容です。

<概要>

VR動画に2D動画を合成させることにより、新たなVR動画を作成することを目的としている。

また、編集ソフトによる合成であれば、通常のVRカメラでは撮影できないような映像を制作することができる。

<動画編集ソフト>

Adobe Premiere Pro

<使用機材>

RICOH | THETA S

ZOOM | H3-VR Handy Recorder

<発表資料>

<デモ動画>

<参考資料>
Adobe 合成動画を作成する方法
https://helpx.adobe.com/jp/premiere-pro/how-to/video-composite.html

Adobe Premiere ProでのVR編集
https://helpx.adobe.com/jp/premiere-pro/using/VRSupport.html

wondershare Adobe Premiere Proを使ってクロマキー合成をする方法をご紹介
https://filmora.wondershare.jp/adobe/make-chroma-key-video.html

楽曲のBPM分析

2022年度のデモ大会で発表した内容です。

【概要】

楽曲の音声ファイルを読み込ませるだけで自動でBPMを算出するプログラムを作成しました。出力結果はフーリエテンポグラムと自己相関テンポグラム、BPMの数値です。

 

【開発環境】

使用言語:Python

環境:Google Colaboratory(Google Chrome上)

 

【発表資料】

 

【使用した音源】

夜明けと蛍/n-buna(piaproより)

 

ウミユリ海底譚/n-buna(piaproより)

 

教師ありNMFを用いた楽曲の音源分離

2022年度のデモ大会で発表した内容です。

[概要]

教師ありNMFを用いた楽曲の音源分離

楽曲のボーカルと楽器をMATLABでプログラムを実行して分離しました。

[開発環境]

MATLAB R2017b

Windows 10

 

詳しくは以下のスライドをご覧ください。

[スライド]

[音源] (Bearlin – Roads)

・教師データ

・分離前

・分離後

Unityを用いたやまびこの再現

2023年1月17日に行われたデモ大会で、「Unityを用いたやまびこの再現」について発表しました。

音で思い浮かんだ言葉のうち、最初に出てきたものが「やまびこ」でした。そこで、やまびこをPC上で再現することにしました。

発表時に使用したスライドです。


仮想空間上で、観測者が山のほうへ「ヤッホー」と叫び、やまびこを聞き取るまでの状況を2つのシーンに分けて再現します。

開発環境として、Unity 3D(バージョン: 2021.3.8f1)を採用しました。

第1シーンでは、観測者から発せられた音波が山に反射する様子を再現します。観測者の音波は600個の球として発声者の前方へと球面状に放出され、地面に衝突した球の数や発声してから地面に衝突するまでに経過した時間を計測します。記録したデータはCSV形式で保存します。

仮想空間上の時間で15秒が経過した後、第2シーンに移行します。このシーンでは、観測者がやまびこを観測する様子を再現します。以前のシーンで計測したデータを読み込み、下記のサウンドエフェクタのパラメータに反映しています。

  • ディレイ
    • 遅延時間:発声してから球が最初に衝突するまでの時間
  • リバーブ
    • 衝突した球数/全体:ドライ信号のミックスレベル
    • 山への衝突継続時間:低周波数の残響減衰時間

今回使用した音声は以下の通りです。

「やっほー」.mp3(効果音ラボ ver3.7 声素材 日常セリフ(元気な女の子) より)

https://soundeffect-lab.info/sound/voice/line-girl1.html

以下は、実際にプログラムを実行した動画です。

<実験環境>

PC: FMV LIFEBOOK UH75

CPU: Intel Core i7-8565U

<参考文献>

Unity、Audio SFX Reverb Effect – Unity マニュアル

https://docs.unity3d.com/ja/2018.4/Manual/class-AudioReverbEffect.html