[编辑问题以澄清用户的观点。我在下面的评论已被删除并包含在此处。]
我有一个很长的声音文件(mp3),110 秒。在这个文件的开头,音乐是快乐的,但到最后它变得越来越险恶。注意:音频将在整个过程中以正常速度播放。
我有一个可变的“var 张力”;它的值介于 0 和 1 之间,例如 0.35。它衡量了游戏中令人毛骨悚然的事情的发生程度。张力值 = 0.0 表示其安全,张力值 = 0.5 表示有一点麻烦酝酿,张力值 = 1.0 表示便便正在撞击风扇。但是可以实现 0.0 到 1.0 之间的所有十进制值。它取决于您与危险的距离或是否有人在追赶您。
以下是程序开始时在内存中创建的全局音频元素:
var g_TensionSound = new Audio();
g_TensionSound.src = "mysoundfile.mp3";
我一直在等待 mp3 文件完全加载。
每一秒我都会使用一个计时器事件来调用以下代码:
g_TensionSound.currentTime = 5.0 + 100 * tension;
if(g_TensionSound.paused) g_TensionSound.play();
所以例如第一次触发定时器事件时,紧张= 0;,所以它在音乐文件中播放友好的声音(即在5秒标记处)。然后下次触发计时器事件时,玩家已经接近一些麻烦并且紧张度已经上升到紧张度= 0.25;所以这次将播放文件中 30 秒 (5 + 张力 * 100) 标记处的音乐片段。
不幸的是,这会产生非常小的结果,在切换到新的 currentTime 时会有轻微的延迟。有谁知道这件事,或者如何解决它?