小程序实现录音功能


Posted in Javascript onSeptember 22, 2020

本文实例为大家分享了小程序实现录音功能的具体代码,供大家参考,具体内容如下

首先判断权限

getPermission: function() {
  var that = this;
    wx.getSetting({
     success(res) {
      console.log(res.authSetting)
      if (res.authSetting["scope.record"] === false) {
       wx.showModal({
        title: '是否录音',
        content: '是否录音',
        success: function (tip) {
         if (tip.confirm) {
          wx.openSetting({
           success: function (data) {
            if (data.authSetting["scope.record"] === true) {
             wx.showToast({
              title: '授权成功',
              icon: 'success',
              duration: 1000
             })
             that.startLuYin()
             //授权成功之后,再调用chooseLocation选择地方
            } else {
             wx.showToast({
              title: '授权失败',
              icon: 'success',
              duration: 1000
             })
            }
           }
          })
         }
        }
       })
      }else{
       that.startLuYin()
      }
     }
    })
 },

授权成功后开始录音

startLuYin(){
  const options = {
   duration: 10000 * 6 * 10, //指定录音的时长,单位 ms
   sampleRate: 16000, //采样率
   numberOfChannels: 1, //录音通道数
   encodeBitRate: 96000, //编码码率
   format: 'mp3', //音频格式,有效值 aac/mp3
   frameSize: 50, //指定帧大小,单位 KB
  }
  //开始录音
  recorderManager.start(options);
  recorderManager.onStart(() => {
   console.log('recorder start');
   Countdown(this); //开始计时
  });
  //错误回调
  recorderManager.onError((res) => {
   console.log('recorder出错:' + res);
   console.log(res);
   clearTimeout(timer); //出错时停止计时
  })
 },

暂停录音

// 暂停录音
 pause: function() {
  var that = this;
  recorderManager.pause()
  recorderManager.onPause((res) => {
   console.log(res)
   console.log('暂停录音')
   clearTimeout(timer);
  })
 },

继续录音

//继续录音
 jixu: function() {
  var that = this;
  recorderManager.resume()
  Countdown(that); //开始计时
  recorderManager.onResume((res) => {
  })
 },

停止录音

//停止录音
 stop: function() {
  recorderManager.stop();
  recorderManager.onStop((res) => {
   this.tempFilePath = res.tempFilePath;
   console.log('停止录音', res.tempFilePath)
   clearTimeout(timer);
  })
 },

播放声音

//播放声音
 play: function() {
  innerAudioContext.autoplay = true
  innerAudioContext.src = this.tempFilePath,
   innerAudioContext.onPlay(() => {
    console.log('开始播放')
   })
  innerAudioContext.onError((res) => {
   console.log(res.errMsg)
   console.log(res.errCode)
  })
 },
