SSブログ

ギターが優しく泣いている

イントロの素晴らしい曲というと、ジョージ・ハリスンの「マイ・スウィート・ロード」が思い浮かびます。このイントロをシンセサイザーで演奏してみても、どうもしっくりいきません。それはギターには弦と弦の間に時間差があるからではないかと思い当たりました。ではと、DX7でギターをシミュレートしてやろうと考えたのです。デジタルシンセサイザーのDX7は同時発音数が16音もあります。だったら、6弦ギターではなく、12弦ギターも可能なはずです。わりと簡単な動機ですが、ギターのストローク奏法を実現しようとしたのが発端です。

■12弦ギターのチューニング
6弦の場合のチューニングは、多分、万国共通で、6弦からEADGBEですが、12弦の場合はいろいろな方法があるようです。ネットで調べると、ビートルズが愛用していたリッケンバッカー社の12弦ギターはEeAaDdGgBBEEの調弦になっていたので、今回はこの調弦方法を使いました。(他のはeEaAdDgGBBEE だそうです)。なお、12弦は低い方から、6a、6b、5a、5bという風に表しています。

ギターのフレット番号(下の0から15)とmidiノートとの関連

 
6a
E
6b
e
5a
A
5b
a
4a
D
4b
d
3a
G
3b
g
2a
B
2b
B
1a
E
1b
E
0
40 52 45 57 50 62 55 67 59 59 64 64
1
41 53 46 58 51
63
56
68 60 60 65 65
2 42 54 47 59 52 64 57 69 61 61 66 66
3 43 55 48 60 53 65 58 70 62 62 67 67
4 44 56 49 61 54 66 59 71 63 63 68 68
5 45 57 50 62 55 67   60 72 64 64 69 69
6 46 58 51 63 56 68 61 73 65 65 70 70
7 47 59 52 64 57 69 62 74 66 66 71 71
8 48 60 53 65 58 70 63 75 67 67 72 72
9 49 61 54 66 59 71 64 76 68 68 73 73
10 50 62 55 67 60 72 65 77 69 69 74 74
11 51 63 56 68 61 73 66 78 70 70 75 75
12 52 64 57 69 62 74 67 79 71 71 76 76
13 53 65 58 70 63 75 68 80 72 72 77 77
14 54 66 59 71 64 76 69 81 73 73 78 78
15 55 67 60 72 65 77 70 82 74 74 79 79

主弦は大文字、副弦は小文字で示します。
フレット番号が0というのは開放弦を表しています。
ノート番号は10進数表記です。
このリストを眺めているうちに重大な事実に気付きました。構想段階では、ギターの弦、フレットと音階の関連をテーブルデータに持つ必要があると考えていましたが、単純に考えて、大きなテーブルのデータを持つ必要はなく、演算で対応ができるとわかってしまったのです。(ギター弾きならあたりまえですけど)、

MIDIノート = 開放弦のデータ+フレット番号

実際に作成したテーブルデータは、MIDIノート番号の他、周波数(82Hz〜)や、音階記号(C2〜)をフレットごとに載せたものだったので、この努力の結果はいつか役に立つ時がくるのでしょう。

■使用するマイコン
曲のイントロだけなので、せいぜい数小節。4分音符で10個程度といったところです。しかし、鍵盤では、弦と弦の間のミリセカンドの時間差を手で弾くというのはむずかしいので、マイコンでmidi信号を制御する方法を考えました。(DX7のキーボードを使わないって・・・・)
回路的にはmidi出力信号だけなので、PIC12F1840のような、小ピンのマイコンで間に合うのですが、デバッグが非常にやりにくいので、PIC16F1827を使用することに決めました。回路図は以下のようになります。嬉しいことに5V単一電源が使用できます。


Guitar.png

この回路図はKiCADで描きました。実は、使いまわしで合理化しています。マイコン名とポート名を変えただけです。

■動作の説明
下図はギターのフレットと指で押さえる点をあらわしています。
GateTiME.png

ダウンストロークの場合、6弦aから矢印の方向に時間差をもって発音することになります。リアルタイムmidiで発音する場合、通常はG時間(ゲートタイム)とS時間(ステップタイム)でノートON信号とノートOFF信号をコントロールしますが、弦と弦の間の時間差を表現するためにT時間をつけることにしました。通常、S時間(ステップタイム)はG時間(ゲートタイム)と同時にカウントを開始すると定義されているようですが、ここでは簡単のため、G時間終了後としています。
プログラムの流れとしては、

●曲コードリストから演奏するコードをとりだす。
●6弦aからT時間が経過後に、コードに相当するmidiデータを発音(ノートON)。
●G時間後に発音を止めます(ノートOFF)。
●無音の状態でS時間カウントする。
●6弦aから1弦bまでの12弦の音をそれぞれ発音する。

流れはとてもシンプルなのですが、各弦が3つのタイマーを持つことになるので、12*3=36のタイマーを制御することになりました。

■プログラムの動作確認方法
プログラム本体の説明をする前になんなのですが、どう確認するのかが問題です。2〜3音ならば聴いてわからないこともないのですが、12弦となればさすがに難しいです。
プログラム作成時に使用しているロジック・アナライザが重宝しました。このロジアナは波形で表示することはもちろん、midiプロトコルを理解して測定した結果を時間データ付きで出力してくれるので、msの時間差を確認することが出来ました。

MIDI_Guitar出力.png

 













■便利グッズ
演奏に使用するタイマーが36個もありますので、ソフトウェアタイマーで実現することになります。といって、用意する変数が8ビット(または16ビット)サイズで36個もあると、マイコンのメモリーが不足してしまいます。仕方がないのでビット単位で制御することにしました。(実は大好きなのですけど)。こういうビット演算をする時はヒューレットパッカードのHP-16Cが役に立ちます。HEX(16進)からBIN(2進)のほとんどの演算ができるので重宝します。例えば、64ビットサイズの16進数の1の補数を2進数で表示したいなどが簡単にできます。

Soft_HC16C_120157s.JPG


HP16C_120432s.JPG









残念なことに本家のHP社のHP-16Cは廃版になっています。ネット中を探していたら、アンドロイド端末のアプリで、2社から出されているのを発見しました。その他、windowsのエミュレータでも存在しています。リアルの現物ではスイスの会社(スイスフランの支払いだから)がほぼ同一のものを発表されているので、今のが破損したら購入を検討したいです。余談ですが、HP社のHP-16Cはヤフオク、ebayなどのオークションでたまに見かけます。値段も高すぎず、妥当なところです。レア物という考え方ならば、本体というよりも付属のマニュアルの方でしょう。実は・・・・。ネットで探すとマニュアルもpdfファイルで見ることができるようです。


今日の作業はここまで。ビール(もとい、新ジャンル)が10月から値上げになるそうです。だもんで、飲みだめの日々に乾杯。

※このブログで書かれた内容によって生じた損害等の一切の責任を負いかねますので、予めご了承下さい。

nice!(0)  コメント(0) 
共通テーマ:趣味・カルチャー

nice! 0

コメント 0

コメントを書く

お名前:
URL:
コメント:
画像認証:
下の画像に表示されている文字を入力してください。

この広告は前回の更新から一定期間経過したブログに表示されています。更新すると自動で解除されます。