evy1shield-with-pin

eVocaloidをArduinoから利用できるeVY1シールドを使って「Androidでボカロしてみよう」

  • このエントリーをはてなブックマークに追加

by [2014年1月21日]

 去る1月15日に行なわれた日本Androidの会2014年1月の定例会におじゃましてきました。今回のテーマは「Android組み込みからMIDI/ボカロへ」とのことで、その中から「Androidでボカロしてみよう」の講演をお届けします。
 AndroidのUSB HOST機能を使って、ヤマハのVOCALOIDチップ『NSX-1』が搭載された『eVY1シールド』を演奏するという内容です。

講演者:日本Androidの会 大和田健一氏
 アズテック代表。 日本Androidの会横浜支部長、ファブラボ関内ファブマスター。横浜でものつくりの活動を支援しています。

eVY1シールド(ピンヘッダ有り)

 スイッチサイエンスのeVY1シールドは、ヤマハの歌声合成技術『VOCALOID』をArduino※で使用できるよう拡張ボードにしたもので、Arduinoマイコンボードに接続するためのピンヘッダ(コネクタ部分)の有無により2種類がラインナップされています。価格→ピンヘッダ有り:9,870円、ピンヘッダ無し:9,450円。

Arduino(アルドゥイーノ)とは?
 AVRマイコン、入出力ポートを備えた基板、C言語風のArduino言語と、その統合開発環境から構成されるオープンソース・ハードウェア形式のシステム。安価で簡単ということで電子工作の入門にも最適。

AndroidからeVY1シールドを制御する

 eVY1シールドを買うことができました。eVY1シールドは、昨年11月に開催されたDIY系工作の展示発表会「Maker Faire」で売り出されたのですが、あっという間に売り切れてしまいました。

 現在も、販売元のスイッチサイエンスでは在庫切れになっていますが、持っている人はどのくらいいるのかな?

