微信小程序实现音频播放,固定时间重复固定次数,英语听力练习工具

解决问题:练习英语听力。

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);
 
    },
  })
 

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值