如何每 10 毫秒滚动一次数组并验证元素是否对应于当前时间值?

How to scroll an array every 10 ms and verify if an element correspond to the current time value?

我有一个音频文件和一个数组,其元素中有一个浮点值(四舍五入为 10 毫秒),对应于播放音符的时刻。在播放音频文件时,我想在控制台中写入,当音频的当前时间值对应于数组中的元素之一时,即确切的元素。 我通过使用 setInterval(将间隔设置为 10 毫秒)来完成此操作,但我的问题是有时我的函数将同一元素写入零、两次或三次。我希望函数准确地写入每个元素 1 次。

我已经尝试过更改间隔,但我总是遇到同样的问题。

...

//events_num is my array
//audio.currentTime is the time of the audio file while playing

function write() {
  for(var i=0; i<events_num.length; i++) {
    if(events_num[i] >= (audio.currentTime-0.005) && events_num[i] < (audio.currentTime+0.005)) {
      console.log(events_num[i]);
      break;
    }
  }
}

setInterval(write, 10);

...

如果 events_num = [3.42, 3.98, 3.99, 4.60, 5, 5.57] 并且我从 00:00 开始我的音频,我希望控制台中的输出是: 3.42、3.98、3.99、4.60、5、5.57 而不是(例如) 3.42(2), 3.98, 3.99(3), 4.60, 5.57

嘿,我会使用 "lazy" 方法并将时间戳保存为一个简单的结构,如

{
  timestamp: number,
  used: boolean
}

所以一旦时间 published/used 系统可以将其标记为不再使用它。 因为问题出在时间和你是否在使用。