10

我最喜欢 MOD 格式的一件事是能够循环回歌曲中的任何给定点,使其非常适合具有“前奏”和“主循环”的歌曲。

当然,MP3 做不到这一点。

到目前为止,我已经做了这样的事情:

<audio src="/path/to/song.mp3" onEnded="this.currentTime = 12.345;"></audio>

其中浮点值是主循环开始的时间。

虽然这有效,但音频重新启动时会出现明显的几分之一秒的停顿。我可以通过将目标时间设置得稍微提前一点来减轻这种暂停的影响,因此节拍至少保持更接近的时间,但这并不是很理想。

我能想到的主要替代方法是手动循环音频文件(例如,在 Audacity 中通过复制粘贴)以制作比最可能需要的更长的歌曲,但问题在于它会导致在大量浪费的硬盘空间和带宽的情况下,它并不能解决人们喜欢一首歌并长时间停下来听它的问题。

所以我想知道是否有任何方法可以循环 MP3 流。如果我正确理解格式,我应该能够确定主循环在文件中的哪个位置(以字节为单位)开始(以秒为单位),所以理论上我可以构造一个无限循环的流。但是,HTM5 音频会支持这样的流吗?

4

1 回答 1

1

尝试每次测量延迟:

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或使其成为减法或其他东西。

于 2013-06-24T20:09:02.740 回答