【问题标题】:Javascript audio (possibly Web Audio) setting exact timeJavascript 音频(可能是 Web 音频)设置准确时间
【发布时间】:2015-08-23 05:07:09
【问题描述】:

我有两首歌曲,我都需要同时播放(降低 AudioBuffer 的索引,我通过除以采样率将其转换为秒),问题是,执行 song1.play();song2.play(); 需要大约 200 毫秒(使用 console.time)来执行,这会影响时间 - 有没有使用缓冲区或一些 JS 魔法来同时播放它们?

【问题讨论】:

标签: javascript audio web-audio-api


【解决方案1】:

使用网络音频,可以指定AudioBufferSources的开始时间:

https://developer.mozilla.org/en-US/docs/Web/API/AudioBufferSourceNode/start

【讨论】:

    【解决方案2】:

    我做了一个简单的页面并测试了它。

    <html>
    <head>
    <meta charset="utf-8" />
    </head>
    <body>
    
    <audio id="player1" controls style="width: 400px;">
    <source type="audio/mpeg" src="http://127.0.0.1:8080/1.mp3"></source>
    </audio>
    
    <audio id="player2" controls style="width: 400px;">
    <source type="audio/mpeg" src="http://127.0.0.1:8080/1.mp3"></source>
    </audio>
    
    <script>
        var plyr1 = document.getElementById('player1');
        var plyr2 = document.getElementById('player2');
    </script>
    </body>
    </html>
    

    我将plyr1.play(); plyr2.play(); 放入控制台(firefox)并按回车键。这些声音之间没有区别!我不知道你的问题是什么,但你可以试试plyr1.autoplay = true; plyr2.autoplay = true;,这不是一个功能,所以经验说应该花更少的时间;)
    啊哈,如果您使用new Audio(),您应该注意使用new 关键字会导致javascript 运行缓慢。避免它并改用document.createElement('audio')

    【讨论】:

    • 如果您拨打电话audio1.play(); audio2.play(),无论您使用new Audio 还是document.createElement,您的假设对我来说都不正确,自动播放会触发play当文件以canplay 状态缓冲时的方法,因此 IMO js 或 html 属性不会改变任何内容。
    • @Kaiido 我应该说in matter of time it differs。假设您的第二个词是正确的(但我不认为设置对象的属性可以触发方法!可以吗?它与 getter 或 setter(访问器)有关吗?提出了新问题......),我没有看到任何这些声音之间的差异。我不知道他为什么会出现错误的播放声音。
    • 我在您的链接中没有看到任何关于时间的信息(您应该避免使用 w3School)。但是new Audio()creator和document.createElement方法都是同步的,所以如果你调用这两个对象的play方法,在这些对象创建之后,不管是怎么创建的。现在,请注意我使用了术语attribute而不是属性,原因是:HTML 具有属性,当浏览器解析该属性时,会设置所创建对象的属性。在 àautoplay` 属性的情况下,它只是一个布尔值,在音频的内部 canplay 事件中进行检查。
    • 应该验证,但我认为 play() 方法被推迟到音频元素的 playState 设置为 'canplay' 所以再一次,没关系。现在至于为什么 OP 会出现这些问题,可能有很多事情是您不会遇到的,例如远程服务器上的加载时间,甚至 a chrome bug which doesn't cache audios 等等。
    猜你喜欢
    • 2017-05-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-04-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多