2013年11月13日水曜日

eVocaloid eVY1 シールド



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