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

小程序全新API-----wx.getRecorderManager()录音管理器的使用

2018-01-18 12:04 253 查看
笔者做过一个语音红包的小程序,由于现在小程序API的迭代,小程序媒体API都变成了统一的管理器,在全局使用,由于官方文档实在坑爹,所以我写下这篇踩坑之旅,方便各位码农学习,有帮助的朋友可以点赞,如果有转载请获取本人同意。
  话不多说,我们现在就来讲讲录音功能如何实现
  首先,如何实现长按录音功能



 在文档中,我们使用catch作为事件的前缀,表示阻止事件向上冒泡,
<button type="{{types}}" class='{{bt_color}}' catchtouchstart="SayPassword" catchtouchend="toServer" wx:if="{{rob_bol}}">{{bt_text}}</button>此处表明当手指放上去时调用SayPassword,离开时调用toServer,这么做的目的实际上就是确定录音的时长,我们在后面会详细说明现在开始正式说明录音功能如何实现,
第一步:声明一个设置对象,
   


const options = {
duration: Timestart,
sampleRate: 16000,//采样率,有效值 8000/16000/44100
numberOfChannels: 1,//录音通道数,有效值 1/2
encodeBitRate: 96000,//编码码率
format: 'mp3'//音频格式,有效值 aac/mp3
frameSize: 50//指定帧大小
}
其中我们怎么设置这个options中的duration呢,这个时候就要用到我们事件event。
初始化我们的option之后我们可以开始调用我们的录音管理器,每一次使用录音管理器,都要声明一次wx.getRecorderManager(),当然你可以放在onLoad,不过我这样是方便我自己逻辑
SayPassword: function (e) {
var Timestart = e.timeStamp
var recorderManager = wx.getRecorderManager();
const options = {
duration: Timestart,
sampleRate: 16000,
numberOfChannels: 1,
encodeBitRate: 96000,
format: 'mp3',
frameSize: 50
}
recorderManager.start(options) this.setData({ Timestart: Timestart })
}


这样就实现了第一步,让录音开始,那么我们需要一些花式操作,去提醒用户,或者说让他们知道他们正在录音,并且我们要相对应的限制他们的录音时长 这个时候就要轮到我们的交互反馈API,以及JS有关于队列的方法使用了,笔者在这里提供一种思路,就不贴代码了,最后
a0f2
提醒各位,最好把Timestart发送到视图层,我们要对录音时长做一个限制
当用户一直长按的的时候,我们要进行一次判断,如果Timestart的时间过长,给他做一个动画限制,或者温馨提醒,当然也可以使用定时器进行限制

第二部:手指离开时事件
此时我们明确我们需要做到的步骤:1.判断录音时长是否满足条件,2.把文件上传至服务器,接下来让我们开始操作,
当我们把手指离开按键的时候,就要把录音上传至服务器,并且执行recorderManager.stop()方法停止录音管理器,此时我们再次回顾toServer函数
toServer:function(e){
var recorderManager = wx.getRecorderManager();//获取全局唯一的录音管理器
var Timestart = this.data.Timestart;
var Timeout = e.timeStamp;
var TimeIng = 0;//录音的时长
TimeIng = Timeout - Timestart;
}


相信很多同学到这里就看明白了,Timeing就是记录了整个录音的时间,那么我们以此就可以判断,比如少年你录音时间太短啦? 这里我们考虑录音失败的情况,那么我们需要在toServer调用
recorderManager.onError((res) => {
console.log('小伙砸你录音失败了!')
})
, 那么如果满足你所需要的录音时长,我们就要开始上大招了
recorderManager.onStop((res) => {
var tempFilePath = res.tempFilePath;// 文件临时路径
var temp = tempFilePath.replace('.mp3', '')
console.log('劳资获取到文件了,开始上传')
})
当我们在onstop函数的res里,就可以拿到文件的临时路径,我们需要去除一些我们不需要的字段,当然看你们后台大大的需要了,我一并奉上 此刻我们开始调用
wx.uploadFile({

url:'这里填写路径地址',
filePath: tempFilePath,
name: temp,
header: {
contentType: "multipart/form-data",//按需求增加
},
formData: {
file: tempFilePath,
//看后台需要什么传什么过去,这里我传两个,一个是临时路径,一个是录音时长
time: TimeIng,
},
success: function (res) {
//这里你可以根据后台传过来的res进行任性的操作,是的。。任性!!!
}
至此,录音API基本也 没什么事情了,其实重点如下: 1.选择合适的事件触发函数, 2.把录音管理器放全局,或者放在手指触发及释放的两位置,个放一个。当然你开心。。我习惯了两个都放 3.使用上传文件的API,将临时路径的MP3发送至后台,然后后台处理,前台依据后台的返回进行相应的判断
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: