无间隙循环音频html5
gapless looping audio html5
有人知道如何实现音频标签的无间隙循环吗?我在想一些基于javascript的东西。
我有一个循环,比如1个度量,我想让它循环并保持节奏。所以我需要循环平滑/无间隙。当我简单地将"loop"设置为true时,它将延迟并且不保持节奏
虽然还不完美,但这对我来说很有效:
var audio_file = new Audio('whatever.mp3')
audio_file.addEventListener('timeupdate', function(){
var buffer = .44
if(this.currentTime > this.duration - buffer){
this.currentTime = 0
this.play()
}
});
试验一下缓冲区的大小,找出最适合你的
解决方案是有2个实例来控制播放。
像这样:
var current_player = "a";
var player_a = document.createElement("audio");
var player_b = document.createElement("audio");
player_a.src = "sounds/back_music.ogg";
player_b.src = player_a.src;
function loopIt(){
var player = null;
if(current_player == "a"){
player = player_b;
current_player = "b";
}
else{
player = player_a;
current_player = "a";
}
player.play();
setTimeout(loopIt, 5333); //5333 is the length of the audio clip in milliseconds.
}
loopIt();
如果你正在使用SoundManager2,通过Data URI而不是URL请求来获取音频。
奇怪的是,我发现SoundManager2每次播放时都会从服务器请求文件。即使它从缓存中加载,也会有延迟,直到收到未修改的音频文件头。
不幸的是,这是HTML5元素的弱点之一。不能保证音频会在你想要的时候播放或没有延迟。
有两个选项值得考虑:
-
SoundManager2 -一个伟大的库,可能会有帮助,虽然它将使用Flash播放音频在这种情况下;
-
Web Audio API in Chrome或Audio Data API in Firefox -两者都是真正的新,并没有真正准备好黄金时间,但允许你做的事情,如预定的音频播放,循环和整个更多。
是的,这是一个真正的痛苦…显然,提出这个元素的人既不是音乐家,也不是游戏开发者。
无论如何,根据您正在做的事情,另一个可能的解决方案是创建一个MP3/OGG/wav,它是您的循环长度的几个重复。当你想要在停止播放之前只循环播放几次声音时,这就很方便了。
这方面的一个例子可能是玩家推进火箭飞船。我目前正在开发一款基于这种场景的游戏,并制作了一款带有若干推力音效循环的MP3,总播放时间约为6秒。为了最小化下载的大小,我将音频编码为32kbps -再低一点,它就会开始听起来令人难以接受的飞溅声,因为推进声主要是白噪声。
你可以猜到,我只是相信玩家不太可能持续6秒。如果他们听到了,他们会听到间隙,但我可以接受。大多数情况下,他们不会推力这么长时间,所以不会听到故障。
我考虑过的另一个选项是一对渐入渐出的样本,并且都带有偏移量的循环。
虽然这些方法适用于某些游戏场景,但却不适用于任何类型的音乐场景。YMMV .
我尝试了上面的方法,但没有成功,在我的用例中(使用Firefox 43.0)似乎都点击了。这部分是由于必须循环一个连续的音调,没有方便的休息或低点在它(我试图创建一个使用22010个样本/秒单声道。wav文件旋转汽车引擎)。
然而,我能够将我的。wav文件多次连接在一起,以生成一个没有点击的长。wav文件(除了现在仍然发生在末尾的不常见的一个),这是因为我的原始。wav文件被精心制作成循环。
我现在计划在同一时间连续播放几个这样的长文件(每个汽车rpm级别一个),并使用gainNode(在这里描述:http://www.html5rocks.com/en/tutorials/webaudio/intro/)混合这些信号。这应该会产生一个免点击的汽车引擎,听起来比简单地启动和停止单个。wav文件播放要好得多。
这在HTML5音频中还不可能实现,因为每个音频项只触发一次结束事件。
我的方法是一个令人望而生畏的方法,但它适用于环境背景音乐
假设我们的track有5.3秒
你有两个音轨的同一文件。当一个即将结束时(例如在结束前1秒- 4.3 -5.3秒),你将其淡出(设置音量在这一秒内的位置百分比)。与此同时,第二轨开始淡出(0 -1)。你可以设置一个50ms的间隔,或者其他的,这取决于你的音频库
在播放结束后,您可以切换一个布尔变量,该变量控制渐入/渐出,并反转哪个曲目将在下次运行中渐入和淡出
- HTML5音频加载和播放获胜'我不能在iPad上工作
- 未能加载,因为找不到支持的源.当播放HTML5音频元素时
- 动态加载的自定义javascript/jQuery/HTML5音频播放器的问题
- Html5音频时间更新精度
- HTML5音频如何防止浏览器麦克风拾取所有声音
- Javascript::通过HTML5音频播放器播放列表播放多个音频文件
- HTML5音频循环出现问题
- 如果src设置为静态,则会播放html5音频,但如果设置为动态,则不会播放
- Shoutcast流url在html5音频标签中不起作用
- Phonegap-Android 4.4-html5音频长度错误(javascript和媒体插件)
- HTML5音频没有方法播放
- 如何在角度过滤器内返回 html5 音频/视频作为输出
- 使用 Javascript 循环播放 HTML5 音频
- HTML5音频播放器只有在双击后才能在移动浏览器上播放
- JavaScript/HTML5音频:在Android Chrome中播放用户通过文件选择器加载的mp3文件
- 为什么我的代码使用javascript与html5音频播放器可以'Don’我不能做两个或两个以上
- 如何重复html5音频
- HTML5 音频进度条长度
- HTML5音频标签,其中可以下载
- 使用Javascript为HTML5音频添加循环