Top Banner
Web Audio API Web MIDI API を使ったサウンドプログラミング ヤマハ 株式会社 かわい りょうや
46

HTML5 Conference 2015 鹿児島

Aug 08, 2015

Download

Technology

Kawai Ryoya
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: HTML5 Conference 2015 鹿児島

Web Audio API、 Web MIDI APIを使ったサウンドプログラミング

ヤマハ 株式会社 かわい りょうや

Page 2: HTML5 Conference 2015 鹿児島

個人活動

● HTML5Experts.jp #55● Web Music Developers JP 管理人

かわい りょうや

google.com/+RyoyaKawai

ヤマハ株式会社 NVPプロジェクト

@ryoyakawai

得意技

● Web Audio API, Web MIDI API● Polymer (Web Components)● 大外刈、クロール

みでゃっぴー by @g200kg

(Unofficial Web MIDI API Mascot)

Page 3: HTML5 Conference 2015 鹿児島

Web Audio API

Page 4: HTML5 Conference 2015 鹿児島

Webブラウザ上で

信号処理を可能にした API

Page 5: HTML5 Conference 2015 鹿児島

● API自体

○ JavaScript で音そのものを作成&加工

● Web Platformだから受ける特徴

○ 出どころが確実でOpenな仕様(W3C)

○ Platform依存がない

● API策定の方針

○ Developer 思考

○ Native と同等な API を目指す

○ モジュール思考(Web Audioでは ”Node”と呼ぶ)

特徴:Web Audio API

Page 6: HTML5 Conference 2015 鹿児島

モジュール(Node)思考

● オシレーター

● オーディオバッファソース

● ゲイン

● フィルター

● ディレイ

● スクリプトプロセッサー

● パン

● コンプレッサー

● コンボルバー

● アナライザー

● ウェーブシェイパー

用意されているNode

Node Graph

オーディオバッファソース

ディレイゲイン

Page 8: HTML5 Conference 2015 鹿児島

ブラウザで音って楽しそうでしょ?

― 何だか分からないけどw

Page 9: HTML5 Conference 2015 鹿児島

Web Audio APIを利用可能なブラウザ

iOS Mini

Page 10: HTML5 Conference 2015 鹿児島

やってみよう!

Page 11: HTML5 Conference 2015 鹿児島

● 音量と音階を変える

信号処理:その1

デ モ

Page 12: HTML5 Conference 2015 鹿児島

音色を変更 = 波形を変える

Page 13: HTML5 Conference 2015 鹿児島

アナログ シンセサイザー

Page 14: HTML5 Conference 2015 鹿児島

● 波形を揺らしたり・削ったり・足したり

信号処理:その2

デ モ

Page 15: HTML5 Conference 2015 鹿児島

信号処理:その2:コードの解説 <script type="text/javascript"> var ctx=new AudioContext() || webkitAudioContect(); var osc0, osc1, lfo, vcf; osc0=ctx.createOscillator(), osc1=ctx.createOscillator(); lfo=ctx.createOscillator(); vcf=ctx.createBiquadFilter(); osc0.connect(vcf); osc1.connect(vcf); lfo.connect(osc0.frequency); lfo.connect(osc1.frequency); lfo.connect(vcf.detune); vco0.start(0), vco1.start(0);

lfo.start(0); </script>

● VCO(Voltage Controlled Oscillator):発振機

● LFO(Low Frequency Oscillator):低周波発振機

● VCF(Voltage Controlled Filter):電圧制御フィルタ

Page 16: HTML5 Conference 2015 鹿児島

FM シンセサイザー

Page 17: HTML5 Conference 2015 鹿児島

● 周波数をいじってみる

信号処理:その3

デ モ

Page 18: HTML5 Conference 2015 鹿児島

信号を扱う:その3:コードの解説

<script type="text/javascript"> var ctx=new AudioContext() || webkitAudioContect(); var mod, car; mod=ctx.createOscillator(), car=ctx.createOscillator(); mod.connect(car.frequency);

mod.start(0), car.start(0); </script>

音色は以下の3つで決定

● Carrier、Modulator の周波数の比率

● Modulator のアウトプットレベル

● Moduator のフィードバック

Page 19: HTML5 Conference 2015 鹿児島

Web MIDI API

5DIN (Deutsches Institut Fur Normung)

Page 20: HTML5 Conference 2015 鹿児島

ブラウザがMIDIをサポート?

@ITさん

DTM Station:藤本健さん

Page 21: HTML5 Conference 2015 鹿児島

音源モジュール

Webブラウザと MIDI機器を直接接続する 為のAPI

MIDIコントローラ

Page 22: HTML5 Conference 2015 鹿児島

● API自体

○ JavaScript で MIDI 機器と接続ができる

● Web Platformだから受ける特徴

○ 出どころが確実でOpenな仕様(W3C)

○ APIについてはPlatform依存がない

● API策定の方針

○ Developer 思考

○ Native と同等な API を目指す

特徴:Web MIDI API

Page 23: HTML5 Conference 2015 鹿児島

Web Audio APIを利用可能なブラウザ

iOS Miniworking on

Page 24: HTML5 Conference 2015 鹿児島

利用可能なブラウザ

Google

chrome

Mac

Windows

Android

Chromebook

● iOSでのWeb MIDI API○ Web MIDI Browser 上で動作します!!

