uniapp 微信小程序:RecorderManager 录音DEMO

news2024/12/26 11:25:18

uniapp 微信小程序:RecorderManager 录音DEMO

  • 简介
  • index.vue
  • 参考资料

简介

使用 RecorderManager 实现录音。及相关的基本操作。(获取文件信息,上传文件)
此图包含Demo中用于上传测试的服务端程序,下载后用解压工具打开即可
此图包含Demo中用于上传测试的服务端程序upload.exe,下载后用解压工具打开即可。
上传接口如代码中所示:http://127.0.0.1:8999/upload
上传成功的文件,保存在upload.exe所在目录。

index.vue

单文件demo,创建个空项目贴复制粘贴即可。

<template>
	<view class="content">
		<view class="title">{{title}}</view>
		<view>
			<button :disabled="!btnStatus[0]" @click="startRecord">开始录音</button>
			<button :disabled="!btnStatus[1]" @click="endRecord">停止录音</button>
			<button :disabled="!btnStatus[2]" @click="playVoice">播放录音</button>
			<button :disabled="!btnStatus[3]" @click="upload">上传录音</button>
		</view>
	</view>
</template>

<script>
	const recorderManager = uni.getRecorderManager();			// 获取全局唯一的录音管理器
	const innerAudioContext = uni.createInnerAudioContext();	// 创建并返回内部 audio 上下文 innerAudioContext 对象。
	const fileSystemManager = uni.getFileSystemManager();		// 获取全局唯一的文件管理器
	
	innerAudioContext.autoplay = true;
	
	export default {
		data() {
			return {
				title: 'uniapp 微信小程序:录音DEMO',
				// 录音文件的信息
				voiceData: {
					filePath: '',
					fileSize: 0,
					duration : 0,
					size: 0,
					digest: ''
				},
				btnStatus: [true , false, false, false]
			}
		},
		onLoad() {
			let that = this;
			// 录音结束
			recorderManager.onStop(function (res) {
				console.log(`录音完成:${JSON.stringify(res)}`); 
				// 录音完成:{"tempFilePath":"http://tmp/f4XillI6c9vm8652ed79724d0ef901d35c490534061c.durationTime=2724.aac","fileSize":24344,"duration":2724}
				that.voiceData = { fileSize: res.fileSize,duration : res.duration };
				// 拿临时文件信息
				console.log(`临时文件信息:`); 
				that.getFileInfo(res.tempFilePath);
				// 保存临时文件到本地。此接口会移动临时文件,因此调用成功后,tempFilePath 将不可用。
				uni.getFileSystemManager().saveFile({
					tempFilePath: res.tempFilePath,
					success(res){
						console.log( `保存文件成功: ${JSON.stringify(res)}` );
						// 保存文件成功: {"errMsg":"saveFile:ok","savedFilePath":"http://store/tAqiVVvp35eBa041b8ab5d91cd7eac88402ed9b4fa6d.durationTime=2079.aac"}
						that.voiceData.filePath = res.savedFilePath;
						// 保存完成,获取文件信息
						console.log(`已保存的文件信息:`); 
						that.getFileInfo(res.savedFilePath,res=>{
							that.voiceData.size = res.size;
							that.voiceData.digest = res.digest;
						});
					},
					fail(err){
						console.error( `保存文件失败: ${JSON.stringify(err)}` );
					},
					complete(){
						console.log('保存文件: 擦屁股');
					}
				})
			});
		},
		methods: {
			startRecord() {
				console.log('开始录音');	
				recorderManager.start({
					duration: 60000,		// 录音持续时间最长60秒
					sampleRate: 8000,		// 采样率 8000 说话录音足够了
					numberOfChannels: 1		// 单声道
				});
				this.btnStatus = [0, 1, 0, 0];
			},
			endRecord() {
				console.log('录音结束');
				recorderManager.stop();
				this.btnStatus = [1, 0, 1, 1];
			},
			playVoice() {
				console.log('播放录音');
				if ( this.voiceData.filePath) {
					innerAudioContext.src = this.voiceData.filePath;
					innerAudioContext.play();
				}
			},
			upload(){
				console.log( `上传文件: ${JSON.stringify(this.voiceData)}`);
				// 上传文件: {
				// 	"fileSize":18588,"duration":2102,"size":13941,"digest":"902f377a3921f52dd1141c578974ad9a",
				// 	"filePath":"http://store/AZkfdB7PuHqp08e30b555ede419af0dc129ed30970b8.durationTime=2102.aac"
				// }
				let uploadTask = uni.uploadFile({
					url: 'http://127.0.0.1:8999/upload',
					filePath: this.voiceData.filePath,			// 要上传的文件的路径
					name: 'file',								// 表单 name,服务端按这个名接文件
					formData: this.voiceData,					// 额外的信息
					success(res){
						console.log( `上传成功: ${JSON.stringify(res)}` );
					},
					fail(err){
						console.error( `上传失败: ${JSON.stringify(err)}` );
					},
					complete(){
						console.log('上传文件: 擦屁股');
					}
				});
				
				uploadTask.onProgressUpdate((res) => {
					console.log('上传进度' + res.progress);
					console.log('已经上传的数据长度' + res.totalBytesSent);
					console.log('预期需要上传的数据总长度' + res.totalBytesExpectedToSend);
					// 测试条件,取消上传任务。
					if (res.progress > 90) {
						uploadTask.abort();
					}
				});
			},
			// 获取该小程序下的 本地临时文件 或 本地缓存文件 信息
			getFileInfo(filePath, success){
				// 获取文件信息
				fileSystemManager.getFileInfo({
					filePath: filePath,
					success(res){
						if(typeof success === 'function'){
							success(res);
						}else{
							console.log( `获取文件信息成功: ${JSON.stringify(res)}` );
							console.log( `大小:${res.size / 1024 }K ` );
						}
					},
					fail(err){
						console.error( `获取文件信息失败: ${JSON.stringify(err)}` );
					},
					complete(){
						console.log( '获取文件信息: 擦屁股' );
					}
				})
			}
		}
	}
