我最喜欢 MOD 格式的事情之一是能够循环回到歌曲中的任何给定点,这使其非常适合具有“前奏”和“主循环”的歌曲。
当然MP3做不到这一点。
到目前为止,我已经做了这样的事情:
<audio src="/path/to/song.mp3" onEnded="this.currentTime = 12.345;"></audio>
其中浮点值是主循环开始的时间。
虽然这有效,但当音频重新启动时,会出现明显的几分之一秒的暂停。我可以通过将目标时间设置得比应有的时间提前一点来减轻这种暂停的影响,因此节拍至少在时间上保持更接近,但这并不理想。
我能想到的主要替代方案是手动循环音频文件(例如,在 Audacity 中通过复制粘贴)来生成一首比最可能需要的长度更长的歌曲,但问题是它会导致浪费了大量的硬盘空间和带宽,而且解决不了人们喜欢一首歌就停下来听很久的问题。
所以我想知道是否有任何方法可以循环 MP3 流。如果我正确理解格式,我应该能够确定主循环在文件中的哪个位置(以字节为单位)开始(以秒为单位),因此理论上我可以构造一个无限循环的流。但是,HTM5 音频会支持这样的流吗?
尝试每次测量延迟:
function playSeamless(clip, next) {
if(!next) {
next = clip.cloneNode(true);
next.controls = false;
}
var start = Date.now();
clip.play();
setTimeout(function() {
var time = (Date.now() - start) / 1000;
var position = clip.currentTime;
var delay = time - position;
setTimeout(function() {
// Set desired currentTime on next here and adjust delay above
playSeamless(next, clip);
}, (clip.duration - clip.currentTime - delay * 2.35) * 1000 | 0);
}, 200);
}
playSeamless(yourAudioClip);
更好,但不完全准确,所以我需要调整* 2.35
或者做减法什么的。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)