RSS Twitter Facebook

2017/03/01 (2017年03月 のアーカイブ)

WebAudio API で簡単にノイズを作りたかったのに...

この間こんな記事を書いたのですが... WebAudio API でノイズを作る小技

FM音源なんかでよく使われる、オシレータに自己フィードバックを掛けてノイズを作る方法なんですが、実はこれ、Chrome と Edge では快調に動くのですが Firefox では動かないのですよ。まあ、WebAudio API もまだまだ枯れたAPIではないし、こういうコーナーケース的な使い方ではよくある事くらいに思っていたのですけどね...

このようにノードの出力から入力ではなくパラメータに接続を戻すような場合の振る舞いについてWeb Audio APIの仕様書ではちゃんと明記されてはいないのだけど、Editor's Draft にあるノードの処理オーダーの説明などからの推察としては、これは「動かない」のが仕様として正しいと判断するのが妥当かな、という結論に至ってしまった。

という事でこの技が胸を張って使えなくなってしまった。これを確実に動作させるにはループ内にDelayNodeが入っていることが必要で、仕様に従うと下の図のような感じになります。出てくる音は基本的に同じなのだけど、簡単にノイズを作るはずなのにノード3つ使うのではうまみがないです。これならバッファに事前にレンダリングしておいて BufferSourceNode を使うほうが良さそう。

あー、残念だ。なお、本来の仕様ではこのような接続をした時点でエラーを吐くべき、となっているので、Firefox では今は音が出ないだけだけどその内エラーを吐いて止まるようになるかも知れません。あー残念だ。

DelayNode入り自己フィードバック

Posted by g200kg : 2017/03/01 17:47:29