uniapp 开发H5页面,实现语音识别功能--前端,不包含后端转换

一、背景

微信小程序开发,内嵌h5页面,不能调用微信内部的插件

二、实现方式

通过安装 js-audio-recorder 插件实现既定需求

三、具体步骤

1、安装插件

npm i js-audio-recorder

2、引入

在需要使用的页面中引入:import Recorder from 'js-audio-recorder';

3、具体配置

1、定义recorder
data() {
		return {
			recorder: null
		};
},
2、页面加载时,初始化
onLoad() {
		this.recorder = new Recorder();
},
3、具体方法
methods:{
4、鼠标点击方法
startRecording() {
	this.recorder = new Recorder();
	Recorder.getPermission().then(
		() => {
			console.log('开始录音');
			this.titleShow = true;
			this.recorder.start(); // 开始录音
		},
		(error) => {
			uni.showToast({
				title: '请先允许该网页使用麦克风',
				icon:"error"
			});
			console.log(`${error.name} : ${error.message}`);
		}
	);
},
5、鼠标松开的方法
touchEnd() {
	this.yyShow = false;
	this.titleShow = false;
	const blob = this.recorder.getWAVBlob(); //调这个方法会自动调用stop
	const newbolb = new Blob([blob], { type: 'audio/wav' });
	this.blobToBase64(newbolb)
		.then((base64) => {
			7、调用后端接口
			this.$UniRequest.Post({
				url: this.$AppConfig.audio2text,
				para: {
					audioBase64: base64
				},
				success: (res) => {
					if (res.audiocont == 'null') {
					uni.showToast({
							title: '未识别到您的语音,请重试',
							icon: 'error'
						});
						this.customerText = '';
					} else {
						this.customerText = res.audiocont;
					}
				},
				fail: (err) => {
					uni.showModal({
						title: '提示',
						content: err,
						showCancel: false
					});
				}
			});
		})
		.catch((err) => {
			console.error(err);
		});
},
6、音频转base64
blobToBase64(blob) {
	return new Promise((resolve, reject) => {
		const reader = new FileReader();
		reader.readAsDataURL(blob);
		reader.onload = () => {
			const base64 = reader.result.split(',')[1];
			resolve(base64);
		};
		reader.onerror = () => {
			reject(new Error('blobToBase64 error'));
		};
	});
	}
}

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
其实作为H5想要做语音识别,自认为还说有各种弊端得,同时还是微信公众号里面,如果小程序得话,或许会简单一点,但是这里是在公众号里面开发,在这个过程中查阅个各种资料,其实里面得东西都大同小异,但是大多数并不全, 首先微信公众号里面得H5开发语音录入,试过各种方法,由于是java渣渣,页面技术只是了解简单得,因此在使用标签得时候,本身并不能适用于当前得需求,因此最后只能选择了微信自带得录音功能,使用微信提供的接口,(具体得接口使用还是去看微信接口得使用) 由于使用微信得接口得话,首先要上传到它得服务器上面去(虽然也有本地得文件储存id,但是好像并没有用),这里就涉及到了一个serverid,这个值是存在于微信临时素材库得id,后期要用它来获取录音得文件。 通过微信提供得获取临时素材文件得接口,得到了文件(具体方法网上一搜一大堆,后期我也会将完整得代码放进资源里面),但是这里有一个坑得问题,他的格式为.amr得格式,但是最后的目的是转换为文字,因此这里涉及到了格式转换 主要用了现成得技术,也是通过下载资源获取得jar以及实现得方法,将.amr转换为了MP3格式 然后就就是最后一部了,将mp3得音频文件转换为文字,我这里用的是讯飞得技术,当然百度得也可以, 其实整个需求得这个流程已经完成了,但是不得不说里面遇到得坑,由于是渣渣,除了人们总说的,转换为mp3得时候会报N/A得错误,我还遇到了unkowFormat这个错误。 这里只是记录一下自己在查询资料时没有一个符合自己需求得资料,同时也希望以后有这样需求得人,可以将思路捋的更加清楚,也可以进行交流.
你可以使用百度语音识别的API,在uniapp中使用它来实现H5端的语音识别功能。首先,你需要在百度AI开放平台上注册一个账号,并且创建一个应用来获取API Key和Secret Key。然后,你可以使用uniapp提供的uni.request函数来请求API,并且将语音数据发送给百度服务器进行识别。以下是一个简单的示例代码: ```javascript // 获取API Key和Secret Key const apiKey = '你的API Key'; const secretKey = '你的Secret Key'; // 构建认证字符串 const authStr = `Basic ${Base64.encode(`${apiKey}:${secretKey}`)}`; // 定义识别函数 function recognizeVoice(voiceData) { uni.request({ url: 'https://vop.baidu.com/server_api', method: 'POST', header: { 'Content-Type': 'audio/wav;rate=16000', 'Authorization': authStr }, data: { format: 'wav', rate: 16000, channel: 1, cuid: '自定义用户ID', speech: voiceData.toString('base64'), len: voiceData.length }, success: (res) => { console.log(res.data); } }); } // 获取录音数据 uni.getRecorderManager().onStop((res) => { const voiceData = res.tempFilePath; recognizeVoice(voiceData); }); ``` 这里使用了uni.request函数来请求API,并且将语音数据转换成base64字符串发送给服务器进行识别。需要注意的是,请求头中的Content-Type需要设置为audio/wav;rate=16000,表示发送的是16000采样率的wav文件。同时,API Key和Secret Key需要进行Base64编码并且添加到请求头中的Authorization字段中进行认证。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值