我正在尝试制作吉他练习网站,关键功能是循环播放非常短的mp3文件(几秒钟),两者之间的差距绝对为零。例如,它可能有4个长度的和弦进行,我希望允许用户无缝地循环它。
我尝试使用带有<audio>
属性的HTML5 loop
标记。谷歌浏览器在循环之间有一个小的差距,但大到足以让我无法接受。我没有测试过其他浏览器,但我认为它不起作用。
一种可行的解决方法是使用ffmpeg
来重复播放与mp3相同的音频。但是,这会占用大量带宽。
对于我自己,我使用Audacity无间隙循环,但遗憾的是Audacity没有网络版。
那么,您是否有任何想法如何在零间隙的浏览器中循环播放mp3?我更喜欢非Flash解决方案,但如果没有别的办法,我会使用Flash。
修改 谢谢你的所有建议。 Flash结果很好用。我在http://vmlucid.lcm.hk/~netvope/audio/flash.html做了一个玩具演示。令我惊讶的是(我只使用Flash与资源占用和浏览器崩溃相关联),Flash和ActionScript设计得相当好,易于使用。我的第一个Flash项目花了我3个小时:))
答案 0 :(得分:3)
看看this page。使用Google Chrome 7聆听了一段时间,我发现方法1运行得很好,而方法3提供了最好的结果,尽管它有点像黑客。最终,所有浏览器的工作方式都不同,特别是因为HTML5尚未最终确定。如果可能的话,你应该选择Flash版本,我认为这会给你最好的循环。
答案 1 :(得分:1)
我不确定这会有多好用,但是如果你知道你的循环持续了800毫秒 - 你可以让浏览器每800毫秒调用一次播放方法......但它仍然不能保证是完美的。我不认为浏览器本身能够提供可靠的音频循环。
setInterval(function(){
document.getElementById("loop").play();
}, 800);
有传言说,最好的方法是以最无间隙的方式将其用于多个音频标签并在它们之间交替使用。
答案 2 :(得分:1)
在flash AS3中,您可以使用computeSpectrum()提取声音数据,并在需要时准确地将其提供给Sound对象(SampleDataEvent被触发)。
答案 3 :(得分:1)
或者看看这个实用程序:http://www.compuphase.com/mp3/mp3loops.htm我成功地将它用于我的flash项目,当音乐必须无间隙地循环时,99%的时间它都有效。它需要WAV作为输入 基本上它是LAME mp3编码器的一种前端,它使用这样的设置来防止出现间隙。它不适用于非常短的声音效果(我相信不到0.5秒) 之后您只需使用:
var sound:Sound = new MySoundEffect();
sound.play(0, 1000);
它会循环一千次。