2014年1月 日本Androidの会 定例会


2014年1月15日に日本マイクロソフトで開催された日本Androidの会の定例会にて参加しました。
今回のテーマは Android組み込みからMIDI/ボカロへ です。

私も Android でボカロしてみよう というタイトルで講演しました。
講演内容は、APPREVIEWさんで記事にして頂きました。
eVocaloidをArduinoから利用できるeVY1シールドを使って「Androidでボカロしてみよう」

20140115 android controll evy1


Android から eVY1 シールドを制御する (10インチタブレット)


20140115evy1_sample7

Android 端末から eVY1 シールドを制御します。
歌詞入力 を10インチタブレット向けにカスタマイズしたものです

ソースコードは Google Code に置いています。

主な機能
(1) ピアノの鍵盤を模したものを2つ用意しました。
それぞれ楽器とオクターブが選択できます。
異なる楽器を演奏することも、
2オクターブの同じ楽器にすることができます。
(2) 下段にパーカッションのボタンを8個用意しました。
パーカッションの種類を変更することができます。
(3) 上段に歌詞の入力欄に用意しました。
Set ボタンを押すと、入力された歌詞が設定されます。
上側の鍵盤にタッチすると、順番に歌詞を発声します


Android から eVY1 シールドを制御する (SDカード編)


20140115evy1_sample6

SDカード上にある SMF ( Standard MIDI File ) 形式のファイルを解析して、演奏します。
Android 端末の USB-HOST 機能を使っています。

ソースコードは Google Code に置いています。

主な機能
SMFマルチトラック編 とほぼ同じものです。
主な違いは下記の項目です。
(1) MIDIファイルの置き場所を assets から SD カードに変更しました。
(2) SD カードにある任意の MIDI ファイルを演奏できるようにしました。
ディレクトリは /evy1/ です。
(3) Stop のときに、全てのチャネルに Sound Off を送信するようにしました。
(3) USBドライバを USB-MIDI-Driver から 自作のものに変更しました。
参照:Android から USB MIDI 機器を制御する
(4) 非同期タスクを AsyncTask から Loader に変更しました。

参考
SMF ( Standard MIDI File ) – wikipedia
USB-MIDI-Driver


Android から eVY1 シールドを制御する (歌詞入力)


20140114evy1_sampale5

Android 端末から eVY1 シールドを制御します。
歌詞を入力して、ボカロに歌わせます。

ソースコードは Google Code に置いています。

ソースコードの簡単な説明
(1) UI として、ピアノの鍵盤を模したボタンを用意しました。

(2) 歌詞入力の EditView 欄を用意しました。
Set ボタンを押すと、入力された歌詞が設定されます。
鍵盤にタッチすると、順番に歌詞を発声します

(3) 「Vocal ON」と「Piano ON」にチェックすると、Vocaloid と Piano を同時に演奏することができます。


eVY1 のインターフェイスとエンドポイント


20140105usb_sample1_evy1

eVY1 シールドのインターフェイスとエンドポイントを取得します。
ソースコードは 前回のUSB機器 と同じものです。

eVY1の結果
Direction IN が用意されているが、どういう風に使うのかな。

Vendor ID : 10552
Product ID : 258
Interface 0
  Class : Audio Devices
  Subclass : Audio Control
  Protocol : None protocol (0)
Interface 1
  Class : Audio Devices
  Subclass : MIDI Streaming
  Protocol : None protocol (0)
Endpoint 0
  Direction : OUT host to device
  Transfer Type : Bulk
Endpoint 1
  Direction : IN device to host
  Transfer Type : Bulk

参考
Universal Serial Bus Device Class Definition for Audio Devices – usb.org


Android から eVY1 シールドを制御する (キーボード)


20140106evy1_sample4

Android 端末から eVY1 シールドを制御します。
Note On を使ってボカロを鳴らします。
USB MIDI 機器を制御する を eVY1 向けにカスタマイズしたものです。

ソースコードは Google Code に置いています。

eVY1 の簡単な説明
eVY1 は USB MIDI 機器です。
チャネル 0 は、特別で Vocaloid が割り当てられています。
歌詞は、System Exclusive メッセージの Phonetic symbols で設定します。
発音とコードとの関係は、日本語 eVocaloid Phonetic Alphabet に例示があります。
例えば、「あ」は「a」、「く」は「k M」と記述します。
ローマ字に似ていますが、少し違いがあります。
チャネル 0 の Note On メッセージにより一音づつ発声するようです。

