Web MIDI APIGoogle Developers Live Japan #8
http://goo.gl/89Lbdd
Yamaha CorporationAMEI Web MIDI WG
Ryoya Kawaihttp://goo.gl/hxWCA7
おしながき
● MIDI○ 概要○ メッセージの基礎 (1), (2), (3)○ メリット・デメリット○ ユースケース
● Web MIDI API○ 概要○ Spec、Source○ Live Coding
● まとめ
MIDI
本題の前に
● 2013年でMIDIは30周年○ 発表:1983年
● テクニカルグラミー受賞○ 梯 郁太郎氏、Dave Smith氏○ メーカーを問わない電子楽器の世界共通規格の制定に
尽力し、音楽産業の発展に貢献したことが評価
▶ Technical Grammy Award 2013
概要
● Musical Instrument Digital Interface○ 電子楽器同士を接続する為のインターフェイス
■ 非同期シリアル通信● 速度:31.25kbps● データ単位:8bits (1byte)
■ 端子:IN、OUT、THRU■ 1ポート:16 チャンネル
メッセージの基本(1)
● メッセージの種類○ チャンネル・メッセージ
■ チャンネル毎に独立した演奏情報を伝える
○ システム・メッセージ■ 全体をコントロールする情報を伝える
▶ Status Byte
(9nh)(8nh)
(Cnh)
(F0h‥F7h)
メッセージの基本(2)
● メッセージの構成○ 単・複数の8bit (1Byte) で構成○ Status Byte(80h-FFh)、Data Byte(00h-7fh)
例1)Channel=0 で A4(NoteNo=69/45h) を 101/65h の Velocity の音を鳴らす
A4 (NoteNo=69/45h)Channel Velocity (101)NoteOn
※ Channel=0 の A4(NoteNo=69) の音を止める (noteOff (8nh)) ▶ 80h 45h 00h
例2)Channel=0 の音色を Applause(programNo=126) に変更
9 0 4 5 6 5
Applause (ProgramNo=126/7Eh)
ChannelNoteOn
C 0 7 E (9nh)(8nh)
(Cnh)
MIDI Message Tester
メッセージの基本(3)
● System Exclusive(SysEx)○ 電子楽器固有の機能を制御する為に使用
■ Voice、エフェクトのパラメータ等を送信○ メッセージ
■ F0hで始まり、F7hで終わる■ 可変長
○ ID Numnber (ManufactuererID)■ 楽器メーカが持つ固有のID
● 取得には申請が必要 (申請先:AMEI(日本)、MMA)
F0h <ID Number> <Device ID> F7h・・・
MIDIを詳しく知りたい!
● MIDI 1.0 規格書○ 発行:社団法人 音楽電子事業協会(AMEI)
▶ http://amei.or.jp/merchan/MIDI_spc.html
メリット・デメリット
○ メリット■ 信号なので実際の音よりデータ量が少ない
● 「発音せよ!」、「音色を変えろ!」等の信号● 1分約10kb以下
■ シーケンスが書ける
○ デメリット■ 音源によって音色がバラつく可能性がある
ユースケース
○ 音楽用途■ 電子楽器の複数台同時コントロール■ DAW(Cubase, Vision等)■ カラオケ、演奏記録アプリ
■ 遠隔地ライブ配信 Elton John Remote Live
○ ショー(MSC:MIDI Show Control)■ Universal Studio Water World■ Bellagio fountain show
MIDIをみてみる
TO MAKE THE END OF BATTLE / Ys2 © Falcom 1988 MIDI Data From : http://goo.gl/gxg4Cx
Web MIDI API
概要
● ブラウザとMIDI機器を直接つなぐHTML5の1部としてW3Cにて策定が進められているAPI○ WG:Audio WG (Web Audio APIと同一WG)○ Editor:Chris Wilson(Google), Jussi Kalliokoski
○ Milestone
対応状況
● 実装済みブラウザ○ Google Chrome Canary (Mac)
● その他のブラウザで使う○ Jazz-Plugin (Jazz-Soft.net)
■ http://jazz-soft.net/doc/Jazz-Plugin/○ Polyfill
■ Web MIDI API Shim
○ 使い方
Specへのリンク
● W3C http://webaudio.github.io/web-midi-api/
● Chrome http://goo.gl/D3AHF3
Spec
● Method○ [(I/F) navigator]
requestMIDIAccess({sysex:ture/false}).then(scb, ecb)
→ scb:(I/F) MIDIAccess
→ ecb:(I/F) DOMError
○ [(I/F) MIDIAccess] outputs() -> (I/F) MIDIPort■ [(I/F) MIDIOutput] send()
○ [(I/F) MIDIAccess] inputs() -> (I/F) MIDIPort
● EventHandler○ [(I/F) MIDIInput] onmidimessage○ [(I/F) MIDIOutput] onconnect○ [(I/F) MIDIOutput] ondisconnect
Source
MIDIメッセージ知らなくてもOK!
● Web MIDI API Wrapper○ チャンネルメッセージをほぼ網羅
http://goo.gl/rWvhGW (英語) http://goo.gl/RAJJTw (日本語)
まとめ
● Chrome CanaryでWeb MIDI API実装済み!○ Polyfillを使えばモダンブラウザで利用可能
● Web MIDI APIはすごくシンプル○ Wrapperを使えばメッセージを理解する必要もない
● MIDIは楽器だけの規格にあらず○ アイデア次第で夢は膨らむ
Web Music Developers JP
● 音楽系アプリ等に興味のあるかたはぜひ!○ Web Audio API○ Web MIDI API○ Web RTC
Google Groups : http://goo.gl/G9U8Mr Google+ : http://goo.gl/BULcuo