4

每次我尝试在反馈延迟的情况下运行我的代码时,我的 Chrome 浏览器都会崩溃,我会看到蓝屏:
“糟糕,快!
显示此网页时出现问题。要继续,请重新加载或转到另一个页面。”

我的代码使用这种结构:

//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 回答