SlideShare ist ein Scribd-Unternehmen logo
1 von 36
Downloaden Sie, um offline zu lesen
WebAudio APIで
ブラウザ上で動く
DJアプリケーションは
作れるか?
(WebAudio API アプリケーション作成入門)
2014.5.19 / Koizumi Ryo / @Mayu_mic
自己紹介
- 小泉 亮 (Koizumi Ryo)
- @Mayu_mic
- (株)ドワンゴ エンジニア
- JavaScript(TypeScript)
- London Elektricity, Squarepusher, mondo grosso, etc.
WebAudio APIとは?
W3C によって開発されている、
ウェブアプリケーション用の音声処理と
音声合成のための高レベルJavaScript API。
(http://ja.wikipedia.org/wiki/HTML5オーディオ)
HTML5 <Audio> 要素との違い
- 音の再生タイミングの制御ができる
- 音の出力にエフェクトを載せることができる
- 波形データの生成・編集・加工ができる
- etc.
ブラウザ対応状況
(http://caniuse.com/#feat=audio-api)
ただし、細かいところで対応状況への違いあり
(MediaStreamingに対してエフェクトが効かない@Safari など…)
多くの作曲および音楽制作アプリケーションが作れるようになります。
オーディオイベントのタイトなスケジューリングが必要なアプリケーショ
ンも実装でき、教育的なものとエンターテインメント的なものの両方が可
能です。 ドラムマシン、デジタルDJアプリケーション、GarageBandに
ある機能の幾つかを持ったタイムラインベースのデジタルミュージック・
プロダクションソフトウェアさえ書くことができます。
W3C Working Draft 10 October 2013
(http://g200kg.github.io/web-audio-api-ja/)
多くの作曲および音楽制作アプリケーションが作れるようになります。
オーディオイベントのタイトなスケジューリングが必要なアプリケーショ
ンも実装でき、教育的なものとエンターテインメント的なものの両方が可
能です。 ドラムマシン、デジタルDJアプリケーション、GarageBandに
ある機能の幾つかを持ったタイムラインベースのデジタルミュージック・
プロダクションソフトウェアさえ書くことができます。
W3C Working Draft 10 October 2013
(http://g200kg.github.io/web-audio-api-ja/)
本当?
音源 音源
エフェクト エフェクト
エフェクト
ミキサー
目標 :
ブラウザ上だけで動く
DJアプリケーションを作る
WebAudio APIの基本
Source Node
Effect Node
Destination Node
基本は3種類のノードをつなぎ合わせる
音を出現させる
音を加工する
音の最終出力先を決める
一番簡単な形
SourceNode Destination
ソースから入力された音が、

そのままDestinationに向かう
var source = context.createBufferSource();
source.connect(context.destination);
入力を加工する
SourceNode DestinationEffectNode
ソースから入力された音が、

EffectNodeで加工されてDestinationに向かう
var source = context.createBufferSource();
var gainNode = context.createGain();
source.connect(gainNode);
gainNode.connect(context.destination);
直列に連結したり、
複数のノードを受けることも可能
組み合わせることで、複雑な音の流れを制御する
DeckA
DeckB
Filter
Filter
Sample
Gain
Gain
Gain
MasterGain
Dest
実際に
DJアプリケーションを
設計する
音源 音源
SourceNode : 音を出現させる
- AudioBufferSourceNode
- MediaStreamingSourceNode
- OscillatorNode
MP3, Wavなどのサンプルを読み込んで(任意のタイミングで)再生する
Audioタグや、ネットワーク上からストリーミング経由で再生する
周期的な波形を生成する
SourceNode : 音を出現させる
- AudioBufferSourceNode
- MediaStreamingSourceNode
- OscillatorNode
MP3, Wavなどのサンプルを読み込んで(任意のタイミングで)再生する
Audioタグや、ネットワーク上からストリーミング経由で再生する
周期的な波形を生成する
AudioBufferNode : ロード
private _loadArrayBuffer(path: string, timeout: number = 20000): JQueryPromise<ArrayBuffer> {
var d = $.Deferred();
setTimeout(d.reject, timeout); // タイムアウトで失敗させる
!
var request = new XMLHttpRequest();
request.open("GET", path, true);
request.responseType = 'arraybuffer';
!
request.addEventListener('load', (ev: Event) => {
if (request.status == 200) {
console.info( ロード成功 );
d.resolve(request.response);
}
d.reject(request.status.toString());
});
!
// エラーで失敗させる
request.addEventListener('error', (ev: Event) => {
console.error("ロード失敗");
d.reject();
});
!
request.send();
return d.promise();
}
- MP3などの音楽データをArrayBuffer形式で読み込む
AudioBufferNode : ロード
private _loadArrayBuffer(path: string, timeout: number = 20000): JQueryPromise<ArrayBuffer> {
var d = $.Deferred();
setTimeout(d.reject, timeout); // タイムアウトで失敗させる
!
var request = new XMLHttpRequest();
request.open("GET", path, true);
request.responseType = 'arraybuffer';
!
request.addEventListener('load', (ev: Event) => {
if (request.status == 200) {
console.info( ロード成功 );
d.resolve(request.response);
}
d.reject(request.status.toString());
});
!
// エラーで失敗させる
request.addEventListener('error', (ev: Event) => {
console.error("ロード失敗");
d.reject();
});
!
request.send();
return d.promise();
}
- MP3などの音楽データをArrayBuffer形式で読み込む
※point※
jQuery.Deferred()をうまく使い
非同期処理させる
AudioBufferNode : デコード
private _decodeAudioBufferAsynchronously(data: ArrayBuffer, context: AudioContext)
: JQueryPromise<AudioBuffer> {
var d = $.Deferred();
context.decodeAudioData(data, (buffer: AudioBuffer) => {
console.info('バッファのデコード完了');
d.resolve(buffer);
}, () => {
console.error("バッファのデコードに失敗");
d.reject();
});
return d.promise();
}
- 読み込んだArrayBufferをAudioBuffer形式にデコードする
load(buffer: ArrayBuffer): JQueryPromise<AudioBuffer> {
return this._decodeAudioBufferAsynchronously(buffer)
.done((buffer: AudioBuffer) => {
this._buffer = buffer;
this._isLoaded = true;
});
}
AudioBufferNode : 再生
play(when: number = 0) {
var source = this._context.createBufferSource(); // ソースは再生のたびに使い捨てる
source.buffer = this._buffer;
source.connect(context.destination);
source.start(when);
}
- ソースノードにbufferを入れて再生する
エフェクト エフェクト
エフェクト
EffectNode : 音を加工する
- GainNode
- 音量を上げ下げする
- PannerNode
- 音を左右に振る
- BiquadFilterNode
- 音の周波数をフィルタリングする
- DynamicsCompressorNode
- 音の音量の差異をつぶす
- ConvolverNode
- 音にリバーブなどのエフェクトをかける
etc…
EffectNode : 音を加工する
- GainNode
- 音量を上げ下げする
- PannerNode
- 音を左右に振る
- BiquadFilterNode
- 音の周波数をフィルタリングする
- DynamicsCompressorNode
- 音の音量の差異をつぶす
- ConvolverNode
- 音にリバーブなどのエフェクトをかける
etc…
GainNode : 音量を上げ下げする
set volume(value:number) {
this._gainNode.gain.value = value;
}
value = 0.5
Source GainNode Destination
vol vol
BiquadFilterNode : フィルターをつくる
set freq(value:number) {
var minValue = 40;
var maxValue = context.sampleRate / 2;
var numberOfOctaves = Math.log(maxValue / minValue) / Math.LN2;
var multiplier = Math.pow(2, numberOfOctaves * (value - 1.0));
this._filterNode.frequency.value = maxValue * multiplier;
}
周波数
Gain Q
frequency
※Lowpassの場合
this._filterNode.type = this._filterType = <any> lowpass'; // 他にhighpass, bandpassなど
ミキサー
ミキサーの設計 (2-channel: 例)
GainNode
Source Source
Effect Effect
Mixer
GainNode(Master)
Destination
GainNode
deckA deckB
Amp
CrossFader Pos
set crossFade(pos: number) {
this._deckAGain.gain.value = Math.cos(pos * 0.5*Math.PI);
this._deckBGain.gain.value = Math.cos((1.0 - pos) * 0.5*Math.PI);
}
ミキサー : クロスフェーダー
deckA deckB
Destination Node
: 音の最終出力先を決める
- AudioDestinationNode
- MediaStreamingAudioDestinationNode
デバイスのオーディオハードウェアから出力する
リモートストリーミング経由で出力する
今回話してないこと
- テンポチェンジ・BPM同期
- AudioBufferNodeでplayback rateをいじる(未確認)
!
- 波形描画
- Analyzer Nodeを使う?(未確認)
!
- Monitor Out
- オーディオ出力デバイスに依存する
参考
- 資料
- Web Audio API (日本語訳)
- http://g200kg.github.io/web-audio-api-ja/
!
- ソースコード
- Getting Started with Web Audio API - HTML5 Rocks
- http://www.html5rocks.com/ja/tutorials/webaudio/intro/

Weitere ähnliche Inhalte

Andere mochten auch

Webアプリでパスワード保護はどこまでやればいいか
Webアプリでパスワード保護はどこまでやればいいかWebアプリでパスワード保護はどこまでやればいいか
Webアプリでパスワード保護はどこまでやればいいかHiroshi Tokumaru
 
テストを書くのが嫌いな君へ #m3dev
テストを書くのが嫌いな君へ #m3devテストを書くのが嫌いな君へ #m3dev
テストを書くのが嫌いな君へ #m3devKazuhiro Sera
 
OpenID ConnectとSCIMの標準化動向
OpenID ConnectとSCIMの標準化動向OpenID ConnectとSCIMの標準化動向
OpenID ConnectとSCIMの標準化動向Tatsuo Kudo
 
第21回関西PHP勉強会 ReactPHPは もっと流行って欲しい #phpkansai
第21回関西PHP勉強会 ReactPHPは もっと流行って欲しい #phpkansai第21回関西PHP勉強会 ReactPHPは もっと流行って欲しい #phpkansai
第21回関西PHP勉強会 ReactPHPは もっと流行って欲しい #phpkansaiHisateru Tanaka
 
料理を楽しくする画像配信システム
料理を楽しくする画像配信システム料理を楽しくする画像配信システム
料理を楽しくする画像配信システムIssei Naruta
 
どうやらテスト駆動型開発は死んだようです。これからのCI
どうやらテスト駆動型開発は死んだようです。これからのCIどうやらテスト駆動型開発は死んだようです。これからのCI
どうやらテスト駆動型開発は死んだようです。これからのCIKoichiro Sumi
 
大規模スマートフォンサービス開発の世界 〜無料通話アプリcommの現場から〜
大規模スマートフォンサービス開発の世界 〜無料通話アプリcommの現場から〜大規模スマートフォンサービス開発の世界 〜無料通話アプリcommの現場から〜
大規模スマートフォンサービス開発の世界 〜無料通話アプリcommの現場から〜Ichito Nagata
 
なぜ私はソニックガーデンのプログラマに転身できたのか?
なぜ私はソニックガーデンのプログラマに転身できたのか? なぜ私はソニックガーデンのプログラマに転身できたのか?
なぜ私はソニックガーデンのプログラマに転身できたのか? Junichi Ito
 
「スキルなし・実績なし」 32歳窓際エンジニアがシリコンバレーで働くようになるまで
「スキルなし・実績なし」 32歳窓際エンジニアがシリコンバレーで働くようになるまで「スキルなし・実績なし」 32歳窓際エンジニアがシリコンバレーで働くようになるまで
「スキルなし・実績なし」 32歳窓際エンジニアがシリコンバレーで働くようになるまでShuichi Tsutsumi
 
デキるプログラマだけが知っているコードレビュー7つの秘訣
デキるプログラマだけが知っているコードレビュー7つの秘訣デキるプログラマだけが知っているコードレビュー7つの秘訣
デキるプログラマだけが知っているコードレビュー7つの秘訣Masahiro Nishimi
 
これからのネイティブアプリにおけるOpenID Connectの活用
これからのネイティブアプリにおけるOpenID Connectの活用これからのネイティブアプリにおけるOpenID Connectの活用
これからのネイティブアプリにおけるOpenID Connectの活用Masaru Kurahayashi
 
確実に良くするUI/UX設計
確実に良くするUI/UX設計確実に良くするUI/UX設計
確実に良くするUI/UX設計Takayuki Fukatsu
 
プロダクト開発におけるプロダクトマネージャーの役割とは #‎devsumi‬
プロダクト開発におけるプロダクトマネージャーの役割とは #‎devsumi‬プロダクト開発におけるプロダクトマネージャーの役割とは #‎devsumi‬
プロダクト開発におけるプロダクトマネージャーの役割とは #‎devsumi‬Mizuki Tanno
 

Andere mochten auch (13)

Webアプリでパスワード保護はどこまでやればいいか
Webアプリでパスワード保護はどこまでやればいいかWebアプリでパスワード保護はどこまでやればいいか
Webアプリでパスワード保護はどこまでやればいいか
 
テストを書くのが嫌いな君へ #m3dev
テストを書くのが嫌いな君へ #m3devテストを書くのが嫌いな君へ #m3dev
テストを書くのが嫌いな君へ #m3dev
 
OpenID ConnectとSCIMの標準化動向
OpenID ConnectとSCIMの標準化動向OpenID ConnectとSCIMの標準化動向
OpenID ConnectとSCIMの標準化動向
 
第21回関西PHP勉強会 ReactPHPは もっと流行って欲しい #phpkansai
第21回関西PHP勉強会 ReactPHPは もっと流行って欲しい #phpkansai第21回関西PHP勉強会 ReactPHPは もっと流行って欲しい #phpkansai
第21回関西PHP勉強会 ReactPHPは もっと流行って欲しい #phpkansai
 
料理を楽しくする画像配信システム
料理を楽しくする画像配信システム料理を楽しくする画像配信システム
料理を楽しくする画像配信システム
 
どうやらテスト駆動型開発は死んだようです。これからのCI
どうやらテスト駆動型開発は死んだようです。これからのCIどうやらテスト駆動型開発は死んだようです。これからのCI
どうやらテスト駆動型開発は死んだようです。これからのCI
 
大規模スマートフォンサービス開発の世界 〜無料通話アプリcommの現場から〜
大規模スマートフォンサービス開発の世界 〜無料通話アプリcommの現場から〜大規模スマートフォンサービス開発の世界 〜無料通話アプリcommの現場から〜
大規模スマートフォンサービス開発の世界 〜無料通話アプリcommの現場から〜
 
なぜ私はソニックガーデンのプログラマに転身できたのか?
なぜ私はソニックガーデンのプログラマに転身できたのか? なぜ私はソニックガーデンのプログラマに転身できたのか?
なぜ私はソニックガーデンのプログラマに転身できたのか?
 
「スキルなし・実績なし」 32歳窓際エンジニアがシリコンバレーで働くようになるまで
「スキルなし・実績なし」 32歳窓際エンジニアがシリコンバレーで働くようになるまで「スキルなし・実績なし」 32歳窓際エンジニアがシリコンバレーで働くようになるまで
「スキルなし・実績なし」 32歳窓際エンジニアがシリコンバレーで働くようになるまで
 
デキるプログラマだけが知っているコードレビュー7つの秘訣
デキるプログラマだけが知っているコードレビュー7つの秘訣デキるプログラマだけが知っているコードレビュー7つの秘訣
デキるプログラマだけが知っているコードレビュー7つの秘訣
 
これからのネイティブアプリにおけるOpenID Connectの活用
これからのネイティブアプリにおけるOpenID Connectの活用これからのネイティブアプリにおけるOpenID Connectの活用
これからのネイティブアプリにおけるOpenID Connectの活用
 
確実に良くするUI/UX設計
確実に良くするUI/UX設計確実に良くするUI/UX設計
確実に良くするUI/UX設計
 
プロダクト開発におけるプロダクトマネージャーの役割とは #‎devsumi‬
プロダクト開発におけるプロダクトマネージャーの役割とは #‎devsumi‬プロダクト開発におけるプロダクトマネージャーの役割とは #‎devsumi‬
プロダクト開発におけるプロダクトマネージャーの役割とは #‎devsumi‬
 

Ähnlich wie WebAudio APIでブラウザ上で動くDJアプリケーションは作れるか? (WebAudio API アプリケーション作成入門)

20140830 firefox os-sampler
20140830 firefox os-sampler20140830 firefox os-sampler
20140830 firefox os-samplerNoritada Shimizu
 
Frontrend vol.7 html5 audio
Frontrend vol.7   html5 audioFrontrend vol.7   html5 audio
Frontrend vol.7 html5 audioKei Funagayama
 
FM音源をいじれるWebサービスを作った
FM音源をいじれるWebサービスを作ったFM音源をいじれるWebサービスを作った
FM音源をいじれるWebサービスを作ったCHY72
 
もうひとつのNo sql couchdbとは
もうひとつのNo sql couchdbとはもうひとつのNo sql couchdbとは
もうひとつのNo sql couchdbとはKoji Kawamura
 
Web Audio APIの初歩
Web Audio APIの初歩Web Audio APIの初歩
Web Audio APIの初歩Shota Kubota
 
Azure Media Services 大全
Azure Media Services 大全Azure Media Services 大全
Azure Media Services 大全Daiyu Hatakeyama
 
Dropbox APIなどを使って制作を効率化しよう@関西オープンフォーラム
Dropbox APIなどを使って制作を効率化しよう@関西オープンフォーラムDropbox APIなどを使って制作を効率化しよう@関西オープンフォーラム
Dropbox APIなどを使って制作を効率化しよう@関西オープンフォーラムMasayuki Abe
 
Practical Web Audio API Programming
Practical Web Audio API ProgrammingPractical Web Audio API Programming
Practical Web Audio API Programmingaike
 
WebSocket + Node.jsでつくるチャットアプリ
WebSocket + Node.jsでつくるチャットアプリWebSocket + Node.jsでつくるチャットアプリ
WebSocket + Node.jsでつくるチャットアプリKohei Kadowaki
 
Webフロントエンド開発の最新トレンド - HTML5, モバイル, オフライン
Webフロントエンド開発の最新トレンド - HTML5, モバイル, オフラインWebフロントエンド開発の最新トレンド - HTML5, モバイル, オフライン
Webフロントエンド開発の最新トレンド - HTML5, モバイル, オフラインShumpei Shiraishi
 
Build 番号の自動更新スクリプトについて #cocoa_kansai
Build 番号の自動更新スクリプトについて #cocoa_kansaiBuild 番号の自動更新スクリプトについて #cocoa_kansai
Build 番号の自動更新スクリプトについて #cocoa_kansaiTomohiro Kumagai
 
20220519_TechStreet_vol6_kitazaki_v1.pdf
20220519_TechStreet_vol6_kitazaki_v1.pdf20220519_TechStreet_vol6_kitazaki_v1.pdf
20220519_TechStreet_vol6_kitazaki_v1.pdfAyachika Kitazaki
 
About kitakat
About kitakatAbout kitakat
About kitakathidenorly
 
AudioとガジェットをWebで遊ぶ - Web Audio/MIDI Web Bluetooth -
AudioとガジェットをWebで遊ぶ - Web Audio/MIDI Web Bluetooth -AudioとガジェットをWebで遊ぶ - Web Audio/MIDI Web Bluetooth -
AudioとガジェットをWebで遊ぶ - Web Audio/MIDI Web Bluetooth -Ryoya Kawai
 
「クリエイティブ・ミュージック・コーディング」- オーディオ・ビジュアル作品のための、オープンソースなソフトウエア・フレームワークの現状と展望
「クリエイティブ・ミュージック・コーディング」- オーディオ・ビジュアル作品のための、オープンソースなソフトウエア・フレームワークの現状と展望「クリエイティブ・ミュージック・コーディング」- オーディオ・ビジュアル作品のための、オープンソースなソフトウエア・フレームワークの現状と展望
「クリエイティブ・ミュージック・コーディング」- オーディオ・ビジュアル作品のための、オープンソースなソフトウエア・フレームワークの現状と展望Atsushi Tadokoro
 
【とらラボLT】go言語でのweb apiの作り方3選
【とらラボLT】go言語でのweb apiの作り方3選【とらラボLT】go言語でのweb apiの作り方3選
【とらラボLT】go言語でのweb apiの作り方3選虎の穴 開発室
 
Web Audio API, Web MIDI API - 2015 html5 conference
Web Audio API, Web MIDI API - 2015 html5 conferenceWeb Audio API, Web MIDI API - 2015 html5 conference
Web Audio API, Web MIDI API - 2015 html5 conferenceRyoya Kawai
 
WebAPIではじめるphp入門
WebAPIではじめるphp入門WebAPIではじめるphp入門
WebAPIではじめるphp入門Hiroaki Murayama
 
2016/05/01 Visual Studio with Cordova
2016/05/01 Visual Studio with Cordova2016/05/01 Visual Studio with Cordova
2016/05/01 Visual Studio with Cordovamiso- soup3
 

Ähnlich wie WebAudio APIでブラウザ上で動くDJアプリケーションは作れるか? (WebAudio API アプリケーション作成入門) (20)

20140830 firefox os-sampler
20140830 firefox os-sampler20140830 firefox os-sampler
20140830 firefox os-sampler
 
Frontrend vol.7 html5 audio
Frontrend vol.7   html5 audioFrontrend vol.7   html5 audio
Frontrend vol.7 html5 audio
 
FM音源をいじれるWebサービスを作った
FM音源をいじれるWebサービスを作ったFM音源をいじれるWebサービスを作った
FM音源をいじれるWebサービスを作った
 
もうひとつのNo sql couchdbとは
もうひとつのNo sql couchdbとはもうひとつのNo sql couchdbとは
もうひとつのNo sql couchdbとは
 
Web Audio APIの初歩
Web Audio APIの初歩Web Audio APIの初歩
Web Audio APIの初歩
 
SocketStream入門
SocketStream入門SocketStream入門
SocketStream入門
 
Azure Media Services 大全
Azure Media Services 大全Azure Media Services 大全
Azure Media Services 大全
 
Dropbox APIなどを使って制作を効率化しよう@関西オープンフォーラム
Dropbox APIなどを使って制作を効率化しよう@関西オープンフォーラムDropbox APIなどを使って制作を効率化しよう@関西オープンフォーラム
Dropbox APIなどを使って制作を効率化しよう@関西オープンフォーラム
 
Practical Web Audio API Programming
Practical Web Audio API ProgrammingPractical Web Audio API Programming
Practical Web Audio API Programming
 
WebSocket + Node.jsでつくるチャットアプリ
WebSocket + Node.jsでつくるチャットアプリWebSocket + Node.jsでつくるチャットアプリ
WebSocket + Node.jsでつくるチャットアプリ
 
Webフロントエンド開発の最新トレンド - HTML5, モバイル, オフライン
Webフロントエンド開発の最新トレンド - HTML5, モバイル, オフラインWebフロントエンド開発の最新トレンド - HTML5, モバイル, オフライン
Webフロントエンド開発の最新トレンド - HTML5, モバイル, オフライン
 
Build 番号の自動更新スクリプトについて #cocoa_kansai
Build 番号の自動更新スクリプトについて #cocoa_kansaiBuild 番号の自動更新スクリプトについて #cocoa_kansai
Build 番号の自動更新スクリプトについて #cocoa_kansai
 
20220519_TechStreet_vol6_kitazaki_v1.pdf
20220519_TechStreet_vol6_kitazaki_v1.pdf20220519_TechStreet_vol6_kitazaki_v1.pdf
20220519_TechStreet_vol6_kitazaki_v1.pdf
 
About kitakat
About kitakatAbout kitakat
About kitakat
 
AudioとガジェットをWebで遊ぶ - Web Audio/MIDI Web Bluetooth -
AudioとガジェットをWebで遊ぶ - Web Audio/MIDI Web Bluetooth -AudioとガジェットをWebで遊ぶ - Web Audio/MIDI Web Bluetooth -
AudioとガジェットをWebで遊ぶ - Web Audio/MIDI Web Bluetooth -
 
「クリエイティブ・ミュージック・コーディング」- オーディオ・ビジュアル作品のための、オープンソースなソフトウエア・フレームワークの現状と展望
「クリエイティブ・ミュージック・コーディング」- オーディオ・ビジュアル作品のための、オープンソースなソフトウエア・フレームワークの現状と展望「クリエイティブ・ミュージック・コーディング」- オーディオ・ビジュアル作品のための、オープンソースなソフトウエア・フレームワークの現状と展望
「クリエイティブ・ミュージック・コーディング」- オーディオ・ビジュアル作品のための、オープンソースなソフトウエア・フレームワークの現状と展望
 
【とらラボLT】go言語でのweb apiの作り方3選
【とらラボLT】go言語でのweb apiの作り方3選【とらラボLT】go言語でのweb apiの作り方3選
【とらラボLT】go言語でのweb apiの作り方3選
 
Web Audio API, Web MIDI API - 2015 html5 conference
Web Audio API, Web MIDI API - 2015 html5 conferenceWeb Audio API, Web MIDI API - 2015 html5 conference
Web Audio API, Web MIDI API - 2015 html5 conference
 
WebAPIではじめるphp入門
WebAPIではじめるphp入門WebAPIではじめるphp入門
WebAPIではじめるphp入門
 
2016/05/01 Visual Studio with Cordova
2016/05/01 Visual Studio with Cordova2016/05/01 Visual Studio with Cordova
2016/05/01 Visual Studio with Cordova
 

WebAudio APIでブラウザ上で動くDJアプリケーションは作れるか? (WebAudio API アプリケーション作成入門)