Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.
ArduinoでeVY1 Shieldを歌わせてみた

2013/11/16 ta9mar
紹介

自己紹介

name: たくまー (@ta9mar)
・2.5次元提督
・横浜のandroid系 チーム横音所属
・コピペ・ソルジャー(クラス1st) 
・ITニンジャ(下忍)
浅く広くをモットーに生きています
2013
11/16
用語
●

今日でてくる用語

Arduino(アルドゥイーノ)
AVRのマイコンボード。
PICの敵と思って距離をおいていたが、
あまりの簡単さに篭絡されたの巻。

●

eVY1 Shield

今日の主役

スイッチサイエンスさんのSHI...
用語
●

今日でてくる用語

MIDI(Musical Instrument Digital Interface)
30年前からある楽器の通信規格。中身は単純なシリアル通信。31250bps(38400bpsではないので注意)
イベント情報を...
用語
●

今日でてこない用語

Android
Google謹製のモバイルOS
最近4.4(kitkat)が出たらしいよ?知らんけど

2013
11/16
初め

eVY1 shieldの遊び方

2通りの遊びかたがあります。
①PCにつなぐ
PCとUSBで繋ぐとMIDI楽器として認識される
WinだとMediaplayerで.midデータ鳴らすと再生される
あとブラウザ上で歌わせたりできるらしい...
資料
●

●

公式資料

公式資料やアプリ(YAMAHA)
http://yamaha-webmusic.github.io/nsx1-apps/man
ual/
サンプルスケッチ/midiデータ(スイッチサイエンス)
http://www...
解析

サンプルスケッチを見る
MMLでかえるのうたを歌うサンプルスケッチ
Serial.begin(31250);

arduinoとeVY1シールドは31250bpsのシリアル通信でやりとりしてい
る。MIDIの速度ですね!
●

●

c...
参考

MIDIの超基本
keyとchannel
1 3

Key 音階(0-0x7f)
一番低いC(ド)が0、+12すると上のC
基準音(440Hz)のA(ラ)は69。
●

channel チャネル(0-15)
1つの楽器に16チャンネル。...
解析

サンプルスケッチを見る
MMLでかえるのうたを歌うサンプルスケッチ

//かえるのうたがきこえてくるよ
int lylics[]={
   5,3,42,24,2,15,50,6,9,3,18,7,42,39};
歌詞部分。
サンプルで...
解析

サンプルスケッチを見る
MMLでかえるのうたを歌うサンプルスケッチ

●

サンプル見て分かったこと
①歌詞をあらかじめ送信しておく
②ch1でNOTE ON(音を鳴らす)するとその音程で歌う
ためしにch2でNOTE ON(0x91)...
実験

実験1
シンセサイザーのMIDI OUTから入力して見る

●

●

