【问题标题】:Call to AudioBufferSourceNode.start() not playing sound调用 AudioBufferSourceNode.start() 不播放声音
【发布时间】:2017-10-09 22:49:59
【问题描述】:

我的小提琴中的代码试图做的是

  • 播放“标题”声音

  • 随后播放主体/主要内容声音,该声音应有背景音轨支持

  • 最后,播放结尾/页脚声音

我的需求与此线程 Mixing two audio buffers, put one on background of another by using web Audio Api 略有相似,但此处和此处略有不同,尽管我不了解该线程中的所有承诺。但是,我相信我的代码被一个小小的疏忽所阻碍。到目前为止,我无法测试列出的哪些步骤是成功的,因为对 AudioBufferSourceNode.start() 的调用不会在扬声器中启动播放行为。

我还检查了处理或生成的 ArrayBuffers 中有哪些数据。它出现在每个点/索引处,数组包含 0(这可能意味着它充满了白噪声,但无论如何都应该播放)。 您可能会观察到我有时会使用 OfflineAudioContext 实例。我打算将最终缓冲区通过管道传输到将其导出为 MP3 格式的库。

代码可以在fiddle 找到。您可以在方便时使用任何本地托管的音频文件

【问题讨论】:

    标签: concatenation html5-audio web-audio-api arraybuffer


    【解决方案1】:

    首先,您不能在OfflineAudioContext 上调用createMediaElementSource;你必须使用AudioContext。其次,您可能应该只创建和使用一个AudioContext。

    【讨论】:

    • 我所见过的例子都没有展示如何用合理的数据填充缓冲区,即不是白噪声。这就是我使用 createMediaElementSource 的原因。另一个原因是曲目不是sn-ps,而是持续时间超过2分钟的文件。然后我使用 OfflineAudioContext 因为我需要收集缓冲区并导出到 MP3 格式库。对start() 方法的调用只是暂时的。现在我想听听我是否走在正确的轨道上,双关语。如果它们都继承自同一个 BaseAudioContext 接口,为什么缺少一个 createMediaElementSource 方法?
    • 查看规范:webaudio.github.io/web-audio-api/#BaseAudioContext; BaseAudioContext 上没有定义createMediaElementSource。它只为 AudioContext 定义:webaudio.github.io/web-audio-api/#AudioContext
    • 并且 createMediaElementSource 没有为 OfflineAudioContext 定义,因为它可能是我们无法离线寻找或消费数据的媒体元素(例如流媒体源),所以它没有意义 - 并且因此不可用。
    • 另外,缓冲区源节点上的 .buffer 应该始终是 AudioBuffer,而不是 ArrayBuffer。
    • 道歉。由于电源不稳定,我无法早点回复。我已经重构并且新代码抛出了 2 个错误——第一个是关于提供给 createBuffer() 的帧小于 0。第二个错误表示 setValueCurveAtTime 中的值与 setValueAtTime 中的值重叠,所以我做了一个新的小提琴添加所有虽然我无法测试,因为我现在在移动设备上,但获得了一个 arrayBuffer。但如果它有效,那意味着我将无法控制效果的持续时间。小提琴 1:fiddle.net/ka830Lqq。小提琴 2:fiddle.net/ka830Lqq/1。非常感谢
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-03-20
    • 2011-02-25
    • 2020-02-15
    • 2015-12-22
    • 2022-01-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多