Ce diaporama a bien été signalé.
Nous utilisons votre profil LinkedIn et vos données d’activité pour vous proposer des publicités personnalisées et pertinentes. Vous pouvez changer vos préférences de publicités à tout moment.
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を不揮発性メモリに記憶して再
演奏できる機能
・それを電源入れたときに演...
Prochain SlideShare
Chargement dans…5
×

arduinoでeVY1 Shieldを歌わせてみた

12 604 vues

Publié le

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

Publié dans : Technologie
  • Identifiez-vous pour voir les commentaires

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

×