4

フィードバック遅延を使用してコードを実行しようとするたびに、Chrome ブラウザーがクラッシュし、
「ああ、スナップ!
この Web ページの表示中に問題が発生しました。続行するには、リロードするか、別のページに移動してください。」

私のコードはこの種の構造を使用しています:

//Create any kind of input (only to test if it works or not);
var oscillator = context.createOscillator();

//Create the delay node and the gain node used on the feedback
var delayNode = context.createDelay();
var feedback = context.createGain();

//Setting the feedback gain
feedback.gain.value = 0.5;

//Make the connections
oscillator.connect(context.destination);
oscillator.connect(delayNode);
delayNode.connect(feedback);
feedback.connect(delayNode);
delayNode.connect(context.destination);//This is where it crashes
4

1 に答える 1

1

遅延ノードの後に​​パナー ノードを配置しましたか?

同様の問題がありました。
私の場合、それはパナー ノードのバグのようなものでした。

何時間もデバッグした後、次のページを見つけました:
http://lists.w3.org/Archives/Public/public-audio-dev/2013Oct/0000.html

遅延後にパナーノードを接続すると問題が発生すると言われています。
コードが実際にこのようなものである場合、クラッシュします。

var pannerNode = context.createPanner();
delayNode.connect(pannerNode);
pannerNode.connect(context.destination);

私のプログラムはこのようなコードでした。プログラムから panner ノードを削除すると、問題なく動作しました。

したがって、同じ状況にある場合は、自分で panner を作成することで問題を回避できます。
これは、私が自分のプログラム用に (CoffeeScript で) 書いたサンプルです。

class @Panner
constructor: (@ctx) ->
    @in = @ctx.createChannelSplitter(2)
    @out = @ctx.createChannelMerger(2)
    @l = @ctx.createGain()
    @r = @ctx.createGain()
    @in.connect(@l, 0)
    @in.connect(@r, 1)
    @l.connect(@out, 0, 0)
    @r.connect(@out, 0, 1)
    @setPosition(0.5)

connect: (dst) -> @out.connect(dst)

setPosition: (@pos) ->
    @l.gain.value = @pos
    @r.gain.value = 1.0 - @pos

これがお役に立てば幸いです。

于 2014-01-13T05:39:51.303 に答える