【问题标题】:Web Audio: No sound in right channel网络音频:右声道没有声音
【发布时间】:2013-02-18 19:24:58
【问题描述】:

我正在尝试使用 Web 音频 API 创建自定义平移控件,但使用通道拆分器和合并节点无法从正确的通道发出任何声音:

var context = new webkitAudioContext(),
    destination = context.destination,
    osc = context.createOscillator(),
    gainL = context.createGainNode(),
    gainR = context.createGainNode(),
    splitter = context.createChannelSplitter(2),
    merger = context.createChannelMerger(2);

osc.frequency.value = 500;

osc.connect(splitter);

splitter.connect(gainL, 0);
splitter.connect(gainR, 1);

gainL.connect(merger, 0, 0);
gainR.connect(merger, 0, 1);

osc.noteOn(0);

gainL.gain.value = 0.1;
gainR.gain.value = 0.5;

osc.noteOff(2);

merger.connect(destination);

我在这里遗漏了一些明显的东西吗?这里有上面代码的 JSBin 预览:http://jsbin.com/ayijoy/1/

我正在运行 Chrome v24.0.1312.57,以防万一。

【问题讨论】:

    标签: javascript html web-audio-api


    【解决方案1】:

    我最好的猜测是发生这种情况是因为振荡器输出单声道信号。尝试使用立体声源,您可能会更幸运。

    编辑:这里是如何平移“单声道”信号(绕过分离器,因为没有立体声信号要分离,并将振荡器直接连接到两个增益。然后在调整后将两个单声道信号连接到合并器每个通道的增益)http://jsbin.com/ayijoy/16/

    【讨论】:

    • 这是一个很好的解决方案,谢谢;事实证明我毕竟遗漏了一些明显的东西。
    • 尽管如此,我认为在将单声道源连接到立体声目标时,会自动完成从单声道 -> 立体声的上混。这里的规范不是很清楚:w3.org/TR/webaudio/#UpMix 考虑将振荡器直接连接到目标节点:声音将在 L 和 R 通道中播放,建议进行自动上混;我原以为在我的问题场景中也会发生同样的情况......
    • 一般来说,上混确实会自动发生。但是,Splitter 节点是让你直接弄乱信号的,所以它不会。从规范中:'[AudioSplitterNode] 有一个输入,以及多个“活动”输出,这些输出等于输入音频流中的通道数。 ...任何非“活动”的输出都将输出静音,通常不会连接到任何东西。'
    • 谢谢,克里斯 - 在您发表评论之前不久,我重新阅读了规范的 AudioSplitterNode 部分;有时这是木与木的情况:盯着一个问题看足够长的时间,很容易忽略最初的问题!
    • 不是真的,@Asher,您可以将一个节点连接到具有多个目的地的单个输出。还是您的意思是有其他问题?
    猜你喜欢
    • 2023-03-13
    • 2022-12-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多