</script>

<style lang="scss">
	.content {
		height: 100vh;
		display: flex;
		flex-direction: column;
		align-items: center;
		justify-content: center;
		
		.title {
			margin: 30rpx 0;
			font-size: $uni-font-size-lg;
			font-weight: bold;
		}
	}
</style>

参考资料

uni.getRecorderManager() 获取全局唯一的录音管理器
uni.createInnerAudioContext() 创建并返回内部 audio 上下文 innerAudioContext 对象
uni.uploadFile(OBJECT) 将本地资源上传到开发者服务器

wx.getFileSystemManager() 获取 全局唯一的文件管理器。 基础库 1.9.9 开始支持。
FileSystemManager.getFileInfo(Object object) 获取该小程序下的 本地临时文件 或 本地缓存文件 信息

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/929605.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

基于Java+SpringBoot+vue前后端分离体育馆使用预约平台设计实现

博主介绍&#xff1a;✌全网粉丝30W,csdn特邀作者、博客专家、CSDN新星计划导师、Java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精彩专…

Tensor-动手学深度学习-李沐_笔记

介绍 Tensor&#xff0c;又称"张量"&#xff0c;其实就是n维度数组。不同维度的Tensor示意图如下&#xff1a; 关于Tensor.reshape reshape函数可以处理总元素个数相同的任何新形状&#xff0c;【3&#xff0c;2&#xff0c;5】->【3&#xff0c;10】->【5&a…

论文笔记: One Fits All:Power General Time Series Analysis by Pretrained LM

1 intro 时间序列领域预训练模型/foundation 模型的研究还不是很多 主要挑战是缺乏大量的数据来训练用于时间序列分析的基础模型——>论文利用预训练的语言模型进行通用的时间序列分析 为各种时间序列任务提供了一个统一的框架 论文还调查了为什么从语言领域预训练的Transf…

GEE/PIE遥感大数据处理与典型案例丨数据整合Reduce、云端数据可视化、数据导入导出及资产管理、机器学习算法等

目录 ​专题一&#xff1a;初识GEE和PIE遥感云平台 专题二&#xff1a;GEE和PIE影像大数据处理基础 专题三&#xff1a;数据整合Reduce 专题四&#xff1a;云端数据可视化 专题五&#xff1a;数据导入导出及资产管理 专题六&#xff1a;机器学习算法 专题七&#xff1a;…

Spring Cloud Nacos详解

目录 1、Spring Cloud Nacos详细介绍2、Spring Cloud Nacos具体案列 Spring Cloud Nacos 是一个由阿里巴巴集团开发的开源分布式系统服务发现、配置管理和服务管理的平台。Nacos 支持多种服务发现方式&#xff0c;包括 DNS 方式、HTTP 和 RPC 方式&#xff0c;同时提供了灵活的…

GFPGAN 集成Flask 接口化改造

GFPGAN是一款腾讯开源的人脸高清修复模型&#xff0c;基于github上提供的demo&#xff0c;可以简单的集成Flask以实现功能接口化。 GFPGAN的安装&#xff0c;Flask的安装请参见其他文章。 如若使用POSTMAN进行测试&#xff0c;需使用POST方式&#xff0c;form-data的请求体&am…

camshift, pca,协方差

最近复习opencv的东西&#xff0c; 看到camshift https://www.youtube.com/watch?va9KZjQ4e6IA&listPL6Yc5OUgcoTmTGACTa__vnifNA744Cz-q&index30 https://medium.com/claudio.vindimian/understanding-and-implementing-the-camshift-object-tracking-algorithm-pyt…

【现场问题】oracle 11g 和12c 使用jdbc链接,兼容的问题

oracle不同版本 问题是什么寻找解决方式首先Oracle的jdbc链接有几种形式?Oracle 11g的链接是什么呢Oracle 12C的链接是什么呢我的代码是哪种&#xff01;&#xff1f;发现问题没 解决问题代码 问题是什么 项目上建立Oracle数据源&#xff0c;以前大部分都是&#xff0c;11g的…

