html5 如何播放多个Mp3文件,有二问。

bonlog 2014-03-15 08:42:15
第一、在chrome下,单个文件无误,但多个mp3文件1.mp3,2.mp3依次播放,即当1.mp3播放完了,接着播放2.mp3不行。
我试过此法,不行。
<audio controls>
<source src="1.mp3" />
<source src="2.mp3" />
</audio>

我又试了此法;我本意是让其循环播放,但只能播放最后一个即3.mp3。就是只取了最后一个值。

<input type="text" id="audioFile" value="1.mp3;2.mp3;3.mp3" size="60" />
function playAudio() {
var audioElm= document.getElementById("audio");

var AF=document.getElementById('audioFile').value;
var b=AF.split(";");

for(var i=0;i<b.length;i++){
//alert(b[i]);
audioElm.src=b[i];

audioElm.play();
}
}


第二问,我使用audio标签,src中的mp3长度是12秒。
但是,我的要求是,在5秒中播放完,从而实现快速播放的目的。onratechange属性只是速度变快了,但是播放时间未减少。
...全文
2820 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
qqeip 2016-11-21
  • 打赏
  • 举报
回复
太阳光 你的 好像播放完了 再点击播放 不从第一个播 是最后一个呢
scscms太阳光 2014-03-17
  • 打赏
  • 举报
回复
<div id="audioBox"></div>
<script type="text/javascript">
    window.onload = function(){
        var myAudio = new Audio();
        myAudio.preload = true;
        myAudio.controls = true;
        myAudio.src = "1.mp3";
        myAudio.playbackRate=3;//快进3
        myAudio.play();
        var t=0;
        var tt = setInterval(function(){
            t++;
            if(t==1){
                myAudio.playbackRate=1;//恢复正常播放
            }else if(t>7){
                myAudio.playbackRate=100;//快进,达到尽快结束
                clearInterval(tt);
            }
        },1000);//这里设短了又不起效果
        document.getElementById("audioBox").appendChild(myAudio);
        myAudio.loop = false;//禁止循环
    }
</script>
bonlog 2014-03-17
  • 打赏
  • 举报
回复
引用 2 楼 xzy21com 的回复:
<audio controls> 试播放,直到可以播放为止。假如第一个可以播放后面的看医生,这只是一个事件处理。但并不表明你现在就感冒了。“我的要求是,在5秒中播放完”重点是你怎么样要求它快进的?
谢谢了。 我的音频文件2.mp3 长度有12秒,但是,两段有空白的(就是从3s-9s有声音),因此我只希望播放3s-9s。我不希望剪辑音频,因为太土了。 使用#t=3:9,就不能触发ended的事件,真是上火,我已给html5小组发邮件了,说明,此处有bug。 我的audio标签, 我应该怎么办啊?谢谢了,我百度了所有的资料。
bonlog 2014-03-17
  • 打赏
  • 举报
回复
引用 5 楼 xzy21com 的回复:
<div id="audioBox"></div>
    }
</script>
谢谢大哥,祝天天快乐。我一会试验一番。
scscms太阳光 2014-03-16
  • 打赏
  • 举报
回复
<div id="audioBox"></div>
<script type="text/javascript">
    window.onload = function(){
        var arr = ["3.mp3","2.mp3","1.mp3"];//把需要播放的歌曲从后往前排
        var myAudio = new Audio();
        myAudio.preload = true;
        myAudio.controls = true;
        myAudio.src = arr.pop();//每次读数组最后一个元素
        myAudio.addEventListener('ended', playEndedHandler, false);
        myAudio.play();
        document.getElementById("audioBox").appendChild(myAudio);
        myAudio.loop = false;//禁止循环,否则无法触发ended事件
        function playEndedHandler(){
            myAudio.src = arr.pop();
            myAudio.play();
            console.log(arr.length);
            !arr.length && myAudio.removeEventListener('ended',playEndedHandler,false);//只有一个元素时解除绑定
        }
    }
</script>
bonlog 2014-03-16
  • 打赏
  • 举报
回复
引用 2 楼 xzy21com 的回复:
<audio controls> <source src="1.mp3" /> <source src="2.mp3" /> 去看医生,这只是一个事件处理。但并不表明你现在就感冒了。“我的要求是,在5秒中播放完”重点是你怎么样要求它快进的?
多谢谢,祝天天 快乐。
scscms太阳光 2014-03-16
  • 打赏
  • 举报
回复
<audio controls> <source src="1.mp3" /> <source src="2.mp3" /> </audio> ============================知道为什么html5设计成可以多个src吗?人家的原意是以防其中一些src文件无法播放时,可以尝试播放其它,并不是播放列表来的。简单讲就是从上到下尝试播放,直到可以播放为止。假如第一个可以播放后面的就没用了。 for(var i=0;i<b.length;i++){ audioElm.src=b[i]; audioElm.play(); } ============================这又是另一个概念了:你这是反复对src赋值,当然是最后一个有效。就好像你不断试穿衣服,到出门时你最终也是只穿了最后一次试的那件上衣。 onratechange:当媒介数据的播放速率改变时运行脚本!这只是一个回调函数。就好像说你感冒了就去看医生,这只是一个事件处理。但并不表明你现在就感冒了。“我的要求是,在5秒中播放完”重点是你怎么样要求它快进的?

87,920

社区成员

发帖
与我相关
我的任务
社区描述
Web 开发 JavaScript
社区管理员
  • JavaScript
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