『从零开始学小程序』媒体组件audio组件

639 阅读3分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第24天,点击查看活动详情

👨‍🎓作者简介:一位喜欢写作,计科专业的大三菜鸟

🏡个人主页:starry陆离 的个人主页

如果文章有帮到你的话记得点赞👍+收藏💗支持一下哦

『从零开始学小程序』媒体组件audio组件

多媒体包括音频、视频和相机等,为了更好地在小程序中使用这些多媒体功能,微信官方也为开发者提供了一系列多媒体组件和API接口。多媒体组件如下所示:

  • video组件:视频组件
  • camera组件:相机组件
  • audio组件:音频组件
  • image组件:图片组件

1.简介

audio组件:音频组件。在页面插入一段音频或者播放音乐有3种处理方法。

  1. 简单的插入audio组件,并利用组件的属性控制播放
  2. 利用AudioContext类,通过指定方法获取实例
  3. 使用功能最全的InnerAudioContext

下面我们来一一了解三种方法的使用。不过在基础库1.6.0版本之后就不再维护前两种方法了,我们实际开发还是用第三种InnerAudioContext

2.audio组件

首先来看看audio组件常见的属性:

属性类型默认值必填说明
idstringaudio 组件的唯一标识符
srcstring要播放音频的资源地址
loopbooleanfalse是否循环播放
controlsbooleanfalse是否显示默认控件
posterstring默认控件上的音频封面的图片资源地址,如果 controls 属性值为 false 则设置 poster 无效
namestring未知音频默认控件上的音频名字,如果 controls 属性值为 false 则设置 name 无效
authorstring未知作者默认控件上的作者名字,如果 controls 属性值为 false 则设置 author 无效
 <!-- audio.wxml -->
 <audio author="Taylor Swift" name="Gorgeous" 
 poster="https://636c-cloud1-0gq03z948cf60a2f-1313616796.tcb.qcloud.la/111111.png?sign=9d6db5733a31686af7132b981d4e9c88&t=1663494912"
 src="https://636c-cloud1-0gq03z948cf60a2f-1313616796.tcb.qcloud.la/Gorgeous%20-%20Taylor%20Swift.mp3?sign=1bc3a85378f63986bbf6f8cbe8f032e9&t=1663494659" 
 id="myAudio" controls loop 
 bindplay="funPlay"
 bindpause="funPause"
 ></audio>
 // audio.js
 Page({
   funPlay:function(){
     console.log("audio play");
   },
   funPause:function(){
     console.log("audio pause");
   }
  
 })

除了上述的基本属性外。audio还有一些属性可以监听音频的播放状态。可以看到每次点击让音频播放或暂停都会触发bindplay和bindpause属性。

属性类型默认值必填说明
bindplayeventhandle当开始/继续播放时触发 play 事件
bindpauseeventhandle当暂停播放时触发 pause 事件

wx_002

3.AudioContext

通过AudioContext类中的createAudioContext方法可以根据audio的id属性来获取到audio实例。然后进行属性操控。

类方法说明
setSrc(String src)设置音频地址
play()播放音频
pause()暂停音频
seek(number position)跳转到指定位置
 // audio.js
 Page({
   onReady: function (e) {
     // 使用 wx.createAudioContext 获取 audio 上下文 context
     this.audioCtx = wx.createAudioContext('myAudio')
   },
   data: {
     name: 'Gorgeous',
     author: 'Taylor Swift',
     poster:'https://636c-cloud1-0gq03z948cf60a2f-1313616796.tcb.qcloud.la/111111.png?sign=9d6db5733a31686af7132b981d4e9c88&t=1663494912',
     src: 'https://636c-cloud1-0gq03z948cf60a2f-1313616796.tcb.qcloud.la/Gorgeous%20-%20Taylor%20Swift.mp3?sign=1bc3a85378f63986bbf6f8cbe8f032e9&t=1663494659',
   },
   funPlay:function(){
     console.log("audio play");
   },
   funPause:function(){
     console.log("audio pause");
   },
   audioPlay: function () {
     this.audioCtx.play()
   },
   audioPause: function () {
     this.audioCtx.pause()
   },
   audio14: function () {
     this.audioCtx.seek(14)
   },
   audioStart: function () {
     this.audioCtx.seek(0)
   }
 })
 <audio author="{{author}}" name="{{name}}" 
 poster="{{poster}}"
 src="{{src}}" 
 id="myAudio" controls loop 
 bindplay="funPlay"
 bindpause="funPause"
 ></audio>
 <view class="container">
   <button type="primary" bindtap="audioPlay">播放</button>
   <button type="primary" bindtap="audioPause">暂停</button>
   <button type="primary" bindtap="audio14">设置当前播放时间为14秒</button>
   <button type="primary" bindtap="audioStart">回到开头</button>
 </view>

image-20220918181454554

4.InnerAudioContext

InnerAudioContext是官方推荐功能最全的音频类,其实例可在js文件的生命周期函数中通过调用createInnerAudioContext接口获取。

InnerAudioContext类的中包括了audio的属性,除这些属性外它新增的常见属性说明如下:可在js函数中获取实例后通过“this.audioCtx.属性名”的写法获取相应的属性值。

属性类型说明
obeyMuteSwitchboolean是否遵循系统静音,默认为true
numberstartTime开始播放的位置,默认值为0
volumenumber音量,范围0~1,默认为1
durationnumber当前音频的长度
currentTimenumber当前音频的播放位置,单位为s
bufferednumber当前音频缓冲的时间点

同样的InnerAudioContext类中的类方法也包括了AudioContext类的方法,除此之外它还新增了许多其他的类方法,读者可自行查阅官方文档。InnerAudioContext | 微信开放文档 (qq.com)

使用方法与AudioContext大同小异,无非是在获取实例时使用createInnerAudioContext方法替代createAudioContext方法。

 onReady: function (e) {
     // 使用 wx.createAudioContext 获取 audio 上下文 context
     this.audioCtx = wx.createInnerAudioContext('myAudio')
   },