微信小程序实现录音功能


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 相关文章推荐
ExtJS 2.0实用简明教程 之ExtJS版的Hello
Apr 29 Javascript
JS 显示当前日期与时间的代码
Mar 24 Javascript
Jquery解析json数据详解
Dec 26 Javascript
node.js中的fs.appendFile方法使用说明
Dec 17 Javascript
JavaScript中reduce()方法的使用详解
Jun 09 Javascript
jQuery实现的图片轮播效果完整示例
Sep 12 Javascript
JS中Select下拉列表类(支持输入模糊查询)功能
Jan 17 Javascript
手机注册发送验证码倒计时的简单实例
Nov 15 Javascript
js canvas画布实现高斯模糊效果
Nov 27 Javascript
vue-cli 目录结构详细讲解总结
Jan 15 Javascript
js实现一个页面多个倒计时的3种方法
Feb 25 Javascript
vue循环中点击选中再点击取消(单选)的实现
Sep 10 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
德生S2000电路分析
2021/03/02 无线电
页面利用渐进式JPEG来提升用户体验度
2014/12/01 PHP
PHP实现HTTP断点续传的方法
2015/06/17 PHP
PHP输出多个元素的排列或组合的方法
2017/03/14 PHP
javascript 日期时间函数(经典+完善+实用)
2009/05/27 Javascript
IE DOM实现存在的部分问题及解决方法
2009/07/25 Javascript
如何确保JavaScript的执行顺序 之实战篇
2011/03/03 Javascript
线路分流自动智能跳转代码,自动选择最快镜像网站(js)
2011/10/31 Javascript
判断某个字符在一个字符串中是否存在的js代码
2014/02/28 Javascript
js调试系列 断点与动态调试[基础篇]
2014/06/18 Javascript
JavaScript中的索引数组、关联数组和静态数组、动态数组讲解
2014/11/08 Javascript
jquery移动节点实例
2015/01/14 Javascript
jQuery实现的超简单点赞效果实例分析
2015/12/31 Javascript
Bootstrap CSS组件之按钮下拉菜单
2016/12/17 Javascript
100多个基础常用JS函数和语法集合大全
2017/02/16 Javascript
JavaScript 获取元素在父节点中的下标(推荐)
2017/06/28 Javascript
JS库之ParticlesJS使用简介
2017/09/12 Javascript
vue-cli安装使用流程步骤详解
2018/11/08 Javascript
webpack3里使用uglifyjs压缩js时打包报错的解决
2018/12/13 Javascript
使用 vue 实现灭霸打响指英雄消失的效果附demo
2019/05/06 Javascript
JS实现的自定义map方法示例
2019/05/17 Javascript
python使用xlrd模块读写Excel文件的方法
2015/05/06 Python
Python绘制七段数码管实例代码
2017/12/20 Python
在Python3 numpy中mean和average的区别详解
2019/08/24 Python
关于tf.matmul() 和tf.multiply() 的区别说明
2020/06/18 Python
Jmeter调用Python脚本实现参数互相传递的实现
2021/01/22 Python
函授自我鉴定
2013/11/06 职场文书
领导干部“四风”查摆问题个人整改措施
2014/10/28 职场文书
2014年置业顾问工作总结
2014/11/17 职场文书
2014年设备管理工作总结
2014/11/26 职场文书
超强台风观后感
2015/06/09 职场文书
投诉书范文
2015/07/02 职场文书
退休欢送会致辞
2015/07/31 职场文书
CSS 圆形进度栏
2021/04/06 HTML / CSS
解决SpringBoot文件上传临时目录找不到的问题
2021/07/01 Java/Android
nginx访问报403错误的几种情况详解
2022/07/23 Servers