微信小程序实现录音功能


Posted in Javascript onNovember 22, 2019

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

release.wxml

<!--pages/index/release/release.wxml-->
<scroll-view>
 <view wx:if="{{voices}}" class="common-list" style="margin-bottom:120rpx;">
 <block wx:for="{{voices}}">
  <view class="board">
  <view class="cell">
   <view class="cell-bd" data-key="{{item.filePath}}" bindtap="gotoPlay">
   <view class="date">存储路径:{{item.filePath}}</view>
   <view class="date">存储时间:{{item.createTime}}</view>
   <view class="date">音频大小:{{item.size}}KB</view>
   </view>
 
  </view>
  </view>
 </block>
 </view>
</scroll-view>
 
<view wx:if="{{isSpeaking}}" class="microphone">
 <image class="sound-style" src="/images/speak.png"></image>
 <image wx:if="{{j==2}}" class="sound-style" src="/images/speak.png"></image>
 <image wx:if="{{j==3}}" class="sound-style" src="/images/speak.png"></image>
 <image wx:if="{{j==4}}" class="sound-style" src="/images/speak.png"></image>
 <image wx:if="{{j==5}}" class="sound-style" src="/images/speak_end.png"></image>
</view>
<view class="record-style">
 <button class="btn-style" bindtouchstart="touchdown" bindtouchend="touchup">按住 录音</button>
</view>

release.wxss

/* pages/index/release/release.wxss */
.microphone{ 
 position:fixed;
 left: 250rpx;
 bottom: 0;
 height: 240rpx; 
 width: 240rpx; 
 border-radius: 20rpx; 
 margin: 50% auto; 
 background: #26A5FF; 
} 
.item-style{ 
 margin-top: 30rpx; 
 margin-bottom: 30rpx; 
} 
.text-style{ 
 text-align: center; 
 
} 
.record-style{ 
 position: fixed; 
 bottom: 0; 
 left: 0; 
 height: 120rpx; 
 width: 100%; 
} 
.btn-style{ 
 margin-left: 30rpx; 
 margin-right: 30rpx; 
} 
 
.sound-style{ 
 position: absolute; 
 width: 74rpx; 
 height:150rpx; 
 margin-top: 45rpx; 
 margin-left: 83rpx; 
} 
 
 
.board { 
 overflow: hidden; 
 border-bottom: 2rpx solid #26A5FF; 
} 
/*列布局*/ 
.cell{ 
 display: flex; 
 margin: 20rpx; 
} 
.cell-hd{ 
 margin-left: 10rpx; 
 color: #885A38; 
} 
.cell .cell-bd{ 
 flex:1; 
 position: relative; 
  
} 
/**只显示一行*/ 
.date{ 
 font-size: 30rpx; 
 text-overflow: ellipsis; 
 white-space:nowrap; 
 overflow:hidden; 
}

release.js

// pages/index/release/release.js
var app = getApp()
Page({
 data: {
 j: 1,//帧动画初始图片 
 isSpeaking: false,//是否正在说话 
 voices: [],//音频数组 
 },
 onLoad: function () {
 },
 //手指按下 
 touchdown: function () {
 console.log("手指按下了...")
 console.log("new date : " + new Date)
 var _this = this;
 speaking.call(this);
 this.setData({
  isSpeaking: true
 })
 //开始录音 
 wx.startRecord({
  success: function (res) {
  //临时路径,下次进入小程序时无法正常使用 
  var tempFilePath = res.tempFilePath
  console.log("tempFilePath: " + tempFilePath)
  //持久保存 
  wx.saveFile({
   tempFilePath: tempFilePath,
   success: function (res) {
   //持久路径 
   //本地文件存储的大小限制为 100M 
   var savedFilePath = res.savedFilePath
   console.log("savedFilePath: " + savedFilePath)
   }
  })
  wx.showToast({
   title: '恭喜!录音成功',
   icon: 'success',
   duration: 1000
  })
  //获取录音音频列表 
  wx.getSavedFileList({
   success: function (res) {
   var voices = [];
   for (var i = 0; i < res.fileList.length; i++) {
    //格式化时间 
    var createTime = new Date(res.fileList[i].createTime)
    //将音频大小B转为KB 
    var size = (res.fileList[i].size / 1024).toFixed(2);
    var voice = { filePath: res.fileList[i].filePath, createTime: createTime, size: size };
    console.log("文件路径: " + res.fileList[i].filePath)
    console.log("文件时间: " + createTime)
    console.log("文件大小: " + size)
    voices = voices.concat(voice);
   }
   _this.setData({
    voices: voices
   })
   }
  })
  },
  fail: function (res) {
  //录音失败 
  wx.showModal({
   title: '提示',
   content: '录音的姿势不对!',
   showCancel: false,
   success: function (res) {
   if (res.confirm) {
    console.log('用户点击确定')
    return
   }
   }
  })
  }
 })
 },
 //手指抬起 
 touchup: function () {
 console.log("手指抬起了...")
 this.setData({
  isSpeaking: false,
 })
 clearInterval(this.timer)
 wx.stopRecord()
 },
 //点击播放录音 
 gotoPlay: function (e) {
 var filePath = e.currentTarget.dataset.key;
 //点击开始播放 
 wx.showToast({
  title: '开始播放',
  icon: 'success',
  duration: 1000
 })
 wx.playVoice({
  filePath: filePath,
  success: function () {
  wx.showToast({
   title: '播放结束',
   icon: 'success',
   duration: 1000
  })
  }
 })
 }
})
//麦克风帧动画 
function speaking() {
 var _this = this;
 //话筒帧动画 
 var i = 1;
 this.timer = setInterval(function () {
 i++;
 i = i % 5;
 _this.setData({
  j: i
 })
 }, 200);
}

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

