SlideShare a Scribd company logo
1 of 28
Download to read offline
JavaScriptで音合成
moriyoshi (http://www.mozo.jp/)
はい
えー
JavaScriptで
音を合成
して、それを
その場で
再生しちゃう
できんのそれ?
それ、dataスキーム
でできるんじゃない?
data:
dataスキーム
•RFC2393 (1998年8月!)
•IEを除くブラウザで大体サポート※
•リソースへの参照ではなく、
データそのものを表現するURI
•バイナリデータを表現するには
•base64エンコードする
•URIエンコードする
よくある使い方
background-image: url(data:image/gif,
R0lGODlhEAAQAMIFAAAAAGBgYKCgoODBcPggP///////////yH5BAEKAA
cALAAAAAAQABAAAANJeHrQvlCBIKhoUYZdhQfRNHXNFQKDAxAEYC7oMLC
0C8LN3K72nesEXaMlQa1aNZYPhWQVaESJbAjFQGLQXcZIjW6B2kxRJS6L
EwA7);
画像がいければ
音もいけるはず
で、まあ、
あとはブラウザの
メディア再生能力に
頼る。
background-image: url(data:image/gif,
R0lGODlhEAAQAMIFAAAAAGBgYKCgoODBcPggP///////////yH5BAEKAA
cALAAAAAAQABAAAANJeHrQvlCBIKhoUYZdhQfRNHXNFQKDAxAEYC7oMLC
0C8LN3K72nesEXaMlQa1aNZYPhWQVaESJbAjFQGLQXcZIjW6B2kxRJS6L
EwA7);
バイナリデータ
つくっちゃう
JavaScriptで
も
これ
(仮)
JS Synthsizer
……(デモ: http://svn.coderepos.org/share/lang/javascript/SoundGenerator/test.html)
(仮) JS Synthsizer
•JavaScriptで音を合成 (=synthesize)
•今のところは矩形波とノコギリ波の生
成に対応
•目指せJS-303
しくみ
+
-127 54 67 90 102 125 76 51 9 3 -23…
-127 54 67 90 102 125 76 51 9 3 -23…
-127 54 67 90 102 125 76 51 9 3 -23…
data:audio/wav,R&DIFF%04%7B
%00%00WAVEfmt%20%10%00%00%00…
1.
2.
3.
4.
<iframe
src=”data:audio/
wav,RIFF%04%7B
%00%00WAVEfmt
%20%10%00%00%00…
今後の課題
•リアルタイムストリーミング
➡音を鳴らしながら処理する
•もっとシンセっぽく
➡ローパスフィルタとかの実装
余談
dataスキームで
バイナリを吐くテクを
応用して
JavaScriptで
Excelのファイルを作る
……
とか
JSでなんでもやるお
(含むAS)
そんな時代
?
ありがとう
ございました

More Related Content

More from Moriyoshi Koizumi

All I know about rsc.io/c2go
All I know about rsc.io/c2goAll I know about rsc.io/c2go
All I know about rsc.io/c2go
Moriyoshi Koizumi
 
Hacking Go Compiler Internals / GoCon 2014 Autumn
Hacking Go Compiler Internals / GoCon 2014 AutumnHacking Go Compiler Internals / GoCon 2014 Autumn
Hacking Go Compiler Internals / GoCon 2014 Autumn
Moriyoshi Koizumi
 
よいことも悪いこともぜんぶPHPが教えてくれた
よいことも悪いこともぜんぶPHPが教えてくれたよいことも悪いこともぜんぶPHPが教えてくれた
よいことも悪いこともぜんぶPHPが教えてくれた
Moriyoshi Koizumi
 
HPHPは約束の地なのか
HPHPは約束の地なのかHPHPは約束の地なのか
HPHPは約束の地なのか
Moriyoshi Koizumi
 
Phjosh(仮)プロジェクト
Phjosh(仮)プロジェクトPhjosh(仮)プロジェクト
Phjosh(仮)プロジェクト
Moriyoshi Koizumi
 
LLの虎 semifinal: 殺伐Python
LLの虎 semifinal: 殺伐PythonLLの虎 semifinal: 殺伐Python
LLの虎 semifinal: 殺伐Python
Moriyoshi Koizumi
 

More from Moriyoshi Koizumi (20)

All I know about rsc.io/c2go
All I know about rsc.io/c2goAll I know about rsc.io/c2go
All I know about rsc.io/c2go
 
HLSについて知っていることを話します
HLSについて知っていることを話しますHLSについて知っていることを話します
HLSについて知っていることを話します
 
Pyramidのrendererをカスタマイズする
PyramidのrendererをカスタマイズするPyramidのrendererをカスタマイズする
Pyramidのrendererをカスタマイズする
 
Hacking Go Compiler Internals / GoCon 2014 Autumn
Hacking Go Compiler Internals / GoCon 2014 AutumnHacking Go Compiler Internals / GoCon 2014 Autumn
Hacking Go Compiler Internals / GoCon 2014 Autumn
 
Uguisudani
UguisudaniUguisudani
Uguisudani
 
よいことも悪いこともぜんぶPHPが教えてくれた
よいことも悪いこともぜんぶPHPが教えてくれたよいことも悪いこともぜんぶPHPが教えてくれた
よいことも悪いこともぜんぶPHPが教えてくれた
 
Ik in action
Ik in actionIk in action
Ik in action
 
Nginx lua
Nginx luaNginx lua
Nginx lua
 
Haxeについて
HaxeについてHaxeについて
Haxeについて
 
Gocon2013
Gocon2013Gocon2013
Gocon2013
 
PHP language update 201211
PHP language update 201211PHP language update 201211
PHP language update 201211
 
mod_himoteからはじめよう
mod_himoteからはじめようmod_himoteからはじめよう
mod_himoteからはじめよう
 
HPHPは約束の地なのか
HPHPは約束の地なのかHPHPは約束の地なのか
HPHPは約束の地なのか
 
Pyfes201110
Pyfes201110Pyfes201110
Pyfes201110
 
Phjosh(仮)プロジェクト
Phjosh(仮)プロジェクトPhjosh(仮)プロジェクト
Phjosh(仮)プロジェクト
 
Aaなゲームをjsで
AaなゲームをjsでAaなゲームをjsで
Aaなゲームをjsで
 
Aaなゲームをjsで
AaなゲームをjsでAaなゲームをjsで
Aaなゲームをjsで
 
ctypes拡張モジュール
ctypes拡張モジュールctypes拡張モジュール
ctypes拡張モジュール
 
LLの虎 semifinal: 殺伐Python
LLの虎 semifinal: 殺伐PythonLLの虎 semifinal: 殺伐Python
LLの虎 semifinal: 殺伐Python
 
Introducing E-Cell 3.2
Introducing E-Cell 3.2Introducing E-Cell 3.2
Introducing E-Cell 3.2
 

Adobe MAX Japan 2009: 出張JUIカンファレンス - JavaScriptで音合成