你好朋友们,我是你们的Blogger朋友jahanxah。今天我们一起来在小程序里面实现录音并播放语音资源。本节课用了colorui组建库,感谢colorui。
第一步(写wxml部分)
我们先创建一个audio语音播放组建和一个按钮,为了简单一点我不装修了。audio是原声组建,那个按钮是有bindtouchstart和bindtouchend两个属性。bindtouchstart是长按事件的开始(长按开始的时候发生的事件)事件,bindtouchend是长按事件的结束(松开手的发生的事件)事件。
<!--index.wxml-->
<cu-custom bgColor="bg-blue" class="uy" isCustom="{{true}}"> <view slot="content">小程序实现录音</view> </cu-custom> <view class="container"> <view> <audio src="{{src}}" controls></audio> </view> <view class="margin-top"> <button bindtouchstart="luyin_start" bindtouchend="luyin_end" class="cu-btn bg-blue uy text-xl" style="margin: auto;width: 400rpx;height: 80rpx;"> <text class="cuIcon-voice margin-sm"></text> 请长按说话 </button> </view> </view>
第二步 逻辑部分
现在我们一起来实现一下逻辑部分。首先我们要获取使用麦克风的权限,如果授权成功的话开始录音,授权失败的话提示录音失败。
<!--index.wxml-->
luyin_start() { var that = this const options = { duration: 600000, //指定录音的时长,单位 ms sampleRate: 16000, //采样率 numberOfChannels: 1, //录音通道数 encodeBitRate: 96000, //编码码率 format: 'mp3', //音频格式,有效值 aac/mp3 frameSize: 50, //指定帧大小,单位 KB } wx.authorize({ scope: 'scope.record', success() { // console.log("录音授权成功"); //第一次成功授权后 状态切换为2 that.setData({ status: 2, }) let luyin_dur = that.data.luyin_dur; recorderManager.start(options); // setTimeout(luyin1_dur+1, 1000) // setInterval(luyin1_dur+1,1000) recorderManager.onStart(() => { wx.showToast({ title: '正在录音', icon: 'loading', duration: luyin_dur }); }); //错误回调 recorderManager.onError((res) => { console.log(res); }) }, fail() { console.log("第一次录音授权失败"); wx.showModal({ title: '提示', content: '您未授权录音,功能将无法使用', showCancel: true, confirmText: "授权", confirmColor: "#52a2d8", success: function (res) { if (res.confirm) { //确认则打开设置页面(重点) wx.openSetting({ success: (res) => { console.log(res.authSetting); if (!res.authSetting['scope.record']) { //未设置录音授权 console.log("未设置录音授权"); wx.showModal({ title: '提示', content: '您未授权录音,功能将无法使用', showCancel: false, success: function (res) { }, }) } else { //第二次才成功授权 console.log("设置录音授权成功"); that.setData({ status: 2, }) recorderManager.start(options); recorderManager.onStart(() => { console.log('recorder start') }); //错误回调 recorderManager.onError((res) => { console.log(res); }) } }, fail: function () { console.log("授权设置录音失败"); } }) } else if (res.cancel) { console.log("cancel"); } }, fail: function () { console.log("openfail"); } }) } }) }