js录音支持h5 pc ios android

news2025/1/12 21:38:04

最近在做h5录音的页面要求可暂停录音,继续录音,写好后发现不兼容ios,无奈只能找兼容方法,找了一天也没找到,后来看到一个网站在ios上可以暂停录音,后来引入他的js文件果然能用了

网站放下面了

Recorder H5: 用于html5网页中的前端录音解决方案,此录音插件支持mp3 wav pcm amr ogg webm格式,支持实时上传 语音识别 音频可视化 实时处理,可在PC端 移动端 Android iOS 原生App中跨平台使用https://xiangyuecn.gitee.io/recorder/这是他的gitee地址Recorder: html5 js 录音 mp3 wav ogg webm amr 格式,支持pc和Android、iOS部分浏览器、Hybrid App(提供Android iOS App源码)、微信,提供ASR语音识别转文字 H5版语音通话聊天示例 DTMF编码解码https://gitee.com/xiangyuecn/Recorder

接下来说一下实现步骤,先把项目克隆下来

 1.使用script标签引入recorder.mp3.min.js这个文件

2.封装成组件使用,大家看源码吧,我是用uniapp写的

<template>
	<view class="">
		<u-toast ref="uToast" />
	</view>
</template>
<script>
	import '../recorder.mp3.min.js'
	export default {
		data() {
			return {
				rec: null
			}
		},
		methods: {
			getRecorderManager(success) {//初始化
				Recorder.ConnectEnableWorklet = true
				this.rec = Recorder({
					type: "mp3",
					sampleRate: 16000,
					bitRate: 16,
					onProcess: (buffers, powerLevel, bufferDuration, bufferSampleRate, newBufferIdx, asyncEnd) => {
						//录音实时回调,大约1秒调用12次本回调,buffers为开始到现在的所有录音pcm数据块(16位小端LE)
						//可实时绘制波形(extensions目录内的waveview.js、wavesurfer.view.js、frequency.histogram.view.js插件功能)
						//可利用extensions/sonic.js插件实时变速变调,此插件计算量巨大,onProcess需要返回true开启异步模式
						//可实时上传(发送)数据,配合Recorder.SampleData方法,将buffers中的新数据连续的转换成pcm上传,或使用mock方法将新数据连续的转码成其他格式上传,可以参考文档里面的:Demo片段列表 -> 实时转码并上传-通用版;基于本功能可以做到:实时转发数据、实时保存数据、实时语音识别(ASR)等
					}
				});
				this.rec.open(() => { //打开麦克风授权获得相关资源
					this.$emit('start', true)
					//rec.start() 此处可以立即开始录音,但不建议这样编写,因为open是一个延迟漫长的操作,通过两次用户操作来分别调用open和start是推荐的最佳流程
					success && success();
				}, (msg, isUserNotAllow) => { //用户拒绝未授权或不支持
					
					this.$emit('start', false)
				});
			},
			start() {//开始录音
				this.rec.start()
				this.$emit('vicoGetRecording', true)
			},
			stop() {//停止录音
				this.rec.stop((blob, duration) => {
					let localUrl = URL.createObjectURL(blob)
					const recorder = {
						data: blob,
						duration,
						localUrl,
					}
					console.log(recorder);
					this.$emit('success', recorder)
					this.$emit('vicoSuccess', recorder)
				})
			},
			pause() { //暂停
				if (this.rec) {
					this.rec.pause();
				};
			},
			resume() { //继续
				if (this.rec) {
					this.rec.resume();
				};
			},
			close(){
				//完全关闭
				if (this.rec) {
					this.rec.close();
				}
			},
			cancel() { //取消录音
				if (this.rec) {
					this.rec.close();
				}
				Recorder.ConnectEnableWorklet = true
				this.rec = Recorder({
					type: "mp3",
					sampleRate: 16000,
					bitRate: 16,
					onProcess: (buffers, powerLevel, bufferDuration, bufferSampleRate, newBufferIdx, asyncEnd) => {
						//录音实时回调,大约1秒调用12次本回调,buffers为开始到现在的所有录音pcm数据块(16位小端LE)
						//可实时绘制波形(extensions目录内的waveview.js、wavesurfer.view.js、frequency.histogram.view.js插件功能)
						//可利用extensions/sonic.js插件实时变速变调,此插件计算量巨大,onProcess需要返回true开启异步模式
						//可实时上传(发送)数据,配合Recorder.SampleData方法,将buffers中的新数据连续的转换成pcm上传,或使用mock方法将新数据连续的转码成其他格式上传,可以参考文档里面的:Demo片段列表 -> 实时转码并上传-通用版;基于本功能可以做到:实时转发数据、实时保存数据、实时语音识别(ASR)等
					}
				});
				this.rec.open(() => { //打开麦克风授权获得相关资源
					success && success();
				}, (msg, isUserNotAllow) => { //用户拒绝未授权或不支持
					this.$emit('start', false)
				});
			}
		}

	}
