微信小程序实现录音功能


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 相关文章推荐
Gird事件机制初级读本
Mar 10 Javascript
教你如何解密js/vbs/vbscript加密的编码异处理小结
Jun 25 Javascript
js获取事件源及触发该事件的对象
Oct 24 Javascript
JavaScript通过function定义对象并给对象添加toString()方法实例分析
Mar 23 Javascript
基于jquery实现日历签到功能
Sep 11 Javascript
深入分析javascript中console命令
Aug 14 Javascript
Bootstrap CSS组件之分页(pagination)和翻页(pager)
Dec 17 Javascript
fullPage.js和CSS3实现全屏滚动效果
May 05 Javascript
vue2.0多条件搜索组件使用详解
Mar 26 Javascript
利用ES6的Promise.all实现至少请求多长时间的实例
Aug 28 Javascript
vue 简单自动补全的输入框的示例
Mar 12 Javascript
JavaScript中Dom操作实例详解
Jul 08 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
mysql5的sql文件导入到mysql4的方法
2008/10/19 PHP
解析php中的escape函数
2013/06/29 PHP
ThinkPHP字符串函数及常用函数汇总
2014/07/18 PHP
php获取网站百度快照日期的方法
2015/07/29 PHP
javascript判断单选框或复选框是否选中方法集锦
2007/04/04 Javascript
Add a Formatted Table to a Word Document
2007/06/15 Javascript
javascript实现的网页局布刷新效果
2008/12/01 Javascript
JQuery页面的表格数据的增加与分页的实现
2013/12/10 Javascript
常用的Javascript数据验证插件
2015/08/04 Javascript
浅析JavaScript访问对象属性和方法及区别
2015/11/16 Javascript
JS字符串的切分用法实例
2016/02/22 Javascript
深入理解js数组的sort排序
2016/05/28 Javascript
原生js的RSA和AES加密解密算法
2016/10/08 Javascript
详解nodejs 文本操作模块-fs模块(三)
2016/12/22 NodeJs
js鼠标经过tab选项卡时实现切换延迟
2017/03/24 Javascript
vue-cli单页应用改成多页应用配置详解
2017/07/14 Javascript
详解Angular调试技巧之报错404(not found)
2018/01/31 Javascript
vue axios请求拦截实例代码
2018/03/29 Javascript
微信小程序手机号码验证功能的实例代码
2018/08/28 Javascript
如何用Node写页面爬虫的工具集
2018/10/26 Javascript
微信小程序实现下拉框功能
2019/07/16 Javascript
Python正则表达式匹配ip地址实例
2014/10/09 Python
python 并发编程 多路复用IO模型详解
2019/08/20 Python
Ubuntu18.04安装 PyCharm并使用 Anaconda 管理的Python环境
2020/04/08 Python
python实例化对象的具体方法
2020/06/17 Python
python 读取yaml文件的两种方法(在unittest中使用)
2020/12/01 Python
Python就将所有的英文单词首字母变成大写
2021/02/12 Python
美国电力供应商店/电气批发商:USESI
2018/10/12 全球购物
英国领先的鞋类零售商:Shoe Zone
2018/12/13 全球购物
简历中个人求职的自我评价模板
2013/11/29 职场文书
高中英语演讲稿范文
2014/04/24 职场文书
师恩难忘教学反思
2014/04/27 职场文书
如何书写先进事迹材料?
2019/07/02 职场文书
golang实现一个简单的websocket聊天室功能
2021/10/05 Golang
SQL Server使用导出向导功能
2022/04/08 SQL Server