そういえばMIDIインターフェースシールド持ってた
arduinoのシリアル送受信を、MIDIの送受信規格に合わせてくれる。
(物理コネクタ形状だけでなく、回路絶縁...
長門

実験1
シンセサイザーのMIDI OUTから入力して見る

このゴテゴテしさ・・・

             戦艦 長門級じゃねーか
2013
11/16

出典:wikipedia
http://ja.wikipedia.org/w...
実験

実験1
シンセサイザーのMIDI OUTから入力して見る

シリアル通信ピンをMIDIシールドが使っちゃうので、eVY1はソフトウェアシリアル
使うように変更。これでシリアル2つ使える。
(eVY1シールド上のジャンパで、ソフトウェアシ...
実験

実験1
シンセサイザーのMIDI OUTから入力して見る

●

結果はこちら
http://init0.net/wp/archives/592
是非皆さんもご家庭の
キーボード・オルガン・電子ピアノなど
MIDI-OUT搭載楽器に繋げ...
実験

実験1
シンセサイザーのMIDI OUTから入力して見る

あんまりご家庭にないです?

端末はそんなにたくさん持ってるのに!?

よろしい、ならばやっぱMMLでしょう

2013
11/16
実験
●

実験2
MMLをシリアル受信して演奏させる

いちいち「かえるのうた」サンプルソースに、歌詞・MMLを直書きして
arduionoに書き込みしてたら手軽に楽しめないよ!
歌詞(発音文字列)と、MML文字列を、シリアルで受信して演奏す...
実験

実験3
MMLを良くしてみる

かえるの歌サンプルのMMLは、CDEFGAB鳴らす
だけ
・1オクターブだけ。変えられない
・半音上げたり下げたりできない
・音の長さ500ms固定(tempo:120)
という残念シンプル仕様
本当はM...
宣伝

そういえばMMLといえば・・・

昔MMLをMIDIファイルに変換して鳴らすアプリ作った気がした

2013
11/16

                 移植・・・しますか
参考
●
●

●
●

MIDIファイル(SMF)の超基本
構造

ヘッダ情報(MThd)とトラック情報(MTrk)がある
ヘッダ情報にでSMF0/1/2フォーマット指定があって、トラック情
報の構成が変わる。
0:トラック1つしかない簡単構...
実験

実験3
MMLを良くしてみる

MML文字列をより高度に逐次解析して鳴らして見る
【コマンド入力機能】
・先頭に#があると歌詞(発声文字列)入力と認識します
・MMLを入力すると音を鳴らします
・ch切り替えたい(実装予定)
[ソース公...
実験

2013
11/16

本実験アプリのMMLの書式
■対応MMLコマンド
MMLにも色々方言があります
 大文字小文字区別しません。どちらでも/混在OK。
・音階 C D E F G A B (ド レ ミ ファ ソ ラ シ ド)
・半音...
実験
●

●
●

2013
11/16

本実験アプリのMMLの書式
やってみよう
ch1:eVocaloid、ch2:普通のMidi音源切り替
えてみる
ch2:楽器を変えてみる
ch10:ドラム鳴らして見る
実験
●

演奏例
どんぐりころころ

歌詞
#d o N,g M,4' i,k o,4 o,k o,4 o,d o N,b M,4' i,k o
,o,i,k e,J i,h a,m a ,t e,s a,t a,i,h e N
,d o,d...
実験
演奏中・・・

2013
11/16

演奏例
どんぐりころころ
実験
●

演奏例
楽曲だけ入れ替えて見る

歌詞(譜面側に合わせて微調整)
#d o N,g M 4' i,k o,4 o,k o,4 o,o,o,d o N,b M,4' i,k o
,o,i,k e,J i,i,h a,m a,a, ,t...
金剛

演奏例
どんぐり砲戦

演奏中・・・
35.6mm甘栗砲
12.7mmどんぐり砲
12.7mmどんぐり砲

2013
11/16
大破

実験4
その他

・Bluetoothでandroidから演奏できるよ
 コンソールはそのままシリアル送受信に繋がってるの
で、BluetoothモジュールつけるだけでSPPで繋がるよ
 
  準備間に合いませんでした(><)
・Blu...
轟沈
●

おしまい

力尽きて実装できなかった機能
・複数ch同時演奏機能。ch:1(eVocaloid)とch:2以降
の伴奏を同時演奏する機能
・演奏した歌詞・MMLを不揮発性メモリに記憶して再
演奏できる機能
・それを電源入れたときに演...
Upcoming SlideShare
Loading in …5
×

arduinoでeVY1 Shieldを歌わせてみた

10,109 views

Published on

Androidの会横浜支部2013/11/16発表資料です

Published in: Technology
  • Be the first to comment

arduinoでeVY1 Shieldを歌わせてみた

  1. 1. ArduinoでeVY1 Shieldを歌わせてみた 2013/11/16 ta9mar
  2. 2. 紹介 自己紹介 name: たくまー (@ta9mar) ・2.5次元提督 ・横浜のandroid系 チーム横音所属 ・コピペ・ソルジャー(クラス1st)  ・ITニンジャ(下忍) 浅く広くをモットーに生きています 2013 11/16
  3. 3. 用語 ● 今日でてくる用語 Arduino(アルドゥイーノ) AVRのマイコンボード。 PICの敵と思って距離をおいていたが、 あまりの簡単さに篭絡されたの巻。 ● eVY1 Shield 今日の主役 スイッチサイエンスさんのSHIELD(arduinoの拡張ボード)。 ヤマハ謹製「NSX-1(YMW820)」音源LSI搭載。 「eVocaloid」音源ボード。「General MIDI」音源も 同時に使用する事ができるため、これ1枚で楽器の演奏にあわせて同時に「歌 う」事も可能。 2013 11/16 画像引用 http://www.switch-science.com/
  4. 4. 用語 ● 今日でてくる用語 MIDI(Musical Instrument Digital Interface) 30年前からある楽器の通信規格。中身は単純なシリアル通信。31250bps(38400bpsではないので注意) イベント情報を送って音鳴らしたりする ● (標準)MIDIファイル(.mid) SMF(Standard MIDI file) バイナリの楽譜データ。wavのような「音(波形)データ」は入ってない。あくまで音符等の情報。 音源側で音データ持ってて、鳴らしてくれる(音の良さは再生環境依存) ● MML(Music Macro Language) テキストで表現した簡易的な楽譜データ。 ”ドレミファソラシド”⇒”CDEFGABC”みたいな。 2013 11/16 詳細は後ほど
  5. 5. 用語 ● 今日でてこない用語 Android Google謹製のモバイルOS 最近4.4(kitkat)が出たらしいよ?知らんけど 2013 11/16
  6. 6. 初め eVY1 shieldの遊び方 2通りの遊びかたがあります。 ①PCにつなぐ PCとUSBで繋ぐとMIDI楽器として認識される WinだとMediaplayerで.midデータ鳴らすと再生される あとブラウザ上で歌わせたりできるらしいよ 今回これやります ②Arduinoに載せる シリアル通信でデータ送り込んで演奏する 今回はこっち。 2013 11/16
  7. 7. 資料 ● ● 公式資料 公式資料やアプリ(YAMAHA) http://yamaha-webmusic.github.io/nsx1-apps/man ual/ サンプルスケッチ/midiデータ(スイッチサイエンス) http://www.switch-science.com/catalog/1490/ 2013 11/16
  8. 8. 解析 サンプルスケッチを見る MMLでかえるのうたを歌うサンプルスケッチ Serial.begin(31250); arduinoとeVY1シールドは31250bpsのシリアル通信でやりとりしてい る。MIDIの速度ですね! ● ● char mml[] ="CDEFEDC EFGAGFE"; MML部分。文字から音程を確定してバイナリで3バイト 0x90,key,0x7f(keyが音程Cの時0x3c)送ってる。 このバイナリデータは・・・MIDIメッセージですね! つまりシリアルでMIDIメッセージそのものを送ってやれば音がなる 2013 11/16
  9. 9. 参考 MIDIの超基本 keyとchannel 1 3 Key 音階(0-0x7f) 一番低いC(ド)が0、+12すると上のC 基準音(440Hz)のA(ラ)は69。 ● channel チャネル(0-15) 1つの楽器に16チャンネル。 ひとつのチャンネルにひとつの楽器を 割り当てられる。途中で楽器変更も可能。 演奏者が16人居ると思えばOK。 ch10(信号上だと9)だけは特別にドラム用。 2013 11/16 0 前頁の「0x90,0x3c,0x7f」を送信の例       ↑   ↑   ↑強さ127(最強)で       |    60のC(ド)       ch:1にNOTE ON 鳴らす指示 2 4 6 5 Ch1 ピアノ ・・・ 8 10 7 9 11 12・・・127 Ch2 ギター Ch10 ドラム Ch3 弦 ・・・ Ch15 エレピ
  10. 10. 解析 サンプルスケッチを見る MMLでかえるのうたを歌うサンプルスケッチ //かえるのうたがきこえてくるよ int lylics[]={    5,3,42,24,2,15,50,6,9,3,18,7,42,39}; 歌詞部分。 サンプルでは歌詞はint配列(↑)で 「あ」が1、「い」が2・・・という風に指定 これを「発声文字列」にテーブル(→)で 変換してeVY1に送信! 右が変換テーブル。 MIDI的にはSystemExclusiveで楽器固有メッセージとして送信しているよ。 発音文字列書き方はYAMAHAさんの仕様書内「日本語eVocaloid™Phonetic Alphabet(PA)」 を参照。(この変換テーブル少し仕様書より少ないぞ・・・) 2013 11/16
  11. 11. 解析 サンプルスケッチを見る MMLでかえるのうたを歌うサンプルスケッチ ● サンプル見て分かったこと ①歌詞をあらかじめ送信しておく ②ch1でNOTE ON(音を鳴らす)するとその音程で歌う ためしにch2でNOTE ON(0x91)するとピアノの楽器音がなる(歌わない) ● まとめ ①完全にMIDI。MIDIメッセージをシリアルで送ればOK ②歌わせるには事前にSysExで歌詞(発音文字列)を送っておく ③ch1がeVocaloidに割り当てられてる(普通の楽器には使えない) ④ch2以降は普通のMIDI楽器(eVocaloidには使えない) 2013 11/16
  12. 12. 実験 実験1 シンセサイザーのMIDI OUTから入力して見る ● ● そういえばMIDIインターフェースシールド持ってた arduinoのシリアル送受信を、MIDIの送受信規格に合わせてくれる。 (物理コネクタ形状だけでなく、回路絶縁・電気的に分離して通信する) arduinoにeVY1シールド載せて、さらにMIDI-IFシールド載せる3段構成 ゴテゴテ! MIDI-IF eVY1 arduino 2013 11/16
  13. 13. 長門 実験1 シンセサイザーのMIDI OUTから入力して見る このゴテゴテしさ・・・              戦艦 長門級じゃねーか 2013 11/16 出典:wikipedia http://ja.wikipedia.org/wiki/%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB:Japanese_Battleship_Nagato_1944.jpg
  14. 14. 実験 実験1 シンセサイザーのMIDI OUTから入力して見る シリアル通信ピンをMIDIシールドが使っちゃうので、eVY1はソフトウェアシリアル 使うように変更。これでシリアル2つ使える。 (eVY1シールド上のジャンパで、ソフトウェアシリアルにピン変更できるようになっ てます) ● ● arduinoから歌詞だけ送って シンセから出るMIDIメッセージを転送してみる ハードシリアルから入った31250bpsデータをそのままソフトウェアシリアルに1バイ トずつ流しだすだけで完成 2013 11/16 ● void loop(){ //シリアル受信処理 while(Serial.available()>0){ swSerial.write((byte)Serial.read());//そのまま転送出力 } } メイン部分 これだけ!?
  15. 15. 実験 実験1 シンセサイザーのMIDI OUTから入力して見る ● 結果はこちら http://init0.net/wp/archives/592 是非皆さんもご家庭の キーボード・オルガン・電子ピアノなど MIDI-OUT搭載楽器に繋げてお楽しみください!                 - 第1部艦 - 2013 11/16
  16. 16. 実験 実験1 シンセサイザーのMIDI OUTから入力して見る あんまりご家庭にないです? 端末はそんなにたくさん持ってるのに!? よろしい、ならばやっぱMMLでしょう 2013 11/16
  17. 17. 実験 ● 実験2 MMLをシリアル受信して演奏させる いちいち「かえるのうた」サンプルソースに、歌詞・MMLを直書きして arduionoに書き込みしてたら手軽に楽しめないよ! 歌詞(発音文字列)と、MML文字列を、シリアルで受信して演奏するよ うにしてみた ⇒arduinoIDEのシリアルコンソールからキーボード入力できるよ 歌詞: MML: #k a,e,4 M,n o,M,t a,g a,k' i,k o,e,t e,k M,4 M,j o 先頭#で歌詞指定 にしてみた CDEFEDC EFGAGFE 詳細はこちらに記録済み http://init0.net/wp/archives/596 2013 11/16
  18. 18. 実験 実験3 MMLを良くしてみる かえるの歌サンプルのMMLは、CDEFGAB鳴らす だけ ・1オクターブだけ。変えられない ・半音上げたり下げたりできない ・音の長さ500ms固定(tempo:120) という残念シンプル仕様 本当はMMLもっと色々できるし、結構遊べるよ? 2013 11/16
  19. 19. 宣伝 そういえばMMLといえば・・・ 昔MMLをMIDIファイルに変換して鳴らすアプリ作った気がした 2013 11/16                  移植・・・しますか
  20. 20. 参考 ● ● ● ● MIDIファイル(SMF)の超基本 構造 ヘッダ情報(MThd)とトラック情報(MTrk)がある ヘッダ情報にでSMF0/1/2フォーマット指定があって、トラック情 報の構成が変わる。 0:トラック1つしかない簡単構造。おすすめ 1:複数トラック構造。よく使われる。自前で処理するには複雑。 2:見たことない 演奏に必要ない情報も入ってる(タイトル名) トラック情報は基本的にはMIDIメッセージを並べて格納してる 一番の違いは時間の概念がある(デルタタイムという可変長の残 念フォーマット) 音譜の時間(差分)情報 2013 11/16
  21. 21. 実験 実験3 MMLを良くしてみる MML文字列をより高度に逐次解析して鳴らして見る 【コマンド入力機能】 ・先頭に#があると歌詞(発声文字列)入力と認識します ・MMLを入力すると音を鳴らします ・ch切り替えたい(実装予定) [ソース公開!予定] eVY1とMMLであそんでみよう! 2013 11/16
  22. 22. 実験 2013 11/16 本実験アプリのMMLの書式 ■対応MMLコマンド MMLにも色々方言があります  大文字小文字区別しません。どちらでも/混在OK。 ・音階 C D E F G A B (ド レ ミ ファ ソ ラ シ ド) ・半音 + # - (音階の後につける) ・休符 R ・明示的音長指定 0-128 (音階(半音)、休符の後につける) なければLコマンドの音長を使用する  0を指定した場合、和音指定(次の音が重なる) ・付点 . (音階(半音)、休符の後につける) ・デフォルト音長指定 Ln (n=1-128) default:4(4分音符) ・音量 Vn (n=0-15) default:15(最大) ・オクターブ[絶対指定] On (n=0-9) default:4 ・オクターブ[相対指定] > (上げ) ・オクターブ[相対指定] < 下げ) ・テンポ Tn (n=1-255) default:100(100bpm) ・楽器変更 @n (n=0-127) MIDI規定の楽器番号-1を指定(default:0 piano) ※eVocaloidで は無視されるような
  23. 23. 実験 ● ● ● 2013 11/16 本実験アプリのMMLの書式 やってみよう ch1:eVocaloid、ch2:普通のMidi音源切り替 えてみる ch2:楽器を変えてみる ch10:ドラム鳴らして見る
  24. 24. 実験 ● 演奏例 どんぐりころころ 歌詞 #d o N,g M,4' i,k o,4 o,k o,4 o,d o N,b M,4' i,k o ,o,i,k e,J i,h a,m a ,t e,s a,t a,i,h e N ,d o,dZ o,o,g a,d e,t e,k' i,t e,k o J,J i,tS i,w a ,b o ,tS a N,i ,S o,J i,a,s o,b' i,m a,S o ● どんぶりこ・・・? どんぐりころころどんぶりこ おいけにはまってさあたいへん どじょうがでてきてこんにちわ ぼっちゃんいっしょにあそびましょ MML T60L16 G8EEFEDC G8EED8R8 EEGGAA8A >C8<EEG8R8 GGEEFEDC G8EED8R8 G8E8A8GG AABB>C4 ・楽譜を見ながらMMLを書くよ 2013 11/16 ・歌詞を見ながらPA(発声文字列)を書くよ  音符1音に複数発声が当てられてる時はカンマ無しでつなげるよ  (さいしょの「ド(d o)ン(N)」の間にカンマないよ)  発音上書き直した方がいいところもあるよ
  25. 25. 実験 演奏中・・・ 2013 11/16 演奏例 どんぐりころころ
  26. 26. 実験 ● 演奏例 楽曲だけ入れ替えて見る 歌詞(譜面側に合わせて微調整) #d o N,g M 4' i,k o,4 o,k o,4 o,o,o,d o N,b M,4' i,k o ,o,i,k e,J i,i,h a,m a,a, ,t e,s a,t a,i,h e N ,M,M,M,d o,dZ o,o,g a,d e,t e,k' i,t e,k o,J,J i,tS i,w a ,b o,tS a,N,i,i,S o,J i,a,s o,b' i,m a,S o, d o N,g M 4' i,k o,4 o,k o,4 o,o,o,d o N,b M,4' i,k o ,o,i,k e,J i,i,h a,m a,a, ,t e,s a,a,a,t a,i,h e N ● MML(完全入れ替え) T130L12O4 E2B2A4BRAG4ARB>C2D4<A4B2.ARB>C2D4C4<B4>CR<BA4G4A2E4A4B2. GAB>C2R6<ba6g F+4G4A4>C4 <B2R6A12G6F+ E2R4EF+G A2R6GF+6E D+4E4F+4A4 B2.R4 E2B2A4BRAG4ARB>C2D4<A4B2.ARB>C2D4C4<B4>CR<BA4G4 A4B6AG4F+4 E1 2013 11/16
  27. 27. 金剛 演奏例 どんぐり砲戦 演奏中・・・ 35.6mm甘栗砲 12.7mmどんぐり砲 12.7mmどんぐり砲 2013 11/16
  28. 28. 大破 実験4 その他 ・Bluetoothでandroidから演奏できるよ  コンソールはそのままシリアル送受信に繋がってるの で、BluetoothモジュールつけるだけでSPPで繋がるよ     準備間に合いませんでした(><) ・Bluetooth(SPP)なら、iOSからでも簡単に演奏できるか も?しらんけど 2013 11/16
  29. 29. 轟沈 ● おしまい 力尽きて実装できなかった機能 ・複数ch同時演奏機能。ch:1(eVocaloid)とch:2以降 の伴奏を同時演奏する機能 ・演奏した歌詞・MMLを不揮発性メモリに記憶して再 演奏できる機能 ・それを電源入れたときに演奏、ループ再生する機能 (PCなくても演奏デモできる)                いつかがんばるかも? 2013 11/16

×