【声音工厂】微信小程序开发记录 声音播放操作
以下js 实现了微信小程序播放 停止 暂停等 音频播放。
import { formatTime } from "./index"; /** * 通用声音播放器 * @param url 音频路径 * @param onComplete 播放完成回调 */ export function play(url, onComplete) { //this. if (_isVoice(url)) { if (_isLocalFile(url)) { //播放本地文件 _playVoice(url, onComplete); } else { //下载到本地并播放 _download(url).then( localPath => {this._playVoice(localPath, onComplete);},//下载成功 fail => {onComplete()}//下载失败 ); } } else { //播放在线音频 _playAudio(url, onComplete); } } /** * 通用声音停止 */ export function stop() { console.log("停止") _stopAudio(); _stopVoice(); } /** * 播放在线声音 * @param url * @param onComplete */ function _playAudio(url, onComplete = () => {}) { wx.onBackgroundAudioStop(() => {}); wx.stopBackgroundAudio({ complete(){ wx.playBackgroundAudio({ dataUrl: url }); wx.onBackgroundAudioStop(() => { onComplete(); wx.onBackgroundAudioStop(() => {});//防止单独掉微信playBackgroundAudio接口时再次回调 }); } }); } /** * 停止播放在线声音 */ function _stopAudio() { //wx.onBackgroundAudioStop(() => {}); //wx.stopBackgroundAudio(); var BackgroundAudioManager = wx.getBackgroundAudioManager(); BackgroundAudioManager.stop(); } /** * 播放本地语音 * @param recordUrl * @param onComplete */ function _playVoice(recordUrl, onComplete = () => {}) { wx.stopVoice({ complete(){ setTimeout(function () { wx.playVoice({ filePath: recordUrl, complete(){ onComplete(); } }); }, 500);//设置延迟以防两个音频同时放时回调冲突 } }) } /** * 停止播放本地语音 */ function _stopVoice() { wx.stopVoice(); } function _isVoice(url) { return url.endsWith(".silk"); } function _isLocalFile(url) { return url.startsWith("wxfile:") } function _download(url) { return new Promise((resolve, reject) => { wx.downloadFile({ url: url, success(res) { resolve(res.tempFilePath); }, fail(res){ reject(res); } }) }); } export default { play: play, stop: stop }