您的位置:首页 > 移动开发 > 微信开发

EA&UML日拱一卒-微信小程序实战:位置闹铃 (12)-这还不算完

2018-03-06 20:09 495 查看
因为重构代码,多花了一点时间,久等了。。
上一篇文章实现了音频文件缓存功能,做到了一次下载多次播放。但是还有一个问题:这个功能是作为app的一个功能而存在,如果想在其他场合使用就必须是代码层次的拷贝和粘贴。不好。
我们继续改进,将这部分功能做成一个通用,独立模块。
voiceplay.js
//voice playerfunction prepare(){ var that = this var info_pair = wx.getStorageSync('url2FileMap') || []; this.urlMap = new Map(); info_pair.forEach(function(pair){   that.urlMap.set(pair.url, pair.file); });}
function saveMap(){ var info_pair = [] this.urlMap.forEach(function(file, url, map){   info_pair.push({url:url, file:file}) }); wx.setStorageSync('url2FileMap', info_pair);}
 //播放铃声文件,优先使用缓存文件,根据需要下载。 //var url = that.getRingtoneUrl(index)function play(url) { const app = getApp() var that = this var savedFile = this.urlMap.get(url) if (savedFile != undefined) {   //已经存在缓存文件,直接播放缓存文件   app.addLog('播放缓存铃声')   wx.playVoice({     filePath: savedFile,     fail: function () {       //播放缓存文件失败,清除缓存文件信息       that.urlMap.delete(url);       that.saveMap();       //下载并播放缓存文件       that.downloadAndPlay(url)     },   }) } else {   //没有缓存文件,下载并播放   app.addLog('that.downloadAndPlay')   that.downloadAndPlay(url) }}
 //下载,保存,播放铃声文件。function downloadAndPlay(url) {  const app = getApp()   var that = this   that.downloadFile({     url: url,     success: function (savedFilePath) {       app.addLog('saveFileSuccess')       //下载成功,播放文件       app.addLog('播放下载铃声')       wx.playVoice({         filePath: savedFilePath,       })       //更新缓存文件信息。       that.urlMap.set(url,savedFilePath);       that.saveMap();     }   }) }
 //下载并保存文件 function downloadFile(parameter) {   const app = getApp()   var that = this   wx.downloadFile({     url: parameter.url,     success: function (res) {       //保存临时文件,以供将来使用       wx.saveFile({         tempFilePath: res.tempFilePath,         success: function (save_res) {           parameter.success(save_res.savedFilePath)         }       })     },   }) }
module.exports = { prepare: prepare, play: play, downloadAndPlay:downloadAndPlay, downloadFile:downloadFile, saveMap:saveMap}
用法
经过上述处理,我们就得到了一个通用的音频播放模块,可以在直接在其他小程序中使用。一共分三步,每步就一行。

导入模块
const voiceplayer = require('./utils/voiceplayer.js')
目录有可能需要根据目录结构修改。

初始化

voiceplayer.prepare()
调用prepare函数,取得已经保存的缓存文件信息。

播放音频
voiceplayer.play(media_file_url)
调用play函数,播放指定的音频文件。如果没有缓存文件则首先下载该文件播放并保存以供下次使用。音频文件需要另外准备。
代码下载链接

voiceplayer.js https://raw.githubusercontent.com/xueweiguo/alarmmap/master/utils/voiceplayer.js
写在文章的最后

既然已经读到这里了,拜托大家再用一分钟时间,将文章转发到各位的朋友圈,微信群中。本公众号的成长需要您的支持!以上就是今天的文章,欢迎点赞并推荐给您的朋友!

阅读更多更新文章,请扫描下面二维码,关注微信公众号【面向对象思考】
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  小程
相关文章推荐