ソースコードの簡単な説明
(1) UI として、ピアノの鍵盤を模したボタンを用意しました。
鍵盤の 「C」「D」「E」 にタッチすると、それぞれの音階で「ど」「れ」「み」と発声します。
このサンプルでは、Note On の前に、Phonetic symbols を1音だけ設定しています。

(2) 下段にパーカッションのボタンを用意しました。
例えば、60 にタッチすると、Hi Bongo の音が出ます。

(3) 上段のチャネル選択により、鍵盤の楽器を変更できます。
ch 0 は Vocaloid です。
ch 1 は Piano です。
それ以外のチャネルは、USB MIDI 機器を制御する を参照ください。

(4) 「With Vocal」にチェックすると、Vocaloid と Piano (あるいはチャネル毎の楽器) を同時に演奏することができます。

参考
YMW820 アプリケーションノート – ヤマハ
Android から USB MIDI 機器を制御する ( Program Change )


Android から eVY1 シールドを制御する (SMFマルチトラック編)


20131220android_evy1

SMF ( Standard MIDI File ) マルチトラック形式のファイルを解析して、演奏します。
Android 端末の USB-HOST 機能を使っています。

ソースコードは Google Code に置いています。

ソースコードの簡単な解説
(1) FileBinary.java
assets にあるMIDIファイルを読み込みます。

(2) MidiParser.java
MIDIファイルを解析して、トラック毎のMIDIメッセージに分割します。

(3) MultiToSingle.java
マルチトラックをシングルトラックに変換します。

(4) ParseMessage.java
(5) ParseList.java
(6) MidiMessage.java
(7) MidiList
MIDIメッセージを格納するコンテナです。

(8) ParserAsyncTask.java
MIDIファイルの解析に時間がかかるので、非同期タスクで実行します。

(9) MidiPlayer.java
MIDIメッセージを順番に実行します。

(10) MainActivity.java
メインのクラスです。

ビルドするには USB-MIDI-Driver が必要です。

実行する
MIDIメッセージを表示します。

20131220evy1sample3

参考
eVY1シールド – スイッチサイエンス
USB-MIDI-Driver
故郷(ふるさと)(スタンダードMIDIファイル)
We wish you a Merry Christmas (スタンダードMIDIファイル)
SMF ( Standard MIDI File ) – wikipedia


Android から eVY1 シールドを制御する (SMFシングルトラック編)


20131220evy1

evocaloid_smf.ino を Android に移植したものです。
SMF ( Standard MIDI File ) シングルトラックを演奏します。
Android 端末の USB-HOST 機能を使っています。

ソースコードは Google Code に置いています。

ソースコードの簡単な解説
(1) MidiFile.java
assets にある MIDI ファイルを読み込みます。
evocaloid_smf.ino ではハードコーデングされています。
JAVA で記述したら、64KBの壁でぶつかりました。
テキストファイルにして、外出ししました。

(2) MidiParser.java
MIDIファイルを解析して、MIDIメッセージに分割します。

(3) MidiMessage.java
1つのMIDIメッセージを格納するコンテナです。

(4) ParserAsyncTask.java
MIDIファイルの解析に時間がかかるので、非同期タスクで実行します。

(5) MainActivity.java
MIDIメッセージを順番に実行します。

ビルドするには USB-MIDI-Driver が必要です。

実行する
MIDIメッセージを表示します。

20131220evy1sample2

参考
eVY1シールド – スイッチサイエンス
スタンダードMIDIファイルで歌うサンプルスケッチ evocaloid_smf.ino
USB-MIDI-Driver
SMF ( Standard MIDI File ) – wikipedia


Android から eVY1 シールドを制御する (MML編)


20131208evy1

eVY1_MML_sample.ino を Android に移植したものです。
Android 端末の USB-HOST 機能を使っています。

ソースコードは Google Code に置いています。

ソースコードの使い方
音符をMML記法で記述します。
MML = “CDEFEDC EFGAGFE”;

歌詞をカンマ区切りで記述します。
カンマで区切れた歌詞が、MMLの1つの音に対応しています。
LYLIC = “か,え,る,の,う,た,が,き,こ,え,て,く,る,よ”;

ビルドするには USB-MIDI-Driver が必要です。

実行する
歌詞と音とMIDIコマンドを表示します。

20131208evy1sample1

参考
eVY1シールド – スイッチサイエンス
MMLで歌うサンプルスケッチ eVY1_MML_sample.ino
USB-MIDI-Driver