</script>

 调用组件

<template>
	<view class="content">
		<button type="primary" @click="start">录音</button>
		<button type="primary" @click="pause">暂停</button>
		<button type="primary" @click="resume">继续</button>
		<button type="primary" @click="stop">结束</button>
		<button type="primary" @click="cancel">清空当前录音,重新录制</button>
		<button type="primary" @click="close">关闭录音,释放资源</button>
		<vico @start="vicoStart" @vicoSuccess="luyinSuccess" ref='vicoRecorder'>
		</vico>
	</view>
</template>

<script>
	import vico from './testluyin/testluyin.vue'
	export default {
		components: {
			vico
		},
		data() {
			return {

			}
		},
		methods: {
			vicoStart(isUserMedia) {
				// 获取语音权限
				if (isUserMedia) {
					//有录音权限
				} else {
					this.$refs.uToast.show({
						title: '用户拒绝了录音请求!',
						type: 'error',
					})
				}
			},
			start() { //开始
				this.$refs.vicoRecorder.start()
			},
			pause() { //暂停
				this.$refs.vicoRecorder.pause()
			},
			resume() { //继续
				this.$refs.vicoRecorder.resume()
			},
			stop() { //完成
				this.$refs.vicoRecorder.stop()
			},
			cance(){//清空当前录音,重新录制
				this.$refs.vicoRecorder.cancel()
			},
			close() {//完全关闭
				this.$refs.vicoRecorder.close()
			},
			luyinSuccess(data){
				//录音成功回来的文件
				console.log(data);
			}
		},
	}
</script>

不懂留言

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

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

相关文章

ASP.NET ZERO Crack坚实的体系结构

ASP.NET ZERO Crack坚实的体系结构 据说ASP.NET ZERO是互联网应用程序新流程的起点&#xff0c;该流程包含现代用户界面&#xff0c;具有强大的体系结构和完整的源代码。它可以通过提供共享的应用程序来节省用户时间&#xff0c;这些应用程序是visual studio预构建解决方案所必…

PostMan笔记(一)简介+安装和设置

1. PostMan简介 Postman 是一款功能强大的 API 开发工具&#xff0c;支持多种 HTTP 请求方法和测试断言&#xff0c;能够快速调试和测试 API 接口&#xff0c;提高开发效率。本文将介绍 Postman 工具的使用方法。 安装和设置 首先&#xff0c;需要下载和安装 Postman 工具。…

[ChatGPT]-02-ChatGPT对安全的影响和开源的LLM大模型资源汇总

文章目录 0.ChatGPT大模型带来的影响0.1 ChatGPT带来信息化革命性创新&#xff0c;目前尚不能处理专业知识但成长很快0.2 Chat GPT为网安行业带来新的创新方向&#xff0c;也将引领新一轮投融资热潮0.2.1 攻击方发起网络攻击的门槛降低0.2.2 防守方合理使用ChatGPT可大幅减少安…

零基础入门前端--JavaScript 循环结构语句

循环控制 控制程序重复执行若干次相同或似的逻辑&#xff0c;理解并正确使用循环控制&#xff0c;需要搞清楚循环的3个要素&#xff1a;起始值、变化量、终止条件。 ○ 起始值循环的起点&#xff0c;可以是【任意数据类型值】 ○ 变化量是指【改变起始值的方式】 ○ 终止条…

深度学习算法及卷积神经网络

目录标题 传统神经网络矩阵计算&#xff1a;正则化&#xff1a;激活函数sigmoid损失函数前向传播激活函数Relu数据预处理DROP-OUT 卷积神经网络(CNN)1.CNN网络的构成2. 卷积层2.1 卷积的计算⽅法2.2 padding2.3 stride2.4 多通道卷积2.5 多卷积核卷积2..6 特征图大小 3. 池化层…

无法打开“fsevents.node

在Mac 打开vue项目的时候「c c」出现这个&#xff0c;可能是一个项目多个ide打开&#xff0c; 如何解决呢&#xff1f; 图1 把 node_modules 文件夹删了&#xff0c;在编译一把。也就是 npm install npm install

配置中心Disconf、SpringCloudConfig、Apollo、Nacos比较

Config Server Center 1、Disconf 1、1简介 2014年7月百度开源的配置管理中心&#xff0c;同样具备配置的管理能力&#xff0c;不过目前已经不维护了&#xff0c;最近的一次提交是两年前了。 2、SpringCloudConfig 2-1、简介 2014年9月开源&#xff0c;Spring Cloud 生态…

技术选型|日志采集和管理工具您都了解哪些,看这篇就够了

简介 对于日志管理当前网络上提供了大量的日志工具&#xff0c;今天就给大家分析总结一下这些常用工具的特点&#xff0c;希望对你们在选型时有所帮助&#xff0c;如果有用记得一键三连。 1、Filebeat Filebeat是用于转发和集中日志数据的轻量级传送程序。作为服务器上的代理…

2_STM32最小系统设计

