2012年12月23日日曜日

三つ子の魂百まで? Webシンセを作りたい!

三つ子の魂百まで? HTML5 + JavaScript でWebシンセを作りたい!

今年(2012 年)の初夏ごろから、WebAudioSynth や、WebModular など、HTML5 + JavaScript で作られたソフトシンセが次々と登場してびっくりさせられました。Web ブラウザ上でさくさく動く手軽さと、それでもしっかりした音が出る実用性に二度びっくり。その後すぐに発表された、WebMidiLink で Web シンセ達が連携して動く!と、三度もびっくりさせられました。

そんな勢いに触発されて、私も Web Audio API を使ったシンセを作り始めました。最初はスライダーと、鍵盤代わりの四角い画像が一つだけという、シンプルな UI の 4 オペレータ FM シンセサイザーでした。

初期のプロトタイプ。4オペレータ分の ADSR + Ratioと、鍵盤代わりの四角い画像が一つだけ。

しかしながら、早い段階で WebMidiLink に対応させていたため、g200kg さんの WebMidiLink テストページからこのプロトタイプをロードすると、あっという間に鍵盤で音階を鳴らせ、MML でシーケンスを組むことまでできました。WebMidiLink はとてもシンプルなアイデアですが、実際に動くのを目にすると本当に感動。それはまるで、MIDI 黎明期の出来事を追体験しているような気持ちでした。

JavaScript も Web Audio API も初めての挑戦でした。開発初期の頃は、『パーフェクト JavaScript』や、正弦波を Web Audio API を使って生成するコード が参考になりました。JavaScript は利用者の多い言語ということもあって、情報を得るのに苦労はありません。言語やライブラリの使い勝手は、情報の収集し易さにも大きく左右されます。その観点で、HTML5 + JavaScript はさすが文句無し!(ただし玉石混淆) Web Audio API の情報はこれから充実してくるかな?という印象でした。私もいつかは JavaScript らしい洗練されたコーディングができるようになりたいものです。

自由なコーディングのひとときは、プログラマにとってプラモデルを組み立てているように楽しい時間です。いつまでも未完成のまま、ひっそりと組み立てを楽しむのも良いですが、WebAudioSynth や WebMidiLink から受けた衝撃を、さらにまた別の人に伝播させたいと思い立ち、Web FM synthesizer として公開することにしました。私がそうだったように、この Web シンセに興味を持った誰かが、また新しい Web シンセを登場させてくれると良いな、と思っています。

Web FM synthesizer

拙作の iOS アプリ、DXi FM synthesizer をお手本に、オペレータ式 FM シンセシスの一部のパラメータをエディットして遊べるお試し版としました。せっかくの Web シンセなので、作った音色のパラメータを URLに変換し、Twitter で気軽にシェアできる機能をつけました。
また、Web Audio API の ConvolverNode と、Impulse responses で公開されているフリーの IR サンプリングデータを利用して、FM シンセサイザーが盛んに使われた時代のデジタルリバーブを再現し、少しだけ出音にお化粧を施しています。雰囲気、出てますか?
ポリフォニック化やレイテンシ(バッファサイズ)のチューニングなど、まだいくつかやり残したことがあるので、引き続き JavaScript のコーディングを楽しみながら、Web MIDI API の到来を待ちたいと思います。

少し話題は変わって。この記事を書こうと考えたのは、今から 15 年前にも、私はWeb ブラウザで動く「Web 楽器」を作っていたことを思い出したからです。当時は Java(アプレット)として開発し、鍵盤をクリックすると、ulaw 8kHz のサンプリング音が鳴る、という単純なものでした。

"Internet Archive" から、当時私が公開していた Web ページの一部

当時作った Web 楽器 Java アプレットは、Internet Archive にも手元にも残っておらず、もはや動かせないのが残念です。これを作ったのは、インターネットと出会ってちょうど 1 年くらい経った頃でした。その頃に見つけた楽しいおもちゃは、やっぱり今でも楽しいものに変わりありません。三つ子の魂百まで。前述の Web Audio API を使ったシンセを見つけた時に、心の奥底に眠っていた魂が目覚めたのかもれませんね。

ところで、Internet Archive には、このページ以外にも、私がかつて公開していたコンテンツがいくつか残っているようです。しかし、当時高校生だった私が書いた文章を読み返していたところ、重度の中二病を発症していることがはっきりと確認されたため、非公開とさせて頂きます。あしからず。