web midi browser ios

Opera

Page 25: HTML5 Conference 2015 鹿児島

MIDIって?

● Musical Instrument Digital Interface○ 演奏データを機器間でデジタル転送する規格

■ 物理的な送受信回路

■ インターフェイス

■ プロトコル

■ ファイルフォーマット、等

MIDI

● Musical Instrument Digital Interface○ 演奏データを機器間でデジタル転送する規格

■ 物理的な送受信回路

■ インターフェイス

■ プロトコル

■ ファイルフォーマット、等

Page 26: HTML5 Conference 2015 鹿児島

Status Byte (80h-FFh) Data Byte (00h-7Fh)

MIDIメッセージ

● 16進数

● 最低限知ってるとよいメッセージ

○ 音を出力 noteOn 9xh <noteNo> <velocity>○ 音を停止 noteOff 8xh <noteNo> <velocity>○ 音色変更 programChange Cxh <no>○ SysEx System Exclusive 0xF0 … 0x7F

midi メッセージ

約 452, 000件 (0.33秒)

残りのメッセージは検索で!

Page 27: HTML5 Conference 2015 鹿児島

<script type="text/javascript"> var midiins=[], midiouts=[]; navigator.requestMIDIAccess.then({sysex:true})(function(access) { var inputIterator=access.inputs.values(); for(var o=inputIterator.next(); !o.done; o=inputIterator.next()) { midiins.push(o.value); } var outputIterator=access.outputs.values(); for(var o=outputIterator.next(); !o.done; o=outputIterator.next()) { midiouts.push(o.value); } }, function(msg){ console.log(msg);}); </script>

<script type="text/javascript"> midiins[0].onmidimessage=function(event) { console.log(event.data); } midiouts[0].send([0x90, 0x55, 0x7f], 0); </script>

MIDIデバイスの接続:コードの解説● デバイスを列挙する

● メッセージを処理する

Page 28: HTML5 Conference 2015 鹿児島

“There’s an element for that!”― 1時間前に小松さん曰く

Extensible Web

Page 29: HTML5 Conference 2015 鹿児島

x-webmidi

3秒でMIDIを使う準備を整えたい!

Page 30: HTML5 Conference 2015 鹿児島

x-webmidiWeb MIDI APIの Polymer Element- bower 対応 - 機器のリスト、接続- 取得メッセージのParse- 16進数は覚える必要なし

x-webmidi

$ bower install x-webmidi;

Page 31: HTML5 Conference 2015 鹿児島

やってみよう!

Page 34: HTML5 Conference 2015 鹿児島

Webブラウザ上に楽器を作れちゃいました!

Photo by Ed Christensen

いや、ちょっと待てよ、、、

Page 35: HTML5 Conference 2015 鹿児島

昔からできたよね?

<audio src=”hoho.ogg”>

<embeded src=”gegege.mid”>

Page 36: HTML5 Conference 2015 鹿児島

Photo by Giulia van Pelt

新しくないなら何か変わるの?

Page 37: HTML5 Conference 2015 鹿児島

標準化されたAPIを持つPlatformが増えた!

Photo by Giulia van Pelt

Web ブラウザ

Page 38: HTML5 Conference 2015 鹿児島

● 標準化された環境

○ 安心して利用できる

○ オープン

● 開発環境

○ ブラウザ & テキストエディタ

● 言語

○ Web標準言語(HTML, CSS , JavaScript)

● その他

○ APIが豊富で進化が速い

○ オープンだから情報が豊富!!

WebというPlatformの特徴

Page 39: HTML5 Conference 2015 鹿児島

● User視点

○ アプリのインストール不要

○ Nativeと変わらない(まだ制限が多いかも・・・)

● Developer視点

○ 格段に開発のハードルが下がった(自由化!)

○ モノゴトがオープンに進む

● マーケット

○ イノベーションが起きやすい

○ 進化のスピードもアップ

2つの視点とマーケット

Page 40: HTML5 Conference 2015 鹿児島

イノベーションって言っても楽器界隈だけでしょ?

って、疑問がありそうなので.....

Page 41: HTML5 Conference 2015 鹿児島

● 音楽以外の用途○ MIDI Show Control(MSC)

■ ステージの照明等の操作

■ 96台の機材を制御可能(照明、ビデオ、スモーク、爆発等)

音楽分野外でのMIDIの利用

Page 42: HTML5 Conference 2015 鹿児島

個人的なMIDIへの期待

Machine2Machine Interactive Digital Interface

Musical Instrument Digital Interface

Page 43: HTML5 Conference 2015 鹿児島

まずは触ってみよう!

Page 44: HTML5 Conference 2015 鹿児島

● Web Music Developers JPに相談だ!!

○ Google Groups○ Google+

Web Music Developers JP

Web Audio/MIDIで困ったら...

Page 45: HTML5 Conference 2015 鹿児島

日程:7月25日(土) 10:00 - 18:00場所:京都リサーチパーク

GDG京都・GDG神戸・Web Music Developers JP 共同開催

Web Music ハッカソン@京都

京都 Web Music

Photo by Moyan Brenn

goo.gl/juh2E2

Page 46: HTML5 Conference 2015 鹿児島

アンケートにご協力お願いします。

http://bit.ly/html5C201507

ご静聴ありがとうございました!