MCU最小系统&#xff1a;一个MCU在正常工作中&#xff0c;正常下载程序前提下的最简电路。 最简电路包含&#xff1a; 供电电路、复位电路、时钟电路(高速时钟、低速时钟)&#xff1a;2个外部晶振、Boot启动模式选择(跳线帽)、下载电路(uart/JTAG/SWD)、后备电池VBAT(维持后备区…

使用vscode+cmake进行c++代码编写

1. 前言 因为vcode的主题格式比visual studio好看&#xff0c;而且注释使用ctr/注释非常方便。所以对于一下小型的c代码测试&#xff0c;例如用不到外部库&#xff0c;只需要纯c自己语法&#xff0c;我就想和python一样&#xff0c;在vscode上写。因此记录一下比较简单的典型的…

SAP ABAP 使用SICF发布HTTP API接口

一、SE24创建类&#xff1a;Z_HCX_HTTP 1、创建类&#xff1a; 2、切换到接口&#xff08;interface&#xff09;页签&#xff0c;输入IF_HTTP_EXTENSION &#xff0c;回车。切换到方法&#xff08;method&#xff09;页签&#xff0c;双击IF_HTTP_EXTENSION~HANDLE_REQUEST进…

Linux学习记录——십구 进程间通信(1) 管道

文章目录 1、进程间通信介绍1、目的2、发展 2、管道1、原理2、简单模拟实现3、总结 3、匿名管道——控制进程4、命名管道1、原理2、模拟实现 1、进程间通信介绍 之前所学都是单个进程&#xff0c;多个进程之间如何运转&#xff1f; 1、目的 数据传输&#xff1a;一个进程需要…

Linux下SOCKET编程

一、SOCKET编程 1、socket()函数 int socket(int protofamily, int type, int protocol);//返回sockfd返回值sockfd是描述符。 socket函数对应于普通文件的打开操作。普通文件的打开操作返回一个文件描述字&#xff0c;而socket()用于创建一个socket描述符&#xff08;socke…

2. C++使用Thread线程参数传递问题

1. 说明 在子线程函数中进行参数传递&#xff0c;实际上是Thread类的构造函数对传递的参数进行了拷贝&#xff0c;拷贝到线程独立的内存中&#xff0c;及时参数是引用的形式&#xff0c;也可以在新线程中进行访问&#xff0c;如果参数传递时的类型不一致&#xff0c;在线程的上…

Servlet(二)

目录 1.Cookie 和 Session 1.1HttpServletRequest 类中的相关方法 1.HttpSession getSession() 2.Cookie[] getCookies() 1.2HttpServletResponse 类中的相关方法 1.void addCookie(Cookie cookie) 1.3HttpSession 类中的相关方法 1.4Cookie 类中的相关方法 1.5网页登录…

详解Spring Security

目录 1.概述 2.登录 2.1.默认用户 2.2.自定义用户 2.3.加密 2.4.绕过加密 2.5.怎么传递用户信息 2.6.记住我 3.登出 4.使用数据库 4.1.jdbcAuthentication 4.2.userDetailsService 5.自定义处理器 6.更多细粒度的控制 7.原理简述 1.概述 Spring Security是一个…

使用 Kubernetes 运行 non-root .NET 容器

翻译自 Richard Lander 的博客 Rootless 或 non-root Linux 容器一直是 .NET 容器团队最需要的功能。我们最近宣布了所有 .NET 8 容器镜像都可以通过一行代码配置为 non-root 用户。今天的文章将介绍如何使用 Kubernetes 处理 non-root 托管。 您可以尝试使用我们的 non-root…

gateway报 netty堆外内存溢出问题解决io.netty.util.internal.OutOfDirectMemoryError

昨天线上网关突然无法访问。打开日志看到错误信息“io.netty.util.internal.OutOfDirectMemoryError” 堆外内存溢出。。这也没碰到过啊&#xff0c;看来今天准点下班的愿望又落空了。老规矩面向百度编程。先看看网上有没有其他兄弟碰到这个问题。一顿搜索之后发现&#xff0c;…

已解决windows pycocotools安装失败问题 —— 超简单

作者主页&#xff1a;爱笑的男孩。的博客_CSDN博客-深度学习,YOLO,活动领域博主爱笑的男孩。擅长深度学习,YOLO,活动,等方面的知识,爱笑的男孩。关注算法,python,计算机视觉,图像处理,深度学习,pytorch,神经网络,opencv领域.https://blog.csdn.net/Code_and516?typecollect个人…

分库分表与分布式主键生成策略详解--一个无数人踩过却一直被人忽视的深坑

文章目录 一、从分库分表的一个神坑说起二、分布式主键要考虑哪些问题&#xff1f;三、主要的主键生成策略1、数据库策略2、应用单独生成3、第三方服务统一生成4、与第三方结合的segment策略 四、定制雪花算法1、如影随形的时钟回拨问题2、用主键生成策略优化分配工作进程位3、…