電気ギターによる機械の操作

電気ギターによる機械の操作
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 アクセス)