树模型与集成学习:LightGBM

目录 树模型与集成学习 LightGBM 的贡献 LightGBM 的贡献&#xff1a;单边梯度抽样算法 LightGBM 的贡献&#xff1a;直方图算法 LightGBM 的贡献&#xff1a;互斥特征捆绑算法 LightGBM 的贡献&#xff1a;深度限制的 Leaf-wise 算法 树模型与集成学习 树模型是非常好的…

目标检测(Object Detection):Fast R-CNN,YOLO v3

目录 目标检测(Object Detection) R-CNN SPPNet Fast R-CNN YOLO v1 YOLO v2 YOLO v3 目标检测(Object Detection) 任务是计算机视觉中非常重要的基础问题&#xff0c;也是解决图像分割、目标跟踪、图像描述等问题的基础。目标检测是检测输入图像是否存在给定类别的物体…

“梯媒广告商”分众传媒,能否凭借AI更“香”?

“你没事儿吧&#xff1f;你没事儿吧&#xff1f;没事儿就吃溜溜梅”“婚纱照&#xff0c;想去哪拍&#xff0c;就去哪拍&#xff0c;铂爵旅拍”“0糖0脂0卡&#xff0c;我喝元气森林”……相信不少人都被这些魔性、好记的广告词洗脑过&#xff0c;而这些脍炙人口的经典广告语背…

ssm+vue农家乐信息平台源码和论文

ssmvue农家乐信息平台源码和论文066 开发工具&#xff1a;idea 数据库mysql5.7 数据库链接工具&#xff1a;navcat,小海豚等 技术&#xff1a;ssm 1、研究现状 国外&#xff0c;农家乐都被作为潜在的发展农村经济&#xff0c;增加农民收入的重要手段&#xff0c;让农户广…

从开源到商业化:成功的转型策略

&#x1f337;&#x1f341; 博主猫头虎 带您 Go to New World.✨&#x1f341; &#x1f984; 博客首页——猫头虎的博客&#x1f390; &#x1f433;《面试题大全专栏》 文章图文并茂&#x1f995;生动形象&#x1f996;简单易学&#xff01;欢迎大家来踩踩~&#x1f33a; &a…

研磨设计模式day09原型模式

目录 场景 代码实现 有何问题 解决方案 代码改造 模式讲解 原型与new 原型实例与克隆出来的实例 浅度克隆和深度克隆 原型模式的优缺点 思考 何时选用&#xff1f; 相关模式 场景 代码实现 定义订单接口 package com.zsp.bike.day08原型模式;/*** 订单的接口*…

大数据时代的软件开发实践:利用云计算和AI赋能创新

文章目录 云计算的赋能弹性资源管理远程协作与分布式开发持续集成和持续交付成本效益 人工智能的赋能数据驱动的决策自动化智能预测和优化自适应系统 创新的实践方法数据驱动的创新智能化产品开放式创新迭代和反馈 &#x1f388;个人主页&#xff1a;程序员 小侯 &#x1f390;…

开源的安全性:挑战与机会

&#x1f337;&#x1f341; 博主猫头虎 带您 Go to New World.✨&#x1f341; &#x1f984; 博客首页——猫头虎的博客&#x1f390; &#x1f433;《面试题大全专栏》 文章图文并茂&#x1f995;生动形象&#x1f996;简单易学&#xff01;欢迎大家来踩踩~&#x1f33a; &a…

Spring和mybatis整合

一、Spring整合MyBatis 1. 导入pom依赖 1.1 添加spring相关依赖(5.0.2.RELEASE) spring-core spring-beans spring-context spring-orm spring-tx spring-aspects spring-web 1.2 添加mybatis相关依赖 mybatis核心&#xff1a;mybatis(3.4.5) Mybatis分页&#xff1a;pagehel…

基于Python的小区监控图像拼接系统设计与实现【源码+论文+演示视频+包运行成功】

博主介绍&#xff1a;✌csdn特邀作者、博客专家、java领域优质创作者、博客之星&#xff0c;擅长Java、微信小程序、Python、Android等技术&#xff0c;专注于Java、Python等技术领域和毕业项目实战✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; …

华为云渲染实践

// 编者按&#xff1a;云计算与网络基础设施发展为云端渲染提供了更好的发展机会&#xff0c;华为云随之长期在自研图形渲染引擎、工业领域渲染和AI加速渲染三大方向进行云渲染方面的探索与研究。本次LiveVideoStackCon 2023上海站邀请了来自华为云的陈普&#xff0c;为大家分…

研磨设计模式day11代理模式

目录 场景 代码实现 ​编辑 解析 定义 代理模式调用示意图 代理模式的特点 本质 ​编辑何时选用 场景 我有一个订单类&#xff0c;包含订单数、用户名和商品名&#xff0c;有一个订单接口包含了对订单类的getter和setter 现在有一个需求&#xff0c;a创建的订单只…