开发 | 微信小程序audio音频播放组件+api_wx.createAudioContext

本文介绍了微信小程序中audio组件的使用,包括poster、name、author、src、id、controls等属性,并结合wx.createAudioContext API,展示了如何创建一个简易音频播放控制页面。
### 微信小程序 Audio 组件音频播放控制方法 #### 使用 `<audio>` 组件实现基本音频播放控制 微信小程序中的 `<audio>` 组件是一个核心工具,用于实现音频播放、暂停和其他基础功能。该组件支持多种属性和事件,能够满足大多数开发需求。 以下是 `<audio>` 的一些常用属性及其作用: - `src`:指定音频文件的 URL 地址。 - `controls`:设置是否显示默认的播放控件。 - `loop`:决定音频是否循环播放。 - `autoplay`:设定音频是否自动开始播放。 同时,<audio> 支持丰富的交互事件,例如: - `bindplay`:当音频开始播放时触发。 - `bindpause`:当音频被暂停时触发。 - `bindended`:当音频自然结束时触发。 下面是一个简单的示例代码,展示了如何使用 `<audio>` 实现基本的音频播放控制: ```html <audio src="https://example.com/audio.mp3" controls="{{true}}" loop="{{false}}" autoplay="{{false}}" bindplay="onPlay" bindpause=".onPause" bindended="onEnded"> </audio> ``` 上述代码片段中设置了音频的基本行为并绑定了三个常见事件[^2]。 --- #### 利用 InnerAudioContext API 进行高级控制 对于更加复杂的场景,可以通过 `wx.createInnerAudioContext()` 创建一个 `InnerAudioContext` 对象来获得更强的音频控制能力。此对象允许开发者精确管理音频的状态,包括播放、暂停、停止、调整音量等功能。 以下是一些常用的 `InnerAudioContext` 方法: - `.play()`: 开始或继续播放音频。 - `.pause()`: 暂停当前正在播放音频。 - `.stop()`: 停止播放并将进度重置到初始位置。 - `.seek(position)`: 跳转至指定的时间点(单位为秒)。 - `.setVolume(value)`: 设置全局音量大小 (范围为 0~1)。 下面是基于 `InnerAudioContext` 的一段完整示例代码: ```javascript Page({ data: { isPlaying: false, currentTime: '00:00', duration: '00:00' }, onLoad() { const innerAudioContext = wx.createInnerAudioContext(); innerAudioContext.src = 'https://example.com/audio.mp3'; innerAudioContext.autoplay = false; this.innerAudioContext = innerAudioContext; // 监听播放状态变化 innerAudioContext.onPlay(() => { this.setData({isPlaying: true}); }); innerAudioContext.onPause(() => { this.setData({isPlaying: false}); }); // 更新时间信息 innerAudioContext.onTimeUpdate(() => { let currentTimeFormatted = formatTime(innerAudioContext.currentTime); let durationFormatted = formatTime(innerAudioContext.duration); this.setData({ currentTime: currentTimeFormatted, duration: durationFormatted || '--:--' }); }); }, togglePlayback() { if (!this.data.isPlaying){ this.innerAudioContext.play(); } else{ this.innerAudioContext.pause(); } } }); // 时间格式化函数 function formatTime(seconds){ var minute = Math.floor(seconds / 60).toString().padStart(2, '0'); var second = Math.floor(seconds % 60).toString().padStart(2, '0'); return `${minute}:${second}`; } ``` 以上代码实现了动态切换播放/暂停状态,并实时更新音频播放时间和总时长。 --- #### 自定义播放进度条与拖动控制 如果希望进一步增强用户体验,则可以考虑构建完全自定义样式的播放界面。这通常涉及手动绘制进度条以及监听用户的触摸动作完成精准定位。 具体来说,可借助 `wx.createAudioContext` 或者前述提到的 `InnerAudioContext` 来同步进度数据;再配合 WXML 和 WXSS 设计美观大方的操作面板。 这里给出一个简化版的例子说明如何制作带拖拽效果的进度条: ```wxml <view class="progress-container"> <slider value="{{currentTime * 100 / totalDuration}}" min="0" max="100" block-size="28" activeColor="#FFB90F" backgroundColor="#CCC" onChange="onChangeProgress"/> </view> <button type="primary" size="mini" onTap="togglePlayback">{{isPlaying ? 'Pause' : 'Play'}}</button> ``` 对应的逻辑部分如下所示: ```javascript Page({ data:{ currentTime: 0, totalDuration: 0, isPlaying: false }, onReady(){ const audioCtx = wx.createInnerAudioContext(); audioCtx.src='http://link-to-your-audio-file.mp3'; audioCtx.onCanplay(()=>{ this.setData({totalDuration: audioCtx.duration}) }) audioCtx.onTimeUpdate(()=>{ this.setData({currentTime: audioCtx.currentTime}) }) }, onChangeProgress(e){ const seekPosition = e.detail.value * this.data.totalDuration / 100; this.selectComponent('innerAudio').seek(seekPosition); }, togglePlayback(){ const {isPlaying} = this.data; !isPlaying? this.selectComponent('innerAudio').play(): this.selectComponent('innerAudio').pause(); } }) ``` 这段脚本不仅完成了常规的播放控制还加入了对滑块输入响应的支持[^3]。 ---
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值