ヤマハの音源LSI『NSX-1』。日本語女性ボーカルライブラリ『VY1』を元に開発した専用ライブラリ『eVY1』を搭載

 eVY1シールドは、USBのMIDIデバイスです。ヤマハのVOCALOIDチップ『NSX-1』が載っています。
 NSX-1は、General MIDIに対応していて、歌うモードと奏でるモードがありますが、これらは両立しないみたいです。Real Acoustic Soundというのも、ヤマハがデモを出したりしていますが、結構良い音を出しています。

 鳴らし方は、パソコンからブラウザ経由で鳴らすことができます。アプリもヤマハから出ています。
 電子工作といえばArduinoです。eVY1シールドはArduino用ということなので、そこから歌わせることができます。
 サンプルとしてかえるのうたとふるさとの2曲が用意されています。

 今日の本題は、Androidからこれを制御してみようということです。どうやって制御するかというと、パソコンからはUSB経由で鳴るのだから、AndroidからもUSB経由で鳴るでしょという、安易な気持ちで始めたのです。

 まずはサンプルアプリを作ることにしたのですが、やはり鍵盤楽器がまず最初に思いつきますよね。一番上に歌詞を入れて、そのあと鍵盤を弾くとその通り鳴るというアプリは、WebAPIでできるので、それをマネしてAndroidのアプリを作ってみるということです。

 このデモを作るのに必要な知識をあげてみたのですが、結構大変でした。知らないといけないことがいっぱいあって、まずMIDIとUSB MIDI。私はこのボードを買って初めてMIDIの規格を読み始めたのです。Android USB HOSTもそれほど使っている人がいなくて、eVY1シールド特有のところも若干知識が必要であると。

 MIDIというのは、メッセージが8種類決められています。上の7つがチャネルに対応していて、下の1つがシステムメッセージ(可変長)になっていて、ベンダー固有の拡張などはここに入ります。歌わせるにあたって、歌詞を入力するのはこのシステムメッセージになります。
 基本になるのは、音を止めるノートオフと音を出すノートオンです。

 これは3バイト構成になっていて、信号としては4通りあり、statusが8種類に対応しています。それからチャネルが16通りあってそれぞれ別の楽器を鳴らすことができます。ノートが音階で、ドだったら60と入れる。ベロシティは音の大きさです。タブレットではベロシティの制御が難しいので、ほとんど音量は一定にしています。

 これをUSBで送るには、頭に1バイトつけてpayloadにします。長いものは4バイト単位に区切っていくという特殊な制御をしています。

 Androidからは、AndroidのUSBを知らないといけないわけですが、Androidは3.1以降USBホストを標準でサポートしています。現在市販されている機種はほとんどOKだと思います。HIDはいわゆるキーボードやマウスですね。ヒューマンインターフェースデバイスは、何もしなくてもそのまま繋がります。なので、仮に文字を入力するのが面倒くさいときはキーボードを利用することもできます。
 あとマスストレージとしてSDカードなどをつけることもできるのですが、最近、セキュリティのガードがかかるのではないかという話が出ています。カメラ等もつけることもできますが、残念ながらアイソクロナス転送※を直接的にはサポートしていません。※一定時間あたりの最低量が保証されているデータ転送方式。

 上記はフレームワークでサポートしていますが、低レベルというものがあります。これは基本的に全部OKという話ですが、それに対応するドライバが無いので、誰かがんばって作ってねっということです(笑)。
 USBの低レベルのAPIというのはこんな風になっていますが、ここでは「こんなものがある」という程度にとどめておきましょう。

 そして、実はがんばって作ってくれている人がいらっしゃいます。USB MIDIのドライバなのですが、結構ソースとしてはしっかり書かれていて、私も今回だいぶ参考にさせて頂きました。

 最後に、鳴らす対象のeVY1ですが、インターフェースは2種類規定されていて、通信するには通信の相手を知る必要があることと、もう1つはMIDI Streamingという方法を選択します。
 入力と出力両方設定されているんですが、入力ってどう使うんですかね?(笑) 
 これらは、ホストからのデバイスがあって音を鳴らすというのが一般的です。

 チャネルの割付も若干癖があって、チャネル0はいわゆるVocaloid専用になってます。それ以外はGeneral MIDIの規格に従っていて、チャネル9がパーカッション、それ以外はデフォルトでピアノに設定されています。

 歌詞の設定は、結構やっかいですけども、先ほどあがったシステムエクスクルーシブを使って、基本的にこの通りにバイナリで打ち込めばOKです。あと発音するのに平仮名との対応表があります。

 せっかくなので、もう少しきちんとしたものを作ろうというのがこちらです。
 鍵盤楽器の大きさは横幅が約22cmなのですが、それを上下2段で再現して、下にパーカッションを並べてみました。これは単純に音を鳴らすという話ですが、私は楽器が弾けないんです。世の中には楽器を弾けない人も多いと思うので、次はある程度打ち込んだものを自動演奏するという仕組みがあります。

 これもArduinoの中にサンプルが2つ入っています。1つはMMLを使ってかえるのうたを鳴らしています。
 MMLの説明は長くなるので簡潔にいうと、Cがドの音ですが、ドレミファソラシドと入れて、それに対応する歌詞を入れて、順番に鳴らしていくという感じです。これに関してはサンプルも長くなかったので、移植そのものはそれほど難しくなかったです。

 次がさらにきちんとした規格で、SMF(Standard MIDI File)というものがあります。ふるさとはこれで書かれています。これはくじけそうになるほど難解でした。
 プログラムの作りとして、歌詞がバイナリコードで書かれていて、JAVAにしようとしたのですが、“64kの壁”があって歌詞が入らなかったり、これはファイルにして外出しすれば何とかなるのですが…。
 プログラムそのもののは難しくないのですが、どういう仕組みで動いているのかというあたりは、SMFの規格を知らないといけなくて、この部分がかなり難解でしたね。

 どのくらい難解かというのがこの表で、全体が、Head Chunkの下にTrack Chunkがいくつかあって、Track Chunkの中がHeaderとEndで囲まれて、その中にMIDI Messageと、MIDI Messageを流したあとにどれくらい遅れて次のメッセージを流すかというDelta Timeというのが入っています。これが両方とも可変長で、これがずらずらと並んでいます。それでできたものがこちらです。

