解决问题:练习英语听力。
0.5倍数,4秒每段,每段重复3次。播放
程序本身没问题,实际应用的时候有点问题,主要是不是智能分段的,所以会听起来有点变扭,比如great这个单词,如果分在gr ,eat这样,听起来有点变扭,我的解决方案是,加0.3秒。
比如 you are great,变成前面是 you are gr ,后面是 are great,稍微有点难受。但是保证每个单词都能听完整
微信小程序的几个事实
1、能播放mp3
2、只能播放外网(地址)和微信自己存的MP3。
不能用绝对地址,比如/music/abc.mp3 这个格式无法播放。
wxx 有几个按钮,几个slider,分别表示第一个是播放倍数,第二个是分段时间,默认4秒;
第三个 重复次数,默认3次。
衔接时间默认是0.1 比如0-3,2.9-6,5.9-9,8.9-12这样来分段
程序使用,先用openmp3 来打开一个MP3,后面用playnext来播放效果
<!--pages/home/first.wxml-->
<button data-type="" class='submit' type="main" bindtap='openmp3' >打开mp3</button>
<slider bindchange="slider1change" min="0.5" max="1.5" step="0.1" show-value/>
<slider bindchange="slider2change" min="1" max="10" step="1" show-value/>
<slider bindchange="slider3change" min="1" max="10" step="1" show-value/>
<button data-type="del" class='submit' type="warn" bindtap='playall' >playall</button>
<button data-type="del" class='submit' type="warn" bindtap='pauseall' >pause</button>
<button data-type="del" class='submit' type="warn" bindtap='stopall' >stop</button>
<button data-type="del" class='submit' type="warn" bindtap='playnext' >playnext</button>
.js
const mp1 = wx.createInnerAudioContext();
var nowtime=0
var looptime=1
var loopall=3//重复次数
var segment=4//4s一段
var segment2=0
var lesstime=0.1// 衔接时间,比如0-3,2.9-6,5.9-9,8.9-12
var islast=false
var speeddef=0.5
var isstop=false
var ispause=false
var musicPath=''
Page({
data: {
},
onLoad: function(options) {
try{
var str = wx.getStorageSync('musicPath')
if (str)
{
//读取缓存
musicPath=str
console.log(str)
mp1.autoplay = false;
mp1.src = musicPath;
}
}catch (e) {}
},
onUnload: function() {
this.data.innerAudioContext.destroy()
},
slider1change(e){
speeddef=e.detail.value
},
slider2change(e){
segment=e.detail.value
},
slider3change(e){
loopall=e.detail.value
},
openmp3(){
wx.chooseMessageFile({
count: 1, // 默认9
type: 'file', // 可以指定是文件还是图片,默认二者都有
success: function (res) {
const tempFilePaths = res.tempFiles; // 临时文件路径列表
musicPath = tempFilePaths[0].path; // 获取第一个文件的路径
// 使用innerAudioContext播放音乐
wx.setStorageSync('musicPath', musicPath)
mp1.autoplay = false;
mp1.src = musicPath;
}
});
},
playall(){ mp1.play(); },
stopall(){ mp1.stop(); },
pauseall(){ mp1.pause();ispause=false },
playnext(){
var that=this
if(segment2==0){segment2=segment}
// 为了有衔接时间搞了个segment2,因为第一段是3,第二段是3.1,第三段也是3.1
mp1.playbackRate=speeddef
let timer = null;
let mplength=mp1.duration
if(mp1.duration-nowtime-segment<0&&mp1.duration!==0){islast=true}//判断是不是最后一段
if(nowtime==0){mp1.startTime=nowtime;}//判断是不是第一次,第一次0开始
else(mp1.startTime=nowtime-lesstime)
console.log(mp1.startTime,segment,segment2)
mp1.play();
console.log(looptime,nowtime,segment,mp1.duration,islast,nowtime+segment)
// segment2*1000/speeddef 一定要除以倍数,否则不行
setTimeout(() => {
mp1.stop();//时间到了先stop
if (looptime<loopall) {looptime=looptime+1//循环次数 没到就继续
that.playnext()
}else{//循环次数 超过就把循环次数归0,设置开始时间
looptime=1
nowtime=nowtime+segment
segment2=segment+lesstime
if(islast){//最后一次,不要再继续播放了。
nowtime=0
segment2=0
islast=false
return}else{
that.playnext()}
}
}, segment2*1000/speeddef);
},
})