// 倒计时
function Countdown(that) {
 timer = setTimeout(function() {
  console.log("----secondes----" + formatSeconds(secondes));
  secondes++;
  if (secondes >= 600) {
   recorderManager.stop();
   clearTimeout(timer);
  }
  that.setData({
   times: formatSeconds(secondes)
  });
  Countdown(that);
 }, 1000);
};
// 时间展示
function formatSeconds(value) {
 var secondTime = parseInt(value); // 秒
 var minuteTime = 0; // 分
 var hourTime = 0; // 小时
 if (secondTime > 60) { //如果秒数大于60,将秒数转换成整数
  //获取分钟,除以60取整数,得到整数分钟
  minuteTime = parseInt(secondTime / 60);
  //获取秒数,秒数取佘,得到整数秒数
  secondTime = parseInt(secondTime % 60);
  //如果分钟大于60,将分钟转换成小时
  if (minuteTime > 60) {
   //获取小时,获取分钟除以60,得到整数小时
   hourTime = parseInt(minuteTime / 60);
   //获取小时后取佘的分,获取分钟除以60取佘的分
   minuteTime = parseInt(minuteTime % 60);
  }
 }
 var result;
 //时间的展示方式为00:00
 if (secondTime < 10) {
  result = "0" + parseInt(secondTime);
 } else {
  result = "" + parseInt(secondTime);
 }
 if (minuteTime > 0) {
  if (minuteTime < 10) {
   result = "0" + parseInt(minuteTime) + ":" + result;
  } else {
   result = "" + parseInt(minuteTime) + ":" + result;
  }
 } else {
  result = "00:" + result;
 }
 //由于限制时长最多为三分钟,小时用不到
 if (hourTime > 0) {
  result = "" + parseInt(hourTime) + ":" + result;
 }
 return result;
}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
jquery 上下滚动广告
Jun 17 Javascript
Jquery 1.42 checkbox 全选和反选代码
Mar 27 Javascript
JS弹出对话框返回值代码(asp.net后台)
Dec 28 Javascript
JS保留小数点(四舍五入、四舍六入)实现思路及实例
Apr 25 Javascript
JavaScript中getUTCMinutes()方法的使用详解
Jun 10 Javascript
jQuery三级下拉列表导航菜单代码分享
Apr 15 Javascript
jQuery简单实现彩色云标签效果示例
Aug 01 Javascript
Bootstrap 3的box-sizing样式导致UEditor控件的图片无法正常缩放的解决方案
Sep 15 Javascript
完美解决node.js中使用https请求报CERT_UNTRUSTED的问题
Jan 08 Javascript
JS动态显示倒计时效果
Dec 12 Javascript
js实现单元格拖拽效果
Feb 10 Javascript
如何利用javascript接收json信息并进行处理
Aug 06 Javascript
webstorm建立vue-cli脚手架的傻瓜式教程
Sep 22 #Javascript
JavaScript实现多层颜色选项卡嵌套
Sep 21 #Javascript
JS实现无限轮播无倒退效果
Sep 21 #Javascript
js+canvas绘制图形验证码
Sep 21 #Javascript
vue中路由跳转不计入history的操作
Sep 21 #Javascript
JS实现放大镜效果
Sep 21 #Javascript
vue element ui validate 主动触发错误提示操作
Sep 21 #Javascript
You might like
phpfans留言版用到的install.php
2007/01/04 PHP
收集的DedeCMS一些使用经验
2007/03/17 PHP
一个PHP的String类代码
2010/04/20 PHP
php fsockopen中多线程问题的解决办法[翻译]
2011/11/09 PHP
php微信公众平台开发(一) 配置接口
2016/12/06 PHP
Yii2使用表单上传文件的实例代码
2017/08/03 PHP
php数组遍历类与用法示例
2019/05/24 PHP
Javascript调用XML制作连动下拉列表框
2006/06/25 Javascript
初学js插入节点appendChild insertBefore使用方法
2011/07/04 Javascript
JavaScript编程的10个实用小技巧
2014/04/18 Javascript
js限制input标签中只能输入中文
2015/06/26 Javascript
Javascript 实现简单计算器实例代码
2016/10/23 Javascript
浅谈Angular路由复用策略
2017/10/04 Javascript
JS随机数产生代码分享
2018/02/24 Javascript
vue源码解析之事件机制原理
2018/04/21 Javascript
vue弹窗组件的实现示例代码
2018/09/10 Javascript
jQuery实现的导航条点击后高亮显示功能示例
2019/03/04 jQuery
微信小程序封装的HTTP请求示例【附升级版】
2019/05/11 Javascript
elementUi vue el-radio 监听选中变化的实例代码
2019/06/28 Javascript
Vue SPA 初次进入加载动画实现代码
2019/11/14 Javascript
javascript读取本地文件和目录方法详解
2020/08/06 Javascript
Python随机生成数模块random使用实例
2015/04/13 Python
对Python 3.5拼接列表的新语法详解
2018/11/08 Python
Django的models中on_delete参数详解
2019/07/16 Python
用HTML5制作视频拼图的教程
2015/05/13 HTML / CSS
说出ArrayList,Vector, LinkedList的存储性能和特性
2015/01/04 面试题
市场营销专业个人自荐信格式
2013/09/21 职场文书
总裁办公室主任职责
2014/01/02 职场文书
第一批党的群众路线教育实践活动总结报告
2014/07/03 职场文书
119消防日活动总结
2014/08/29 职场文书
2014年圣诞节寄语
2014/12/08 职场文书
小学生读书笔记
2015/07/01 职场文书
地震捐款简报
2015/07/21 职场文书
2015年幼儿园国庆节活动总结
2015/07/30 职场文书
新年祝酒词大全
2015/08/11 职场文书
PHP对接阿里云虚拟号的实现(号码隐私保护)
2021/04/06 PHP