♪ (ところどころおかしな雰囲気の)ふるさとが流れる ♪

 ちなみに途中で音が鳴らなくなんですが、先ほどのWebAPIのデモソフトにはパニックというボタンがついているんですが(笑)、これにはついていないので、ケーブルを抜くという原始的な方法で止めます。

 ボカロの曲も2つ提供されています。これまでのアプリとの違いは、これを鳴らすためのサンプルコードは無かったということで、ここは未知の領域でがんばってみました!
 これは、マルチトラックという方式になっていて、シングルの場合は基本的に上から順番に命令を送っていけば、多少リズムは狂うかもしれないけど、うまくいきます。
 ところが、マルチトラックの場合は、複数のタイミングを合わせて同時に演奏するという方法になります。最初は全然音と曲が合いませんでしたが、やっと最近鳴るようになったので、それをやってみます。

♪ (破綻しそうで破綻しない)We wish you a Merry Christmasが流れる ♪

 という感じで、元々入っているのは日本人が発声する言葉=ジャパニーズイングリッシュで発音してくれるので、非常に馴染みやすくなっています。


 こちらが実際にAndroid端末(中央)と繋がっているところです。ちょっと小さいですが鍵盤が入っていて、これがeVY1シールド(右)で、上にある青いのがスピーカー(左)です。

 今日紹介したアプリはすべてソースコードを公開しています。
アンドロイドな日々(大和田氏のサイト)

 いかがでしたでしょうか? 発売直後から現在まで売り切れが続く『eVY1シールド』。この人気ぶりから、Vocaloidの注目度は、すでに楽曲制作だけにとどまらないことがよくわかります。Arduinoを使った組み込み用途から電子工作まで、Vocaloidの歌声を聴く機会がますます増えていきそうですね。VY1以外のライブラリをどのように展開していくのかにも注目です。

横浜支部ってどんなところ?

 最後に日本Androidの会横浜支部の活動を紹介します。

Fablab (ファブラボ)
 最近は、昨年はじめて参加したFablabに時間を割いています。横浜支部にロボット部がありまして、電子工作をしたり、ロボットカーを作ったりして、これをAndroidで制御しています。

 Fablabは、アメリカのMIT(マサチューセッツ工科大学)で始まった活動で、ほぼ何でも作れるというのを目標にしている市民工房の世界的ネットワークです。小さいものは手のひらサイズのマイコンボードから、大きいものは家まで作ってしまいます。

 Fablabは昨年、横浜で第9回の世界会議があったのですが、すでに9年以上の歴史があるということです。40ヶ国から200名が集まりました。
 それぞれの会議ごとにテーマが決まっていて、写真の右側にあるのは、今年のテーマである廃材を使った手作り楽器です。信号機を光らせるだけなのかと思ったのですが、実際にはフタを開け閉めする打楽器になっています。これが密閉されているので結構良い音が鳴るんです。ちなみにこれを作ったのはロシアから来た20代くらいの若者です。

 Fablabへ正式に加盟しているのは日本ですと6ヶ所あります(鎌倉、つくば、渋谷、大阪の北加賀屋、仙台、横浜の関内)。
 Fablabといえば3Dプリンタですが、最近はネットに素材がいろいろありまして、例えばPerfumeが自分たちの3Dデータを公開していますが、それを3Dプリンタで出力したりしています。

音部
 音系のアプリをいろいろ作っている音部というのもあります。
 こちらは、Google Playで配信しているハンドベルのアプリです。ハンドベルの良いフリー音源が無かったので、ハンドベルを買ってきて、自分たちで録音して音源を作りました。

2014年1月定例会(日本Androidの会)
Fablab Japan
横音-yokooto-(Google play)

コメントは受け付けていません。

PageTopへ