hackist_purple

eVY1をさわってみた(C++編)

みなさん、こんにちは。
新しい物好き一階です。
 
ざっと調べた限りArudinoとWebAudioApiのサンプルはあれどWindowsC++ or C#のサンプルがありませんでした。これも時代の流れかなぁと寂しく思いつつ、WindowsのC++でプログラミング開始。

1.まずはお勉強
実はMIDIデータは作ったり再生した事はあるものの、プログラム上から命令を出したことがないので、まずはMIDIのフォーマットやWin32APIの使い方を勉強。
※.net FrameworkにはMIDI制御用の機能がないのでWin32APIを利用しています。
このサイトこのサイトを参考にしました。
 
2.eVY1の使い方
eVY1では事前に歌詞をエクスクルーシブメッセージでデバイスに送信しておくと、音をならす度に歌詞を1文字ずつ音に合わせて発生してくれる。
なのでプログラム的には以下のような流れになる。
MIDIデバイスOpen⇒エクスクルーシブメッセージ送信⇒音を鳴らす⇒MIDIデバイスクローズ
 
3.まずは音を鳴らす

※midiOutOpenの第2引数は自分の環境に合わせて変えてください。

デフォルトで”あ”が設定されているみたいなので、このプログラムを実行すると”ド”と”レ”を、あ↑あ↑と歌ってくれます。

無事音が出たので次は「さくらさくら」を歌わせてみます。
 
[歌っている動画]

 

4.歌詞の送信データの中身
歌詞はASCIIコードで送信するので、どの文字がどういうコードで構成されているかをYAMAHAのマニュアルページの一番下からMIDI仕様書をダウンロードして確認する。(今日現在だと34ページに該当情報が記載されている)
 
5.エクスクルーシブメッセージの送信
下記ロジックをその1の送信準備の直前に入れると、歌詞が”あ”から”き”に変更されることが確認できる。

 
6.歌詞データの作成
特にプログラム上で動的に変更しないのならばここの歌唱データ変換ツールを使うと便利。
0x付加&SysExで作成した文字をカンマ区切りで上記ロジックの”BYTE vocalData[]”に入れれば歌詞が入れ替わる。
 
プログラムで生成する場合は以下(大分手抜きですが)。
[変換部分]

[呼び出し元]

[エクスクルーシブメッセージ設定部分]

次はこれをKinectかPerCあたりと組み合わせてみます。