Javascript 相关文章推荐
提交按钮的name='submit'引起的js失效问题及原因
Feb 25 Javascript
JavaScript对象学习小结
Sep 02 Javascript
基于JavaScript代码实现微信扫一扫下载APP
Dec 30 Javascript
微信小程序技巧之show内容展示,上传文件编码问题
Jan 23 Javascript
jquery中绑定事件的异同
Feb 28 Javascript
Vee-Validate的使用方法详解
Sep 22 Javascript
iview table高度动态设置方法
Mar 14 Javascript
react中使用swiper的具体方法
May 15 Javascript
JS实现处理时间,年月日,星期的公共方法示例
May 31 Javascript
基于JS判断对象是否是数组
Jan 10 Javascript
JS猜数字游戏实例讲解
Jun 30 Javascript
我所理解的JavaScript中的this指向
Sep 04 Javascript
小程序实现按下录音松开识别语音
Nov 22 #Javascript
小程序采集录音并上传到后台
Nov 22 #Javascript
webpack优化之代码分割与公共代码提取详解
Nov 22 #Javascript
小程序实现录音上传功能
Nov 22 #Javascript
vue使用recorder.js实现录音功能
Nov 22 #Javascript
微信小程序开发摇一摇功能
Nov 22 #Javascript
js实现录音上传功能
Nov 22 #Javascript
You might like
用PHP发电子邮件
2006/10/09 PHP
五个PHP程序员工具
2008/05/26 PHP
VPS中使用LNMP安装WordPress教程
2014/12/28 PHP
Yii2超好用的日期和时间组件(值得收藏)
2016/05/05 PHP
php htmlentities()函数的定义和用法
2016/05/13 PHP
使用GruntJS构建Web程序之合并压缩篇
2014/06/06 Javascript
JavaScript对象数组排序函数及六个用法
2015/12/23 Javascript
jQuery formValidator表单验证
2016/01/07 Javascript
JQuery和HTML5 Canvas实现弹幕效果
2017/01/04 Javascript
Vue.js实现微信过渡动画左右切换效果
2017/06/13 Javascript
nodejs中Express与Koa2对比分析
2018/02/06 NodeJs
bootstrap 日期控件 datepicker被弹出框dialog覆盖的解决办法
2019/07/09 Javascript
javascript实现贪吃蛇小练习
2020/07/05 Javascript
[03:24]DOTA2超级联赛专访hao 大翻盘就是逆袭
2013/05/24 DOTA
介绍Python中几个常用的类方法
2015/04/08 Python
Python中装饰器兼容加括号和不加括号的写法详解
2017/07/05 Python
Python实现求笛卡尔乘积的方法
2017/09/16 Python
Python3将jpg转为pdf文件的方法示例
2019/12/13 Python
在django中form的label和verbose name的区别说明
2020/05/20 Python
Python基于Twilio及腾讯云实现国际国内短信接口
2020/06/18 Python
PyQt实现计数器的方法示例
2021/01/18 Python
CSS3制作3D立方体loading特效
2020/11/09 HTML / CSS
全球酒店比价网:HotelsCombined
2017/06/20 全球购物
递归实现回文判断(如:abcdedbca就是回文,判断一个面试者对递归理解的简单程序)
2013/04/28 面试题
linux面试题参考答案(6)
2016/06/23 面试题
Shell编程面试题
2012/05/30 面试题
一年级班主任感言
2014/03/08 职场文书
学习2014年全国两会心得体会
2014/03/12 职场文书
有关爱国演讲稿
2014/05/07 职场文书
微笑面对生活演讲稿
2014/09/23 职场文书
2014年煤矿安全工作总结
2014/12/04 职场文书
学校运动会通讯稿
2015/07/18 职场文书
运动会口号霸气押韵
2015/12/24 职场文书
2016党员干部政治学习心得体会
2016/01/23 职场文书
Python带你从浅入深探究Tuple(基础篇)
2021/05/15 Python
MySQL利用UNION连接2个查询排序失效详解
2021/11/20 MySQL