読者です 読者をやめる 読者になる 読者になる

音の鳴るブログ

鳴らないこともある

JavaScript で Web Audio API を実装した

github.com

以前から Web Audio API に興味があって暇なときには仕様を読んだりしていたのですが、だいたい分かったぞ!!と思って勢いで書きました。すべて JavaScript で書いてあるのでブラウザはもちろん Node.js でも動作します。Node.js で動かす場合はレンダリング結果をストリームとして出力するかwav形式でエクスポートできます。

オンラインのデモ (web-audio-engine と native Web Audio API の比較ができます)

web-audio-engine :: demo

先行する事例の

と比較すると、 チャネルの動的適応 (入力のチャネル構成によって下流のチャネル構成が変化する) や AudioNode のライフサイクル (動作しないエッジを擬似的にばっさりと切断する) を実装していてより仕様に沿ったものとなっています。

まだまだ未対応なノードとかメソッドなどが残っていますが音を出す仕組みのあたりは一段落したという感じです。ちょっと疲れてきて作業をするたびにコードが意味不明になっていく状態になったので、しばらくはコードにコメントを足すぐらいにして、また気力と体力が復活したら少しずつ機能を足していこうかと思います。

実装したAPI

  • AudioBuffer
  • AudioBufferSourceNode
  • AudioContext
  • AudioDestinationNode
  • AudioNode
  • AudioParam
  • BiquadFilterNode (audio rate parameter is not supported)
  • ChannelMergerNode
  • ChannelSplitterNode
  • DelayNode (noisy..)
  • GainNode
  • OscillatorNode (use wave-table synthesis, not use periodic wave)
  • PeriodicWave
  • ScriptProcessorNode
  • StereoPannerNode
  • WaveShaperNode

未実装のAPI

  • AnalyserNode
  • AudioWorkerNode
  • ConvolverNode
  • DynamicsCompressorNode
  • IIRFilterNode
  • PannerNode
  • SpatialPannerNode