JavaScript中音频文件计时不准确

JavaScript中音频文件计时不准确,javascript,audio,Javascript,Audio,我在玩JavaScript音频时注意到,当我计时一个音频文件时,返回的数字并不等于音频文件的长度。我使用的代码是这样的: var audio = new Audio("sound.mp3"); var start, stop; audio.addEventListener("ended", function() { stop = performance.now() - start; }); start = performance.now(); audio.play(); 当sound

我在玩JavaScript音频时注意到,当我计时一个音频文件时,返回的数字并不等于音频文件的长度。我使用的代码是这样的:

var audio = new Audio("sound.mp3");
var start, stop;
audio.addEventListener("ended", function() {
    stop = performance.now() - start;
});

start = performance.now();
audio.play();

当sound.mp3只有1000毫秒长时,我将从
stop
返回一个比音频文件长度大50到350毫秒的值。有人知道为什么会这样吗?播放音频文件真的需要那么长时间吗?

MP3文件不准确。MP3在固定帧大小的时域中工作。典型的帧大小是26毫秒。这是MP3的最小时间分辨率

你的音频文件并不完全是1秒长,除非你有一些非常奇怪的采样率,它可以被平均分割成1秒。。。如果你有那个,它无论如何在MP3中也不会工作

下一个问题是启动MP3音频。MP3音频不会在第一帧立即启动。不同的编码器使用不同的填充量。播放“无间隙”MP3文件也有同样的问题

最后,您的浏览器并不总是在播放音频。通常都有一个底层库来处理它,有时这些库与浏览器的连接不太好。浏览器可能知道音频何时开始和何时停止,但无法准确知道。在浏览器中处理消息时,音频播放可能已经发生在半秒钟前。有些设备甚至有硬件编解码器,在减轻CPU负载的同时增加了一些复杂性

如果音频文件较长,则可能存在时钟漂移问题。音频可能以44.1kHz的频率录制,但您的计算机可能以44.095kHz左右的频率播放。随着时间的推移,这种差异逐渐增加


基本上,你永远不可能真正知道一个数字音频文件有多长。像MP3这样的有损格式使这变得更加复杂。无法可靠查找的远程文件意味着播放器必须根据文件大小和平均比特率猜测文件的长度。即使解决了所有问题,时钟漂移仍然会产生一些影响,如果不与普通时钟同步(如GPS信号,但由于大气原因也不准确),就无法消除这些影响。

MP3文件不准确。MP3在固定帧大小的时域中工作。典型的帧大小是26毫秒。这是MP3的最小时间分辨率

你的音频文件并不完全是1秒长,除非你有一些非常奇怪的采样率,它可以被平均分割成1秒。。。如果你有那个,它无论如何在MP3中也不会工作

下一个问题是启动MP3音频。MP3音频不会在第一帧立即启动。不同的编码器使用不同的填充量。播放“无间隙”MP3文件也有同样的问题

最后,您的浏览器并不总是在播放音频。通常都有一个底层库来处理它,有时这些库与浏览器的连接不太好。浏览器可能知道音频何时开始和何时停止,但无法准确知道。在浏览器中处理消息时,音频播放可能已经发生在半秒钟前。有些设备甚至有硬件编解码器,在减轻CPU负载的同时增加了一些复杂性

如果音频文件较长,则可能存在时钟漂移问题。音频可能以44.1kHz的频率录制,但您的计算机可能以44.095kHz左右的频率播放。随着时间的推移,这种差异逐渐增加


基本上,你永远不可能真正知道一个数字音频文件有多长。像MP3这样的有损格式使这变得更加复杂。无法可靠查找的远程文件意味着播放器必须根据文件大小和平均比特率猜测文件的长度。即使解决了所有问题,时钟漂移仍然会产生一些影响,如果不与普通时钟同步(如GPS信号,但由于大气原因也不准确),就无法消除这些影响。

MP3文件不准确。MP3在固定帧大小的时域中工作。典型的帧大小是26毫秒。这是MP3的最小时间分辨率

你的音频文件并不完全是1秒长,除非你有一些非常奇怪的采样率,它可以被平均分割成1秒。。。如果你有那个,它无论如何在MP3中也不会工作

下一个问题是启动MP3音频。MP3音频不会在第一帧立即启动。不同的编码器使用不同的填充量。播放“无间隙”MP3文件也有同样的问题

最后,您的浏览器并不总是在播放音频。通常都有一个底层库来处理它,有时这些库与浏览器的连接不太好。浏览器可能知道音频何时开始和何时停止,但无法准确知道。在浏览器中处理消息时,音频播放可能已经发生在半秒钟前。有些设备甚至有硬件编解码器,在减轻CPU负载的同时增加了一些复杂性

如果音频文件较长,则可能存在时钟漂移问题。音频可能以44.1kHz的频率录制,但您的计算机可能以44.095kHz左右的频率播放。随着时间的推移,这种差异逐渐增加

基本上,你永远不可能真正知道一个数字音频文件有多长。像MP3这样的有损格式使这变得更加复杂。无法可靠查找的远程文件意味着播放器必须根据文件大小和平均比特率猜测文件的长度。即使解决了所有问题,时钟漂移仍然会产生一些影响,如果不与普通时钟同步(如GPS信号,但由于大气原因也不准确),就无法消除这些影响