WAAPISim
1.WAAPISim : Web Audio API Simulator
|
WebAudio API Polyfill fallbacking to AudioDataAPI/Flash
WAAPISim is a 'Web Audio API' polyfill fallbacking to the 'Audio Data API', or Flash. In addition, even in WebAudio API ready browsers, add some latest method name for node-creation and start/stop if the browser does not support these method name (this is for Safari6).
WAAPISim automatically check the availability of APIs:
WebAudioAPI => AudioDataAPI => Flash
- Chrome : WebAudioAPI is supported. WAAPISim do nothing.
- Safari(6) : WebAudioAPI is supported but old method name is used. WAAPISim add new method name for node creation, start/stop and setTargetAtTime.
- Firefox : Simulate using AudioDataAPI
- Opera : Simulate using Flash
- MSIE : Simulate using Flash. Float32Array is assigned to normal Array (IE9).
Demo movie is available. 'WebAudioSynth' for Web Audio API by aike-san is running on Firefox.
waapisim.js
waapisim.swf
SWF source : waapisim.mxml
Released under the MIT License
Current Status
WAAPISim is still not completed. It is tentative and partial implementation.
- Channels in each nodes should be 1 (mono) or 2(stereo)
- OscillatorNode / ChannelSplitterNode / ChannelMergerNode / AudioBufferSourceNode / WaveShaperNode / AnalyserNode / GainNode / BiquadFilterNode / DelayNode : implemented
- DynamicsCompressorNode : Implemented but has a little different characteristics from Chrome's implements
- PannerNode : Simplified. Listener position should be stay default. Source positions are interpreted as x-z 2d coordinate (and almost meaningless in Flash fallbacking because it is monaural)
- ScriptProcessorNode : Implemented. input buffer size should be 1024 and under (No limitation if use output only)
- ConvolverNode : By performance reason, convolution is executed for only IR's first 1000 samples. Sebsequent part will be replaced as simple delays.
- createBuffer from ArrayBuffer supports only .wav format
- Node to k-rate AudioParam controls are executed only 1/1024 samples frequency. a-rate AudioParams are controlled by sample.
- Not supported DOM-releated/Stream-related functions, MediaElementSourceNode / MediaStreamAudioSourceNode / MediaStreamAudioDestinationNode
Test pages
- ScriptProcessor/Oscillator/WaveShaper/Filter/Analyser
- DynamicsCompressor
- AudioParam Automation
- ChannelSplitter / ChannelMerger
- Oscillator-custom waveform
- Delay
Also available on GitHub : https://github.com/g200kg/WAAPISim
Some test-pages are ready on GitHub forking some WebAudioAPI apps.
- MIDIDrums (by Chris Wilson + (Chris Rogers and Ken Moore)) with WAAPISim
- WebAudioSynth (by aike) with WAAPISim
Usage
Load the 'waapisim.js' before using the Web Audio API
For flash fallbacking, 'waapisim.swf' should be placed to same directory as 'waapisim.js'
<script type="text/javascript" src="waapisim.js"></script>
History
- 20130226
- BugFix: DelayNode cannot work normal on Opera/MSIE.
- 20130224
- Add latest method name for browsers that support WebAudioAPI but use deprecated method names
- 20130221
- Support Oscillator "custom" type.
- 20130218
- Support decodeAudioData(). Note that only support wav-format and run on same thread.
- 20130217
- ChannelSplitter / ChannelMerger is implemented. Note that the number of active channels are restricted to 1 or 2.
- 20130215
- Tentative implementaion of ConvolverNode, that replacing to Convoluton+Delays.
- 20130212
- Support AudioParam automation / Support AudioBufferSourceNode loop / Flash source is integrated to a mxml-file.
- 20130211
- DynamicsCompressorNode is implemented but has a little different from Chrome's implements
- 20130210
- AudioBufferSourceNode is added / Improved AudioNode lifetime management
- 20130207
- Fix WaveShaperNode. Simplified PannerNode implement
- 20130206
- Support fallbacking to flash for MSIE/Opera (monaural only)
- 20130206
- AnaliserNode is implemented
- 20130205
- BiquadFilter Characteristics are adjusted to Chrome's WebAudioAPI
- Fix filters other than LPF/HPF/BPF cannot work normal.
- 20130204
- First Release
WebAudio API Polyfill fallbacking to AudioDataAPI/Flash
WAAPISimは今後普及する予定のブラウザの音声API「Web Audio API」を「Audio Data API」またはFlashを利用してシミュレートします。また、WebAudio APIが使えるブラウザでも最新のメソッド名をサポートしていない場合、新しい名前のノード作成やstart/stopのメソッドが使えるように追加します (これに該当するのはSafari6です)。
WAAPISimは WebAudioAPI=>AudioDataAPI=>Flashの順に使用できるAPIを選択します。
各ブラウザでの動作は次のようになります。
- Chrome : WebAudioAPIがサポートされていますので何もしません
- Safari(6) : WebAudioAPIがサポートされていますが、メソッド名が古いため最新のメソッド名を追加します (ノード作成、start/stop、setTargetAtTime)
- Firefox : Firefoxがサポートする「AudioDataAPI」を利用してシミュレートします
- Opera : Flashを利用してシミュレートします
- MSIE : Flashを利用してシミュレートします。またIE9では音声アプリで多用するFloat32Arrayがサポートされていないため無理やり普通のArrayに割り当てます
Web Audio APIの解説も書いていますのでどうぞ:Web Audio APIの解説
下の動画はaikeさん作のWebAudioAPIを使用するシンセ「WebAudioSynth」をWAAPISimを使ってFirefox上で動かしています。
waapisim.js
waapisim.swf
swfのソース:waapisim.mxml
MITライセンスで公開します。
制限事項など
WAAPISimはまだ完全なものではなく、WebAudioAPIの一部だけが実装されています。
- 各ノードで使用できるチャンネルは2チャンネル(Stereo)までです
- OscillatorNode / ChannelSplitterNode / ChannelMergerNode / AudioBufferSourceNode / WaveShaperNode / GainNode / BiquadFilterNode / DelayNode / AnalyserNode : 実装されています
- DynamicsCompressorNode : 大体支障はない程度には実装していますがハードニー固定など少し特性が違います。
- PannerNode : 簡易的な実装をしています。リスナーポジションは固定でx-z平面の2dで解釈します
- ScriptProcessorNode : 実装されていますが入力を使用する場合はバッファサイズの上限は1024までになっています。出力のみ使用する場合は制限ありません
- ConvolverNode : コンボリューション処理は重すぎるため仮実装しています。IRの先頭1000サンプル程度だけコンボリューションをかけて後続はディレイに置き換えますのでものによっては似ても似つかない効果になります
- ArrayBufferからのcreateBufferは.wavフォーマットのみ対応します
- Nodeからk-rateのAudioParamへの制御は1/1024サンプル単位でしか行いません。a-rateパラメータはサンプル毎に処理します。
- HTMLに組み込まれたリソースやStreamを扱うMediaElementSourceNode / MediaStreamAudioSourceNode / MediaStreamAudioDestinationNodeには対応していません
テスト用ページ
実装したノードのテストページを実験用に作りました。各ブラウザで動作を比較できます
- ScriptProcessor/Oscillator/WaveShaper/Filter/Analyser
- DynamicsCompressor
- AudioParam Automation
- ChannelSplitter / ChannelMerger
- Oscillator-custom waveform
GitHubにも置きました:https://github.com/g200kg/WAAPISim
GitHub上でWebAudioAPIアプリの幾つかをフォークしてサンプルページを準備しています
- MIDIDrums (by Chris Wilson + (Chris Rogers and Ken Moore)) with WAAPISim
- WebAudioSynth (by aike) with WAAPISim
使い方
waapisim.jsを適当なディレクトリにおいてWebAudioAPIの使用を開始する前に読み込んでください。
またFlashフォールバックを使用する場合は waapisim.swf をwaapisim.jsと同じディレクトリに配置してください。
<script type="text/javascript" src="waapisim.js"></script>
履歴
- 20130226
- BugFix: DelayNode がOpera/MSIEで正常動作していなかったので修正
- 20130224
- WebAudioAPIをサポートしているがメソッド名が古いブラウザ向けに最新のメソッド名を追加するようにした
- 20130221
- Oscillatorのカスタム波形をサポート。
- 20130218
- AudioContext.decodeAudioData()をサポート。ただし対応は.wavのみで実質Sync動作です。
- 20130217
- ChannelSplitter / ChannelMergerを実装。モノラルまたはステレオのデータしか扱えませんので、動作するチャンネル数は2までになります。
- 20130215
- Convolverをディレイに置き換えて仮実装
- 20130212
- AudioParamのオートメーションに対応/AudioBufferSourceNodeのloopに対応/Flashのソースをmxml+asからmxmlだけにしました
- 20130211
- DynamicsCompressorNodeをとりあえず実装。少し特性違います
- 20130210
- AudioBufferSourceNodeを追加 / AudioNodeのライフタイム管理を改善
- 20130207
- WaveShaperがちゃんと動作するように修正。PannerNodeの簡易的な実装。
- 20130206
- Flashへのフォールバックをサポートしました。MSIE/Operaでも動作するようになります(ただしモノラルです)
- 20130206
- AnalyserNodeを実装しました
- 20130205
- BiquadFilterの特性をChromeのWebAudioAPIにあわせました
- LPF/HPF/BPF以外のフィルターが正常動作していなかったのを修正しました
- 20130204
- ファーストリリース