電気ギターによる機械の操作 6班 1.はじめに 今日ロボットは様々な分野で活躍しているが, 音 楽とロボットという分野は今まであまり関わりがな かったので, その二つを組み合わせて何か作れない かと考えた. 例えば,何か曲を流すとその曲調を感 じ取りそれに合わせて踊るロボットなどである. そ のためには, まずはまずは単音の音程に応じて動き を制御できるロボットを作ろうと考えた. 今回はマ イクロコンピュータの arduino と電気ギターを用い てそのようなロボットの製作を試みた. 2.理論 2.1 電気ギターの仕組み 図 1 に示すように, 電気 ギターにはピックアップという部品がついており, 音を電気信号に変換する装置が備わっている. 従っ てマイク等を用いずに音を入力できるので, 周囲の 雑音等の影響を少なくできると考え電気ギターを用 いることにした. 図 1 電気ギターの仕組み 2.2 FFT(高速フーリエ変換) 音声信号は時間𝑡軸上 の 1 次元の情報として𝑥(𝑡)と表わせる. フーリエ変 換とは, 式(1) により𝑥(𝑡)を周波数𝑓軸で表現する変 換である. 𝑋 𝑓 = ∞ −∞ 𝑥(𝑡)exp(−2𝜋𝑖𝑓𝑡)𝑑𝑡 (1) 𝑥(𝑡) は連続値であるが, PC 上では音声信号は離 散値として扱われる. そこで離散値を対象とできる 離散フーリエ変換(DFT)を考える.DFT の定義式は 乾拓未 𝑋 𝑘 = 𝑁−1 𝑥 0 𝑡 exp −2𝜋𝑖𝑘𝑛 𝑁 (0 ≤ 𝑘 ≤ 𝑁 − 1) (2) である. ここで,サンプリング周波数を𝑓𝑠 とすると, 𝑓 = 𝑘𝑓𝑠 /𝑁である. DFT により求められた𝑋 𝑘 は 𝑋 𝑘 = 𝐴(𝑘)exp(𝑖𝜃(𝑘)) (3) と表わせ, この𝐴(𝑘)が𝑘番目の周波数の振幅である の. 従って DFT をすることによって音声信号の振幅 スペクトル𝐴(𝑓)を求めることができる. 高速フーリエ変換とは N を2の累乗とし, 高速で 上述の離散フーリエ変換を計算するアルゴリズムで ある. 3.制作手順 まず,下記ホームページ 1)の FFT 寄贈ライブラリ と, 下記ホームページ 2)の FFT 実行プログラムを用 いて arduino 上で FFT を実行するプログラムを組 んだ. このプログラムが適切に作動するか調べるた めに, まずはマイクを用いて入力した信号を FFT し, 含まれている周波数を解析した. 次に電気ギターを用いて信号を入力をした. そし て次の実験 1 を行い、装置 1, 2, 3 を制作した. 3.1 信号入力の精度の実験 マイクを用いた場合と 電 気 ギ ター を 用い た 場 合で そ れ ぞれ 30 秒 ず つ 440Hz の音を入力し、解析された周波数とその回数 を調べ, どちらの方が正確に狙った周波数の音を入 力できるか比較した. (実験 1 とする) 3.2 装置 1 の作成 装置1は, 入力した音の周波数 に応じて異なる LED が点灯する装置である. 3.3 装置 2 の作成 装置 2 は, あらかじめフレーズ を設定しておいて,そのフレーズの順番通りの音程 の音を入力すると LED が点灯する装置である. こ れは, フレーズの最初の音の周波数が入力されると 変数 a が 0 から 1 になり, フレーズの次の音の周波 数が入力されなおかつ a=1 ならば変数 b が 0 から 1 になり……ということを繰り返すプログラムを組む ことで作成した. 3.4 装置 3 の作成 装置 3 は, 444Hz の音が入力さ れてから特定のタイミングで 481Hz の音が入力さ れると LED が点灯する装置である. これは 444Hz と 481Hz の音が入力された時刻をそれぞれ t1, t2 として記録し, (t2-t1)が特定の範囲に収まると LED が点灯するようにプログラムを組んで作成した. 下図 2 が完成図である. 図2 完成図 4.結果 ・電気ギターで入力した音の FFT プログラムの都合上分解能は 37Hz であったが, 十分正確に周波数を解析できた. ギターの音色は比 較的倍音成分が多いことが懸念されたが, 概ね入力 した基音が表示され, 倍音はあまり表示されなかっ た.高音弦よりも低音弦の方が倍音成分が少なかっ た. また, 同じ強さで弦を弾いてもリアピックアップ よりもフロントピックアップの方が信号が入力され やすかった. ・実験 1 について 表示された主な周波数とその回数を表 1,2 にま とめた. 表 1 電気ギターによる入力 周波数(Hz) 回数 444 148 407 11 851 24 巻弦であることに起因すると考えられる. ・同じ強さで弦を弾いてもフロントピックアップの 方がリアピックアップよりも音を入力しやすかった のは, フロントピックアップの方が弦の中心に近い 位置にあるため, ピックアップ上の弦の振幅がリア 側よりも大きく出力が大きかったからであると考え られる. ・実験 1 について マイクは周囲の音を拾ってしまうため, 目的の周 波数の音のみを入力することが難しかった.今回の 実験でも発信機で作成した倍音成分の少ない 440Hz の音を, スピーカーをマイクに押し当てるよ うにして入力しないと 444Hz と表示されず, 電気ギ ターによる入力の方がずっと精度が良かった. 表 1 の 407, 851Hz はピッキングの際のノイズが 原因であり, 表 2 の 259, 296Hz は周囲の音(PC の ファンの音等)の周波数であると考えられる. ・装置 2,3 を組み合わせ, 正確な順番とタイミング で音が入力されると LED が光るようなプログラム が組めれば, フレーズを練習する際に自分が正確に 弾けているか判断できるような装置が作れると考え た. ・装置 2 について 現状のプログラムだと, 正確に音が順番通りに入 力されないと成功と判断されず, 弦から指を離す際 のノイズ等でフレーズを構成する周波数の音が入力 されてしまうと順番が狂ったことになり, 失敗とな ってしまう. このままだとよほど正確に演奏しな いと成功だと判断されないので, 入力時間が極めて 短い信号はノイズとして処理できるようなプログラ ムが組めればより実用的な装置ができると考えた. 6.結論 ・arduino と電気ギターを用い, 入力した音声信号 の周波数に応じて操作する装置を作成できた. ・マイクよりも電気ギターを用いたほうが正確に音 声信号を入力できる. 表 2 マイクによる入力 周波数(Hz) 回数 444 82 259 45 296 51 5.考察 ・高音弦よりも低音弦の方が倍音成分が少なかった のは, 高音弦がプレーン弦であるのに対して, 低音 弦はより豊かな音色を出すために倍音を出しやすい 参考文献 1)http://wiki.openmusiclabs.com/wiki/ArduinoFF T (2014/12/24 アクセス) 2)http://forum.arduino.cc/index.php?topic=1756 79.0 (2014/12/24 アクセス) 3)http://ism1000ch.hatenablog.com/entry/2014/0 5/20/172612 (2014/12/24 アクセス)
© Copyright 2024 Paperzz