Javascript音频(可能是Web音频)设置精确时间

Javascript音频(可能是Web音频)设置精确时间,javascript,audio,web-audio-api,Javascript,Audio,Web Audio Api,我有两首歌,我都需要在同一时间播放(在音频缓冲区的索引下,我用采样率除以将其转换为秒),问题是,执行song1.play()和歌曲2.play()需要大约200毫秒(使用console.time)才能执行,这会延迟时间-是否需要使用缓冲区或一些JS魔术来同时播放它们 我做了一个简单的页面并进行了测试 <html> <head> <meta charset="utf-8" /> </head> <body> <audio id="

我有两首歌,我都需要在同一时间播放(在音频缓冲区的索引下,我用采样率除以将其转换为秒),问题是,执行
song1.play()
歌曲2.play()需要大约200毫秒(使用
console.time
)才能执行,这会延迟时间-是否需要使用缓冲区或一些JS魔术来同时播放它们

我做了一个简单的页面并进行了测试

<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>

var plyr1=document.getElementById('player1');
var plyr2=document.getElementById('player2');
我放置
plyr1.play();plyr2.play(),然后按enter键。这些声音之间没有区别!我不知道你的情况有什么问题,但你可以给出
plyr1.autoplay=true;plyr2.autoplay=true一次尝试,这不是经验所说的功能,应该花费更少的时间;)

啊哈,如果您使用的是
newaudio()
,您应该注意使用
new
关键字会导致javascript变慢。避免使用它,而是使用
document.createElement('audio')

对于web audio,您可以指定AudioBufferSources的开始时间:


可能是hm的重复,我尝试了这个答案,但当我执行
song1.play()
时,只有song1播放?是的,有了WebAudio API,您就可以使用了。如果您进行调用
audio1.play(),请选中此选项;audio2.play()
如果您使用了
new Audio
document.createElement
也没关系,而且我觉得您的假设不正确,当文件缓冲状态为
canplay
时,autoplay将触发
play
方法,因此IMO js或html属性不会改变任何内容。@kaido我应该这么说。假设你的第二个词是真的(但我不认为设置一个对象的属性可以触发一个方法!可以吗?这与getter或setter(accessors)有关吗?提出了一个新问题…),我看不出这些声音之间有什么区别。我不知道为什么他在播放声音时出现了错误。我在你的链接中没有看到任何关于时间的内容(你应该避开学校)。但是
newaudio()
creator和
document.createElement
方法都是同步的,因此如果在创建这些对象之后调用这两个对象的
play
方法,那么它们是如何创建的就无关紧要了。现在,请注意,我使用了术语
attribute
而不是property,原因是:HTML有attribute,当浏览器解析它时,它会设置所创建对象的属性。在a utoplay`属性的情况下,它只是一个布尔值,在音频的内部
canplay
事件中被检查。应该对它进行验证,但我认为
play()
方法被推迟,直到音频元素的playState设置为
'canplay'
为止,所以再次强调,这无关紧要。至于OP为什么会有这些问题,可能有很多问题是你不会遇到的,比如远程服务器上的加载时间等等。