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
写在文章的最后
既然已经读到这里了,拜托大家再用一分钟时间,将文章转发到各位的朋友圈,微信群中。本公众号的成长需要您的支持!以上就是今天的文章,欢迎点赞并推荐给您的朋友!
阅读更多更新文章,请扫描下面二维码,关注微信公众号【面向对象思考】
上一篇文章实现了音频文件缓存功能,做到了一次下载多次播放。但是还有一个问题:这个功能是作为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
写在文章的最后
既然已经读到这里了,拜托大家再用一分钟时间,将文章转发到各位的朋友圈,微信群中。本公众号的成长需要您的支持!以上就是今天的文章,欢迎点赞并推荐给您的朋友!
阅读更多更新文章,请扫描下面二维码,关注微信公众号【面向对象思考】
相关文章推荐
- EA&UML日拱一卒-微信小程序实战:位置闹铃 (1)-功能介绍
- EA&UML日拱一卒-微信小程序实战:位置闹铃 (8)-WXML条件渲染
- EA&UML日拱一卒-微信小程序实战:位置闹铃 (13)-使用类优化程序结构
- EA&UML日拱一卒-微信小程序实战:位置闹铃 (2)-在地图上显示自己的位置
- EA&UML日拱一卒-微信小程序实战:位置闹铃 (3)-画面构成
- EA&UML日拱一卒-微信小程序实战:位置闹铃 (4)-从地图上选点
- EA&UML日拱一卒-微信小程序实战:位置闹铃 (10)-定时器
- EA&UML日拱一卒-微信小程序实战:位置闹铃 (7)-在画面之间共享数据
- EA&UML日拱一卒-微信小程序实战:位置闹铃 (9)-利用条件渲染实现列表控件
- EA&UML日拱一卒-微信小程序实战:位置闹铃 (5)-显示所在位置的信息
- EA&UML日拱一卒-微信小程序实战:位置闹铃 (11)-稍微聪明一点
- EA&UML日拱一卒-微信小程序实战:位置闹铃 (6)-播放音频
- EA&UML日拱一卒-0基础学习微信小程序(12)-ECMAScript5数组操作方法
- EA&UML日拱一卒-0基础学习微信小程序(3)- 创建自己的小程序账号
- EA&UML日拱一卒-0基础学习微信小程序(8)-事件处理和数据绑定
- EA&UML日拱一卒-0基础学习微信小程序(14)-最简单的指南针
- EA&UML日拱一卒-0基础学习微信小程序(15)-弄得像真的一样
- EA&UML日拱一卒-0基础学习微信小程序(4)- 安装开发工具
- EA&UML日拱一卒-0基础学习微信小程序(16)-使用移动平均消除抖动
- EA&UML日拱一卒-0基础学习微信小程序(2)- 关于小程序