gpt4 book ai didi

html - 无缝音频循环到任意位置

转载 作者:太空狗 更新时间:2023-10-29 13:17:11 25 4
gpt4 key购买 nike

我最喜欢 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 或做一个减法或其他东西。

关于html - 无缝音频循环到任意位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17152035/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com