YAMAHA のeVocaloid 音源を搭載した
NSX-1 チップ、を搭載したSwitch Science 製
eVY1 シールドが発売されました。
iKero 推しの私としては悩ましいところですが、結局 MFT2013 の会場で購入しました。
自分用メモを兼ねて、いくつか分かった事/ハマった事をまとめます。
○どうやって制御する?
MIDI 準拠。Arduino から送り易いように、ボード上で UART TX ピン(D1) またはSoftwareSerial 用にD3 ピン の切り替えができるようになっている。
USB MIDI に対応しており、PC などのUSB ホスト機器から直接コントロールできる。
Web MIDI API を使用した
サンプルがYAMAHA から公開されている。
MIDI は基本的に、3byte で1つのMIDI メッセージを形成している。
MIDI の解説ページは音楽作成ソフト視点のものが多く、実際にどういうバイト列が送られるのか、調べるのが大変だった。
○歌詞はどうやって送る?
MIDI の System Exclusive Message で歌詞を送る。歌詞は PA (Phonetic Alphabet) という書式で、PA およびSysEx の書き方は仕様書(
このページの一番下の
PDF)を参照。
(Switch Science のページにあるArduino 用サンプルコードもわかりやすい)
一度に持てる歌詞データは 128音まで(単位不明)。日本語の1つの音で1〜4Byte 使用し、音の区切り文字にも1Byte 使うため、30〜40音程度しか持つ事が出来ない。
→1曲歌うには、数フレーズごとに歌詞を送りながら演奏することになる?
○発音タイミングは?
NOTE ON メッセージを送る。
あらかじめ送った歌詞を順番に発音し、最後まできたら先頭に戻る。
1つ前の音に戻ったりは出来ない模様。
○同時発音は可能?
GM 音源との同時発音は可能。eVocaloid は単音のみ。
○電源は?
Arduino の電源ピン(5V-GND) から供給。USB MIDI として使う場合は、USB から供給。
USB MIDI が優先されるようで、電源だけを USB から供給し場合も、シリアルMIDI は受け付けない。
○音程はどうやって変える?
発音時のNOTE ON で指定 + ピッチベンド(Pitch Bend) コントロールチェンジで変える。
ピッチンベンドの幅(ベンドレンジ (Bend Range)/ピッチベンドセンシティビティ(Pitch Bend Sensitivity))も指定可能。
(eVocaloid は0ch)
NOTE ON 0x90, note, velocity
NOTE OFF 0x90, note, 0 (velocity = 0 の NOTE ON メッセージ)
または 0x80, note, velocity(本来のNOTE OFF メッセージ)
ピッチベンド 0xE0, LSB, MSB
※データはすべて 7bit なので注意。
8bit のように[ MSB ×256 +LSB] ではなく、[MSB ×128 +LSB] となる。
MSB LSB(HEX) = MSB LSB (DEC) = 符号無し整数 = 符号付き整数 = ベンド効果(%)
(7F 7F) = (127 127) = (16383) = (8191) = +100%
(40 00) = (64 0 ) = (8192) = (0) = 0%
(00 00) = (0 0) = (0) =(-8192) = -100%
ピッチベンドは% で指定するので、実際にどれくらい音程が変わるかは、ピッチベンドセンシティビティに依る。デフォルトは2 (± 2半音 = ± 1全音 )。
ピッチベンドセンシティビティは RPN という方法で指定
(規定のCCメッセージを組み合わせて指定する)
CC#100 0, CC#101 0, CC#6 [ベンド幅], CC#38 0
でOK。
バイト列にすると
CC#100 0xB0, 100, 0
CC#101 0xB0, 101, 0
CC#6 0xB0, 6 , [ベンド幅]
CC#38 0xB0, 8, 0
[ベンド幅] は デフォルト値 2 (±2半音 = ±1全音)。12で1オクターブ。最大 24 (±2オクターブ = 4オクターブ)
MIDI のNote No は 半音刻みになっているので、NOTE ON 60 から中間の音を出しながら、連続的に変化させたい場合
(Note No)
60 (ド) NOTE ON 60 + Pitch Bend 0 (%)
60.25 NOTE ON 60 + Pitch Bend [+0.25 / Pitch Bend Sensitivity *100 (%)]
60.5 NOTE ON 60 + Pitch Bend [+0.5 / Pitch Bend Sensitivity *100 (%)]
60.75 NOTE ON 60 + Pitch Bend [+0.75 / Pitch Bend Sensitivity *100 (%)]
61 (ド#) NOTE ON 60 + Pitch Bend [+1.0 / Pitch Bend Sensitivity *100 (%)]
61.25 NOTE ON 60 + Pitch Bend [+1.25 / Pitch Bend Sensitivity *100 (%)]
...
のように指定することができる。
これらを iPad アプリとして実装した結果
iKeromin ライクな制御(1本のスライダーで連続敵に音程をコントロール)ができました。
(以下のページが大変参考になりました)
http://www1.plala.or.jp/yuuto/midi/p0302.html
http://odasan.s48.xrea.com/dtm/wheel.html
http://www.geocities.co.jp/Hollywood-Miyuki/9008/basic/b_03.html