微信小程序实现录音功能


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 相关文章推荐
JavaScript.Encode手动解码技巧
Jul 14 Javascript
合并table相同单元格的jquery插件分享(很精简)
Jun 20 Javascript
Lua表达式和控制结构学习笔记
Dec 15 Javascript
如何使用HTML5地理位置定位功能
Apr 27 Javascript
判断访客终端类型集锦
Jun 05 Javascript
1秒50万字!js实现关键词匹配
Aug 01 Javascript
AngularJS基础 ng-switch 指令简单示例
Aug 03 Javascript
微信小程序 textarea 详解及简单使用方法
Dec 05 Javascript
jQuery validate 验证radio实例
Mar 01 Javascript
javascript实现数字配对游戏的实例讲解
Dec 14 Javascript
基于vue开发的在线付费课程应用过程
Jan 25 Javascript
jQuery实现广告显示和隐藏动画
Jul 04 jQuery
小程序实现按下录音松开识别语音
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 auth_http类库进行身份效验
2009/03/19 PHP
PHP高级对象构建 工厂模式的使用
2012/02/05 PHP
PHP 类相关函数的使用详解
2013/05/10 PHP
php生成静态页面的简单示例
2014/04/17 PHP
从PHP的源码中深入了解stdClass类
2014/04/18 PHP
php使用mysqli向数据库添加数据的方法
2015/03/20 PHP
php实现表单多按钮提交action的处理方法
2015/10/24 PHP
使用php从身份证号中获取一系列线索(星座、生肖、生日等)
2016/05/11 PHP
Open and Print a Word Document
2007/06/15 Javascript
jQuery实现原理的模拟代码 -6 代码下载
2010/08/16 Javascript
Jquery提交表单 Form.js官方插件介绍
2012/03/01 Javascript
js调用后台servlet方法实例
2013/06/09 Javascript
基于JavaScript 下namespace 功能的简单分析
2013/07/05 Javascript
浅析javascript中函数声明和函数表达式的区别
2015/02/15 Javascript
js实现文本框支持加减运算的方法
2015/08/19 Javascript
jquery遍历table的tr获取td的值实现方法
2016/05/19 Javascript
JavaScript数据类型学习笔记分享
2016/09/01 Javascript
关于vue-router路径计算问题
2017/05/10 Javascript
jquery之基本选择器practice(实例讲解)
2017/09/30 jQuery
详解Angular如何正确的操作DOM
2018/07/06 Javascript
聊聊鉴权那些事(推荐)
2019/08/22 Javascript
VUE使用 wx-open-launch-app 组件开发微信打开APP功能
2020/08/11 Javascript
electron踩坑之dialog中的callback解决
2020/10/06 Javascript
解决vue页面刷新,数据丢失的问题
2020/11/24 Vue.js
python 实现一次性在文件中写入多行的方法
2019/01/28 Python
Python Django 前后端分离 API的方法
2019/08/28 Python
Python 列表中的修改、添加和删除元素的实现
2020/06/11 Python
财务管理职业生涯规划范文
2013/12/27 职场文书
分厂厂长岗位职责
2013/12/29 职场文书
简历里的自我评价
2014/01/31 职场文书
庆祝三八妇女节标语
2014/10/09 职场文书
2014年人力资源部工作总结
2014/11/19 职场文书
预备党员半年考察意见
2015/06/01 职场文书
2016小学教师读书心得体会
2016/01/13 职场文书
先进个人事迹材料(2016推荐版)
2016/03/01 职场文书
mysql字符串截取函数小结
2021/04/05 MySQL