小程序音频播放器(二)使用createInnerAudioContext做另一个播放器

几个月之前,也就是刚开始学习小程序,做了一个简单的音频播放器
传送门:https://blog.csdn.net/immocha/article/details/103904659

庆幸自己没有从入门到放弃,而是渐渐有了些长进,这回又做了一个播放器,感觉能稍微好点了。
这个播放器长这样
在这里插入图片描述
比上回稍微复杂一些,主要实现以下几个功能:

  1. 播放,暂停。 播放时圆形图片会转动
  2. 快进快退
  3. 音频切换(英音和美音之间切换)
  4. 进度条显示
  5. 切换倍速,估计系统有bug,暂未实现~~

实物在我的小程序里边
在这里插入图片描述

照常贴代码

<!-- 图标使用iconfont-->

<view class="audioPlayer">
  <view class="progress" style="width:{{progress}}%"></view>
  <view class="btn-switch-accent" bindtap="switchAccent">{{curAccentText}}</view>
  <view class="btn-fast-backward" data-flag="-1" bindtap="seekPosition">
    <view class="iconfont icon-backward"></view>
  </view>
  <view class="btn-play">
    <view class="btn-bg {{isPlay?'roate' :''}}">
      <image style="width: 100rpx; height: 100rpx; " mode="scaleToFill" src="{{thumbnail}}"></image>
    </view>
    <view bindtap="play" wx:if="{{isPlay == false}}">
      <view class="iconfont icon-caret-right" /></view>
    <view bindtap="stop" wx:if="{{isPlay == true}}">
      <view class="iconfont icon-pause" /></view>
  </view>
  <view class="btn-fast-backward" data-flag="1" bindtap="seekPosition">
    <view class="iconfont icon-forward"></view>
  </view>
  <view class="btn-play-rate" bindtap="switchPlayRate">{{curPlayRate}}X</view>
</view>
.audioPlayer { position: fixed; z-index:999; bottom:0; left:0; right:0; height:98rpx; display: flex; justify-content: space-around; align-items: center; background: #fff; box-shadow: 2rpx -2rpx 2rpx #f1f1f1; }
.progress { position: absolute; top:0; left:0; right:0; height:4rpx; width:2rpx; background:#2e25da }
.btn-play { position: relative;  bottom:20rpx; display: flex; justify-content: center; align-items: center; width:100rpx; height:100rpx; overflow: hidden;border-radius: 100%; }
.btn-bg {position: absolute;top:0; left:0;  width:100rpx; height:100rpx;border-radius: 100%; }
.roate { animation:turn 5s linear infinite;      }
@keyframes turn{
      0%{-webkit-transform:rotate(0deg);}
      25%{-webkit-transform:rotate(90deg);}
      50%{-webkit-transform:rotate(180deg);}
      75%{-webkit-transform:rotate(270deg);}
      100%{-webkit-transform:rotate(360deg);}
    }
.icon-caret-right,.icon-pause { font-size:72rpx; color:#fff;}

.btn-switch-accent { position: relative; top:-4rpx; }
.btn-play-rate { font-family:  Arial, Helvetica, sans-serif}

// 删掉了我自己的一些业务代码,可能会误删一些内容,应该没有大问题,相信你自己改改就可以的。
const myAudio = wx.createInnerAudioContext()
const playRateRange = [0.8, 1.0, 1.5, 2.0]
const audioAccent = [
{key: 'audio_uk',text: '英音'},
{ key: 'audio_us',text: '美音'},
]

Page({
  data: {
    active: 0,  
    isPlay: false,
    thumbnail: '换成你自己的',

    progress: 0,
    curAccentIndex: 0,
    curAccentText: '',
    curPlayRateIndex: 1,
    curPlayRate: 0,
  },

  onLoad: function() {
    this.setData({     
      //curPlayRate: playRateRange[this.data.curPlayRateIndex].toFixed(1),
      curAccentText: audioAccent[this.data.curAccentIndex].text
    })
    this.init()
  },

  init() {  
        //myAudio.playbackRate = 2
        myAudio.src = '换成你自己的'

        myAudio.onCanplay(() => {
          myAudio.duration; //必须写,不然获取不到。。。
        })

        //进度条变化 
        myAudio.onTimeUpdate(() => {          
          this.setData({
            progress: myAudio.currentTime / myAudio.duration * 100
          })
        })
        
        myAudio.onEnded(() => {
          this.setData({
            isPlay: false
          })
          // 播放结束回到开头,stop
          myAudio.seek(0)
        })
  },

  //播放  
  play: function() {
    myAudio.startTime = this.data.myAudioCurrent;
    myAudio.play()
    this.setData({
      isPlay: true
    })   
  },

  stop: function() {
    myAudio.pause();
    this.setData({
      isPlay: false
    });
  },

  // 快进
  seekPosition(e) {
    myAudio.seek(myAudio.currentTime + 5 * e.currentTarget.dataset.flag)
  },

  // 切换英音/美音
  switchAccent() {
    this.data.curAccentIndex = this.data.curAccentIndex == 0 ? 1 : 0
    this.setData({
      curAccentText: audioAccent[this.data.curAccentIndex].text
    })
    myAudio.stop()
    // 在onCanplay里获取并设置音频时长和播放进度
    myAudio.src = '换个音频地址'
    myAudio.onCanplay(() => {
      myAudio.duration; //必须写,不然获取不到。。。 
      if (this.data.isPlay) {
        myAudio.play()       
      }
    })

    //进度条变化,换了个音频地址,所以要再写一下
    myAudio.onTimeUpdate(() => {     
      this.setData({
        progress: myAudio.currentTime / myAudio.duration * 100
      })
    })
  },

  // 更改播放速度,暂时无效,等待版本修复
  switchPlayRate() {
   
  },
})
要实现小程序音频播放器播放编辑好的内容,你需要完成以下步骤: 1. 编辑音频文件:使用专业的音频编辑软件,如Adobe Audition,将音频文件剪辑、混音、调整音量等,制作出符合要求的音频文件。 2. 将音频文件上传到服务器:将编辑好的音频文件上传到服务器,确保用户可以通过小程序访问该文件。 3. 使用小程序音频组件:在小程序使用音频组件,将音频文件的URL传递给组件,使其可以播放该文件。 以下是一个简单的代码示例: ```xml <audio src="{{audioUrl}}" id="myAudio" /> <button bindtap="playAudio">播放</button> <button bindtap="pauseAudio">暂停</button> ``` ```javascript Page({ data: { audioUrl: 'https://example.com/audio.mp3', myAudio: null }, onReady: function () { this.setData({ myAudio: wx.createInnerAudioContext() }) }, playAudio: function () { this.data.myAudio.src = this.data.audioUrl this.data.myAudio.play() }, pauseAudio: function () { this.data.myAudio.pause() } }) ``` 在这个示例中,我们首先定义了一个音频组件和两个按钮,分别用于播放和暂停音频。然后,在页面加载完成时,我们创建了一个音频上下文对象,并将其保存在data中。最后,我们在播放和暂停按钮的事件处理程序中,分别设置音频URL并播放或暂停音频。 需要注意的是,为了保证音频播放效果的流畅性,应尽量使用较小的音频文件,并确保服务器的稳定性和响应速度。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

immocha

人生得意须尽欢

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值