Can';不要避免javascript音频中的延迟

Can';不要避免javascript音频中的延迟,javascript,audio,delay,Javascript,Audio,Delay,我不知道这是否一个尚未解决的问题 好的,我有一个非常简单的测试代码: var audio = new Audio("0.mp3"); audio.oncanplay = function() { audio.play(); setTimeout(function() { audio.pause(); }, 30); } 我打算做的是在很短的时间内播放我的声音。 我确信音频(中C音符)在0:00:00开始。 请注意,我使用oncanplay事件来确保在尝试

我不知道这是否一个尚未解决的问题

好的,我有一个非常简单的测试代码:

var audio = new Audio("0.mp3");
audio.oncanplay = function() {
    audio.play();
    setTimeout(function() {
        audio.pause();
    }, 30);
}
我打算做的是在很短的时间内播放我的声音。
我确信音频(中C音符)在0:00:00开始。
请注意,我使用
oncanplay
事件来确保在尝试播放音频时加载音频

我的问题是我得到了不可预测的结果。有时(实际上,大多数时候),根本听不到音频。其他时候,可以听到音频,但不总是在同一时间段内

我知道Javascript可能很慢,但我想知道,例如在第一种情况下,如果音频还没有播放,为什么会设置
超时

这是一个已知的问题吗?有可能更好地控制音频吗


-谢谢

避免使用setTimeout,因为setTimeout不准确,可能会导致(如您的情况)竞争状况。使用“timeupdate”事件跟踪进度。此处将播放歌曲并在7秒后自动暂停:

var audio = new Audio("0.mp3");
audio.oncanplay = function() {

  audio.play();
  audio.addEventListener('timeupdate', function() {
    console.log(audio.currentTime.toFixed());
    if ( audio.currentTime >= 7 ) audio.pause();
  });

} 

30毫秒的超时时间非常快,这是人类可以感知的吗?是人类可以感知的。在@KostasX回答之后,我得到了我想要的答案KostasX的回答包括7秒的停顿,这是7000毫秒,这是人类可以感知的,JavaScript很慢,我们的感知也很慢……除非你是蜘蛛侠汉克斯!这解决了我的问题。我可以运行它20次,它总是播放相同的东西。