Javascript 如何重复html5音频
请在回答之前阅读全文(谢谢): 我希望通过以下方式,以给定的次数(例如3次)无缝地重复一条曲目(例如10秒):Javascript 如何重复html5音频,javascript,html,html5-audio,Javascript,Html,Html5 Audio,请在回答之前阅读全文(谢谢): 我希望通过以下方式,以给定的次数(例如3次)无缝地重复一条曲目(例如10秒): 从给定的音频播放器中提取音频-不需要,从服务器加载.wav即可 连接音频n次(将音轨添加到音轨末端) 在新玩家中播放结果 怎么能做到呢?举个例子会很好,但2是最令人费解的 注意:将原始播放器设置为自身重复等不是一个选项,因为在大多数浏览器上都不流畅。我认为最无缝的方法是使用Javascript var sound=new Audio(document.getElementById("a
注意:将原始播放器设置为自身重复等不是一个选项,因为在大多数浏览器上都不流畅。我认为最无缝的方法是使用Javascript
var sound=new Audio(document.getElementById("audio").src);
for(var i=0;i<3;i++){
sound.play();
}
var-sound=new-Audio(document.getElementById(“Audio”).src);
对于(var i=0;i而言,唯一的方法是使用。然而,这是一个正在开发中的标准,因此尚未最终确定。解决此问题的一个肮脏解决方案是设置一个间隔:
var sound = new Audio(document.getElementById("audio").src)
var trackLength = 5000 // 5 seconds for instance
var playthroughs = 3 //play through the file 3 times
var player = setInterval(function(){
if(playthroughs > 0){
sound.play();
playthroughs--;
}
else clearInterval(player)
}, trackLength);
编辑:
在有人向我指出我的代码可能需要一些改进后,我有点失控了。结果如下:
var Sound = {
que: {
items: [],
add: function(name){
if(Sound.lib.items[name]) return Sound.que.items.push(Sound.lib.items[name]) - 1;
},
remove: function(key){
Sound.que.items.splice(key, 1);
},
clear: function(){
Sound.que.items = [];
},
play: function(startTrack){
var playing = startTrack -1 || 0;
var playNext = function(key){
if(Sound.que.items[key]){
if(Sound.que.items[key].isLoaded){
var trackLength = Math.floor(Sound.que.items[playing].duration * 1000);
Sound.que.items[key].play();
var play = setTimeout(function(){
playing++
playNext(key +1)
}, trackLength)
}
else{
Sound.que.items[key].addEventListener('canplaythrough', function(){
playNext(key);
})
}
}
}
playNext(playing);
}
},
lib: {
items: {},
add: function(src, name){
var obj = new Audio(src);
obj.addEventListener('canplaythrough', function(){
this.isLoaded = true;
})
if(!name){
var key = 0;
for(i in Sound.lib.items){
key++;
}
name = key;
}
Sound.lib.items[name] = obj;
},
remove: function(name){
if(typeof name == "string"){
delete Sound.lib.items[name];
}
}
},
}
这是一种面向对象的方法。它有一个简单的声音库和一个可以按任何顺序添加声音的que。我不知道它是否已完全调试,但它似乎工作得很好
要将新音频文件添加到库中,请执行以下操作:
Sound.lib.add('path/to/file.mp3', 'trackName'); //trackname will be numerical if none is given.
要将音频文件添加到que,请执行以下操作:
Sound.que.add('trackName');
要玩游戏:
Sound.que.play(2); // 2 indicates to start playing at the second sound in the que, assuming the que has 2 or more sounds in it.
要清除问题,请执行以下操作:
Sound.que.clear()
这里还有一些其他功能,如清除que、从que和/或库中删除项目。但这并不难理解。O这个问题很老,为什么StackOverflow会向我展示这个问题
一个简单的方法是在结束后再开始播放
功能播放(音频、时间、结束){
if(times循环属性是布尔属性
当存在时,它指定音频将在每次结束时重新开始
<!DOCTYPE html>
<html>
<body>
<audio controls loop>
<source src="horse.ogg" type="audio/ogg">
<source src="horse.mp3" type="audio/mpeg">
Your browser does not support the audio element.
</audio>
<p><strong>Note:</strong> The audio tag is not supported in Internet Explorer 8 and earlier versions.</p>
</body>
</html>
你能用javascript播放声音吗,还是必须在HTML音频元素中播放?@scrblnrd3在可能的情况下,由于音轨播放结束和javascript重新启动itAFAIK之间的轻微延迟,它会导致音频中出现明显的点击。你无法访问html5音频
标记原始数据。你可以通过ajax获取二进制blobnd使用,但它仍然是非常非常实验性的。当我研究这个API时,它只在Chrome Canary中受支持。是的,现在我对非常实验性很满意-我只想在浏览器中进行演示。顺便说一句,这是一篇好文章,谢谢。我建议使用node.js之类的东西,在这里合并流相当容易,相反试图找出一种如此新的技术(音频API),它甚至不能保证在不同的Chrome版本中都能使用相同的技术。我担心sound.play();
是不同步的-因此只需播放一次声音。一个轻微的改进是添加else clearInterval(播放器)
我觉得编写代码很有趣,所以我创建了一个存储库。实际上,这是我的第一个存储库。我会时不时地尝试使用它来进行改进。