uniapp 微信小程序:RecorderManager 录音DEMO

这篇具有很好参考价值的文章主要介绍了uniapp 微信小程序:RecorderManager 录音DEMO。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

简介

使用 RecorderManager 实现录音。及相关的基本操作。(获取文件信息,上传文件)
uniapp 微信小程序:RecorderManager 录音DEMO,# uni-app,WeChat微信,uni-app,小程序,微信,Recorder
此图包含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) 获取该小程序下的 本地临时文件 或 本地缓存文件 信息文章来源地址https://www.toymoban.com/news/detail-672613.html

到了这里,关于uniapp 微信小程序:RecorderManager 录音DEMO的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 微信小程序检查录音权限并引导用户进入设置页面

    wx.startRecord(Object object) :开始录音接口,调用该接口后,小程序将会录制音频,最长可以录制60秒。 wx.stopRecord() :停止录音接口,调用该接口后,录音将停止并生成音频文件。 wx.pauseVoice() :暂停播放音频接口,调用该接口后,正在播放的音频将会暂停。 wx.resumeVoice() :继续

    2024年02月03日
    浏览(109)
  • 微信小程序录音直传阿里云OSS并语音识别

    如题:做一个录音文字识别功能,知识点有三个,分别是微信小程序的录音功能、录音文件直传阿里云OSS、使用阿里云的录音文件识别接口返回识别后的文字 官方文档:微信小程序全局唯一的录音管理器 RecorderManager wxml: js:需要注意的是,点击开始录音时要判断当前是否获

    2024年02月10日
    浏览(57)
  • flask 后端 + 微信小程序和网页两种前端:调用硬件(相机和录音)和上传至服务器

    选择 flask 作为后端,因为后续还需要深度学习模型,python 语言最适配;而 flask 框架轻、学习成本低,所以选 flask 作为后端框架。 微信小程序封装了调用手机硬件的 api,通过它来调用手机的摄像头、录音机,非常方便。 网页端使用 JavaScript 调用则困难一些,走了很多弯路,

    2024年04月15日
    浏览(42)
  • 微信小程序常见的demo

    方法一: html部分 js部分 wxss部分 要点总结: 先在data中声明变量,在html的标签中写入方法,代入到js中,一个是打开窗口的状态,一个是关闭窗口的状态 效果图 html部分 js部分 hidden 属性 在 Vue 中我们可以通过 v-show 来控制组件是否显示 在小程序中所有组件都支持hidden属性,

    2024年01月18日
    浏览(41)
  • 微信小程序实现路线规划demo

    本文旨在以mpvue框架为基础,探讨地图类小程序的开发思路。 原作者利用mpvue + 腾讯地图的能力做了一个地铁路线规划的小程序,主要提供全球主要城市的地铁线网图及旅游介绍,其中国内城市支持查看地图和路线规划。 目前腾讯位置服务也推出了路线规划插件、地铁图插件

    2024年02月08日
    浏览(48)
  • 微信小程序语音转文字demo

    最近做了个微信小程序语音输入转文字的需求,记录一下 微信小程序支持通过语音识别 API 实现语音转文字的功能,可以按照以下步骤进行设置: 在小程序的 json 配置文件中,添加 record 权限: 在小程序的 wxml 文件中,添加录音组件: 其中, duration 表示录音时长,单位为毫

    2024年02月11日
    浏览(44)
  • 微信小程序拍照页面自定义demo

    api文档

    2024年02月07日
    浏览(44)
  • 微信小程序tab加列表demo

    一、效果 代码复制即可使用,记得把图标替换成个人工程项目图片。 微信小程序开发经常会遇到各种各样的页面组合,本demo为list列表与tab组合,代码如下: 二、json代码 三、xml 四、css 五、ts代码

    2024年02月14日
    浏览(37)
  • 微信小程序引入高德地图Demo 快速上手

    本文参照官方文档进行编写 最后引入官方实例 最终效果 ` 注册账号 https://lbs.amap.com/?ref=http%3A%2F%2Flbs.amap.com%2Fdev%2F#/ 获取Key教程 https://lbs.amap.com/api/wx/guide/create-project/get-key/ 访问网址 https://github.com/amap-demo/wx-regeo-poiaround-weather 下载微信小程序实例 用微信开发者工具打开 打开

    2024年02月11日
    浏览(80)
  • 微信小程序实现的一个登录页面Demo

    微信小程序登录页面示例代码,包括了获取验证码按钮等30秒点一次功能和勾选同意用户条款的功能,仅供参考,效果图如下 *.wxml文件: *.wxss文件: *.js文件: 这个示例代码实现了一个登录页面,并且包括了输入手机号和验证码,获取验证码按钮,勾选同意用户条款,登录按

    2024年02月03日
    浏览(54)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包