Javascript HTML5音频曲目更改速度过慢

Javascript HTML5音频曲目更改速度过慢,javascript,jquery,html,html5-audio,webvtt,Javascript,Jquery,Html,Html5 Audio,Webvtt,我有一个页面,其中嵌入了mp3音频文件以及相关的.vtt文件,其中包含我循环浏览并加载到页面上div的字幕 我有一个简单的fs函数,可以在音频播放时更改相关字幕的格式-想象一下它是一个卡拉OK播放器,在需要演唱时突出显示每一行: trackData.oncuechange = function(e) { var cue = this.activeCues[0]; if(cue){ updateSubs(cue); // Loops cues, lowlights

我有一个页面,其中嵌入了mp3音频文件以及相关的
.vtt文件,其中包含我循环浏览并加载到页面上div的字幕

我有一个简单的fs函数,可以在音频播放时更改相关字幕的格式-想象一下它是一个卡拉OK播放器,在需要演唱时突出显示每一行:

trackData.oncuechange = function(e) {
    var cue = this.activeCues[0];
    if(cue){
        updateSubs(cue); // Loops cues, lowlights old cues, highlights current cue
    }
}
我注意到格式更新偶尔会出现不一致的延迟,这对我来说是不可取的。在将音频播放器计时发布到控制台,试图找出可能的原因时,我得到了以下示例:

Subtitle1 > Cue Time: 13.000 | Event fired @: 13.213424 | Diff: +0.213424 | Noticable
Subtitle2 > Cue Time: 17.109 | Event fired @: 17.209143 | Diff: +0.100143 | Okay
Subtitle3 > Cue Time: 27.004 | Event fired @: 27.215233 | Diff: +0.211233 | Noticable
Subtitle4 > Cue Time: 30.477 | Event fired @: 30.479385 | Diff: +0.002385 | Great
Subtitle5 > Cue Time: 34.151 | Event fired @: 34.217562 | Diff: +0.066562 | Good
Subtitle6 > Cue Time: 39.748 | Event fired @: 39.966155 | Diff: +0.218155 | Noticable
Subtitle7 > Cue Time: 41.601 | Event fired @: 41.714627 | Diff: +0.113627 | Okay
在网上搜索时,我发现对oncuechange的一些引用每秒只检查几次——如果是这样的话,那么我看到的较长延迟可能是与系统时钟相关的坏定时的情况,并解释了不一致性

虽然我不需要绝对完美的时间安排来执行事件,但如果我能更频繁地检查事件(比如每0.1/s检查一次),以减少不可预测性,那就太好了

那么问题是:有没有办法提高事件检查的频率?或者B.以不同的方式执行此操作,以便事件计时更准确

提前感谢您的任何建议或建议


编辑:2018年10月1日-附加信息和添加html5/jQuery标记

受此启发,我尝试了一个页面计时器,用于检查活动提示ID的更改并将结果发布到控制台:

var cueTick = window.setInterval(function() { cueTest() }, 1);
var currentCue = '';
var trackData = null;
var media = document.getElementById('media');

function cueTest() {
    if(tD == null) {
        trackData = document.getElementById('lyrics').track;
    } else {
        if(!media.paused) {
            var cue = trackData.activeCues[0];

            if(cue) {
                if(cue.id != currentCue) {
                    console.log('Cue change: ' + cue.id + ' @' + media.currentTime);
                }   
                currentCue = cue.id;
            }   
        }
    }
}
在这个测试中,大多数新的测试日志都是在oncuechange事件之后立即出现的。偶尔,它会击败onquechange,但只是一小部分,还不足以产生影响(见最后一个副标题计时)。我最初将cueTick延迟设置为100,然后将其降至50、10,最后为1,结果没有任何明显差异:

Subtitle1 > Cue Time: 13.000 | Event fired @: 13.210600 | CueTick @: +13.212663
Subtitle2 > Cue Time: 17.109 | Event fired @: 17.203449 | CueTick @: +17.207203
Subtitle3 > Cue Time: 27.004 | Event fired @: 27.211385 | CueTick @: +27.213652
Subtitle4 > Cue Time: 30.477 | Event fired @: 30.706449 | CueTick @: +30.708527
Subtitle5 > Cue Time: 34.151 | Event fired @: 34.211961 | CueTick @: +34.214185
Subtitle6 > Cue Time: 39.748 | Event fired @: 39.956704 | CueTick @: +39.958703
Subtitle7 > Cue Time: 41.601 | Event fired @: 41.712700 | CueTick @: +41.714778
Subtitle8 > Cue Time: 43.944 | Event fired @: 43.963283 | CueTick @: +43.962736

所以仍然没有进步,或者至少不足以考虑实施这种不同的方法。还有其他建议吗

提前谢谢