diy_voice.js 5.76 KB
const app = getApp()
const innerAudioContext = wx.createInnerAudioContext();
var t = getApp(),
    o = t.globalData.setting;
Component({
  properties: {

    object: {
      type: Object,
      value: null,
    },
    audiosrc:{
      type: String,
      value: null,
    },



  },
  data: {
    yc:false,
     isPlayAudio: false,
     audioSeek: 0,
     audioDuration: 0,
     showTime1: '00:00',
     showTime2: '00:00',
     audioTime: 0,
    voice_logo:null,
    imghost: o.imghost,
  },

  ready: function() {
    console.log("ready");
    var music = this.data.object.music;
    var vo = this.data.object;
    this.setData({
      audiosrc:music,
      // logo:"http://jmh.xinda100.cn"+logo
    })
    this.Initialization();
    this.loadaudio();
    console.log("logo");
    console.log(vo);
    this.logo(vo);

  },

  methods: {

    logo(vo){
      console.log(111111);
      console.log(vo.logo);
      var v_logo=vo.logo;
      if (!(vo.logo.indexOf("/public/static/images/model/logo.png"))){
        this.setData({
          voice_logo:"https://mshopimg.yolipai.net/miniapp/images/logo.png"
        })
      }else{
        this.setData({
          voice_logo:v_logo
        })
      }
    },
   
    // 这里是一个自定义方法
    //初始化播放器,获取duration
    Initialization() {
      var t = this;
      if (this.properties.audiosrc.length != 0) {
        //设置src
        innerAudioContext.src = this.properties.audiosrc;
        //运行一次
        innerAudioContext.play();
        innerAudioContext.pause();
        innerAudioContext.onCanplay(() => {
          //初始化duration
          innerAudioContext.duration
          setTimeout(function () {
            //延时获取音频真正的duration
            var duration = innerAudioContext.duration;
            var min = parseInt(duration / 60);
            var sec = parseInt(duration % 60);
            if (min.toString().length == 1) {
              min = `0${min}`;
            }
            if (sec.toString().length == 1) {
              sec = `0${sec}`;
            }
            t.setData({
              audioDuration: innerAudioContext.duration,
              showTime2: `${min}:${sec}`
            });
          }, 1000)
        })
      }
    },
    //拖动进度条事件
    sliderChange(e) {
      var that = this;
      innerAudioContext.src = this.properties.audiosrc;
      //获取进度条百分比
      var value = e.detail.value;
      this.setData({
        audioTime: value
      });
      var duration = this.properties.audioDuration;
      //根据进度条百分比及歌曲总时间,计算拖动位置的时间
      value = parseInt(value * duration / 100);
      //更改状态
      this.setData({
        audioSeek: value,
        isPlayAudio: true
      });
      //调用seek方法跳转歌曲时间
      innerAudioContext.seek(value);
      //播放歌曲
      innerAudioContext.play();
    },
    //播放、暂停按钮
    playAudio() {
      //获取播放状态和当前播放时间
      var isPlayAudio = this.data.isPlayAudio;
      var seek = this.properties.audioSeek;
      innerAudioContext.pause();
      //更改播放状态
      this.setData({
        isPlayAudio: !isPlayAudio
      })
      if (isPlayAudio) {
        //如果在播放则记录播放的时间seek,暂停
        this.setData({
          audioSeek: innerAudioContext.currentTime
        });
      } else {
        //如果在暂停,获取播放时间并继续播放
        innerAudioContext.src = this.properties.audiosrc;
        if (innerAudioContext.duration != 0) {
          this.setData({
            audioDuration: innerAudioContext.duration
          });
        }
        //跳转到指定时间播放
        innerAudioContext.seek(seek);
        innerAudioContext.play();
      }
    },
    loadaudio() {
      var that = this;
      //设置一个计步器
      this.properties.durationIntval = setInterval(function () {
        //当歌曲在播放时执行
        if (that.data.isPlayAudio == true) {
          //获取歌曲的播放时间,进度百分比
          var seek = that.properties.audioSeek;
          var duration = innerAudioContext.duration;
          var time = that.properties.audioTime;
          time = parseInt(100 * seek / duration);
          //当歌曲在播放时,每隔一秒歌曲播放时间+1,并计算分钟数与秒数
          var min = parseInt((seek + 1) / 60);
          var sec = parseInt((seek + 1) % 60);
          //填充字符串,使3:1这种呈现出 03:01 的样式
          if (min.toString().length == 1) {
            min = `0${min}`;
          }
          if (sec.toString().length == 1) {
            sec = `0${sec}`;
          }
          var min1 = parseInt(duration / 60);
          var sec1 = parseInt(duration % 60);
          if (min1.toString().length == 1) {
            min1 = `0${min1}`;
          }
          if (sec1.toString().length == 1) {
            sec1 = `0${sec1}`;
          }
          //当进度条完成,停止播放,并重设播放时间和进度条
          if (time >= 100) {
            innerAudioContext.stop();
            that.setData({
              audioSeek: 0,
              audioTime: 0,
              audioDuration: duration,
              isPlayAudio: false,
              showTime1: `00:00`
            });
            return false;
          }
          //正常播放,更改进度信息,更改播放时间信息
          that.setData({
            audioSeek: seek + 1,
            audioTime: time,
            audioDuration: duration,
            showTime1: `${min}:${sec}`,
            showTime2: `${min1}:${sec1}`
          });
        }
      }, 1000);
    },
    onUnload: function () {
      //卸载页面,清除计步器
      clearInterval(this.properties.durationIntval);
    },
    customMethod: function () { }
  }
})