微信小程序实现录音功能


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 相关文章推荐
基于jQuery的实现简单的分页控件
Oct 10 Javascript
JQuery each()嵌套使用小结
Apr 18 Javascript
动态创建script在IE中缓存js文件时导致编码的解决方法
May 04 Javascript
JavaScript获得表单target属性的方法
Apr 02 Javascript
jQuery带进度条全屏图片轮播特效代码分享
Jun 28 Javascript
js图片轮播手动切换效果
Nov 10 Javascript
Vue.js 2.0 和 React、Augular等其他前端框架大比拼
Oct 08 Javascript
微信小程序上传图片到服务器实例代码
Nov 07 Javascript
vue devtools的安装与使用教程
Aug 08 Javascript
vue实现微信分享功能
Nov 28 Javascript
layui 动态设置checbox 选中状态的例子
Sep 02 Javascript
vue resource发送请求的几种方式
Sep 30 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桌面中心(四) 数据显示
2007/03/11 PHP
PHP编程 SSO详细介绍及简单实例
2017/01/13 PHP
调试代码导致IE出错的避免方法
2014/04/04 Javascript
innerHTML在IE中报错解决方案
2014/12/15 Javascript
javascript+canvas实现刮刮卡抽奖效果
2015/07/29 Javascript
CSS中position属性之fixed实现div居中
2015/12/14 Javascript
JavaScript的removeChild()函数用法详解
2015/12/27 Javascript
jQuery常用的一些技巧汇总
2016/03/26 Javascript
gulp-htmlmin压缩html的gulp插件实例代码
2016/06/06 Javascript
JS作用域闭包、预解释和this关键字综合实例解析
2016/12/16 Javascript
VUE 3D轮播图封装实现方法
2018/07/03 Javascript
轻松解决JavaScript定时器越走越快的问题
2019/05/13 Javascript
微信小程序如何调用图片接口API并居中显示
2019/06/29 Javascript
Vuejs中的watch实例详解(监听者)
2020/01/05 Javascript
Vue路由的模块自动化与统一加载实现
2020/06/05 Javascript
从零开始在vue-cli4配置自适应vw布局的实现
2020/06/08 Javascript
vue自定义指令限制输入框输入值的步骤与完整代码
2020/08/30 Javascript
在vue中使用Echarts画曲线图的示例
2020/10/03 Javascript
js回到页面指定位置的三种方式
2020/12/17 Javascript
[56:01]2018DOTA2亚洲邀请赛 3.31 小组赛 B组 Effect vs EG
2018/03/31 DOTA
在Python中使用matplotlib模块绘制数据图的示例
2015/05/04 Python
Python将图片批量从png格式转换至WebP格式
2020/08/22 Python
Python基于socket实现简单的即时通讯功能示例
2018/01/16 Python
使用python实现BLAST
2018/02/12 Python
使用Python进行QQ批量登录的实例代码
2018/06/11 Python
Selenium定时刷新网页的实现代码
2018/10/31 Python
python 统计文件中的字符串数目示例
2019/12/24 Python
python json.dumps() json.dump()的区别详解
2020/07/14 Python
全球才华横溢工匠的家居装饰、珠宝和礼物:NOVICA
2021/01/22 全球购物
J2SDK1.5与J2SDK5.0有什么区别
2012/09/19 面试题
解释DataSet(ds) 和 ds as DataSet 的含义
2014/07/27 面试题
Linux如何压缩可执行文件
2013/10/21 面试题
科技馆观后感
2015/06/08 职场文书
中国式结婚:司仪主持词(范文)
2019/07/25 职场文书
解析原生JS getComputedStyle
2021/05/25 Javascript
nginx刷新页面出现404解决方案(亲测有效)
2022/03/18 Servers