之前有做过微信开发中的语音聊天的功能,今天觉得写出来。
首先签名这个就不需要多说,
wx.config({
debug: ‘’,
appId: '', // 必填,公众号的唯一标识
timestamp: '',
nonceStr: '',
signature: '',
jsApiList: ['startRecord','stopRecord','uploadVoice','downloadVoice','playVoice','translateVoice' ……] // 必填,需要使用的JS接口列表
});
开始对语音录制开始进行操作:
wx.startRecord({
success: function(){
localStorage.rainAllowRecord = 'true';
voiceTime = setInterval(function(){
a++;
if(a >= 60){
wx.stopRecord({
success: function (res) {
voice.localId = res.localId;
$("#voiceBtn").css("background","#ddd");
uploadVoice();
},
fail: function (res) {
alert(JSON.stringify(res));
}
});
clearInterval(voiceTime);
}
},1000);
},
cancel: function () {
alert('用户拒绝授权录音');
}
});
其中 wx.startRecord() 是调用微信开始录音的接口。 这里有一个授权问题,第一次进行录制语音时会提示用户授权,成功后才开始录音。
个人觉得虽然是语音聊天,其实就是将语音录制下来,然后再播放,也许有了这种想法可以让一些没有头绪的人有了一些思路。
接下来就是停止录音 wx.stopRecord()接口
wx.stopRecord({
success: function (res) {
voice.localId = res.localId;
uploadVoice(); // 这个位置是上传语音
},
fail: function (res) {
alert(JSON.stringify(res));
}
});
当语音录制结束就要进行上传,这里先上传到微信上传语音到微信服务器,
wx.uploadVoice({
localId: '',
isShowProgressTips: 1, // 默认为1,显示进度提示
success: function (res) {
var serverId = res.serverId; // 返回音频的服务器端ID
}
});
到这里其实已经完成了语音的录制以及上传到微信服务器,但是上传到微信服务器之后只保存三天,也就是说考虑到聊天记录等业务的时候是达不到需求的
这个时候我选择将微信服务器中的这个语音下载,并转存到如七牛云的方式。
wx.downloadVoice({
serverId: voice.serverId ,// 需要下载的音频的服务器端ID,由uploadVoice接口获得
isShowProgressTips: 0, // 默认为1,显示进度提示
success: function (res) {
var localId2 = res.localId; // 返回音频的本地ID
}
});
通过这个可以wx.downloadVoice()方法可以下载语音,
微信上下载的语音是一个url,从浏览器打开可以直接下载成一个amr格式的语音文件,(微信语音下载文件只是amr格式)
我把这个URL通过
InputStream in=new URL(requestUrl).openConnection().getInputStream(); //创建连接、输入流
转成二进制流,传给七牛云存储,同时将url拼下来存入数据库。
可能写的有一点乱,希望对你有帮助。