公众号 H5 语音输入转文字

 

 

<template>
	<div>
		<u-modal v-model="yyShow" show-cancel-button cancel-text='取消录音' :show-title='false' confirm-text='结束录音' @cancel='cancel'
			@confirm='stop'>
			<view>
				<!-- <button class="record" @click="start">开始录音</button> -->
				<!-- <button @click="stop">结束录音</button>
				<button @click="cancel">取消录音</button> -->
				<image style="width: :100%;"  v-if="!shShow"  @click="start" src="../static/index/unyy.png" mode=""></image>
				<image style="width: :100%;" v-if="shShow" src="../static/index/yy1.gif" mode=""></image>
			</view>
		</u-modal>

	
		<!-- <img src="../../static/image/timg.gif" alt="" @click="translationStart" > -->
	</div>
</template>

<script>
	// import wx from 'weixin-js-sdk';
	import{api_voiceToText}from'@/api/common'
	var wx = require('jweixin-module')
	// var _this = wx;
	import {
		api_wechatscan
	} from '@/api/common.js'

	export default {
		data() {
			return {
				yyShow: false,
				shShow:false,
				localId: '',
				serverId: '',
				downLoadId: '',
				Soff: true,
				time: 0,
				timer: null

			};
		},
		mounted() {},
		created() {
			this.getConfig()
		},
		methods: {
		
			getConfig() {
				const self = this;
				 const apiUrl = window.location.href
				 console.log(apiUrl,'222')
				// var apiUrl = 'http://zhongjianh5.dev.xinzhidi.cn/#/pages/index/medicine/match'
				api_wechatscan({
					url: apiUrl, //获取签名等信息的地址
				}).then(({
					result
				}) => {
					return
					// console.log(res.data.data)
					let list = result
					wx.config({
						beta: true, // 必须这么写,否则wx.invoke调用形式的jsapi会有问题
						debug: false, // 开启调试模式,调用的所有api的返回值会在客户端alert出来,若要查看传入的参数,可以在pc端打开,参数信息会通过log打出,仅在pc端时才会打印。

						appId: list.appId, // 必填,企业微信的corpID
						timestamp: list.timesTamp, // 必填,生成签名的时间戳
						nonceStr: list.nonceStr, // 必填,生成签名的随机串
						signature: list.signature, // 必填,签名
						jsApiList: [
							'startRecord', 'stopRecord', 'onVoiceRecordEnd', 'playVoice', 'pauseVoice',
							'stopVoice', 'uploadVoice', 'downloadVoice', 'downloadVoice'
						] // 必填,需要使用的JS接口列表
					});
					wx.ready(() => {
						wx.checkJsApi({
							jsApiList: ['startRecord', 'stopRecord', 'onVoiceRecordEnd',
								'playVoice', 'pauseVoice', 'stopVoice', 'uploadVoice',
								'downloadVoice', 'downloadVoice'
							], // 需要检测的JS接口列表,所有JS接口列表见附录2,
							success: function(res) {
								console.log('返回信息')
								console.log(res)
								// 以键值对的形式返回,可用的api值true,不可用为false
								// 如:{"checkResult":{"chooseImage":true},"errMsg":"checkJsApi:ok"}
							}
						});

						// wx.startRecord();
						// config信息验证后会执行ready方法,所有接口调用都必须在config接口获得结果之后,config是一个
						// 客户端的异步操作,所以如果需要在页面加载时就调用相关接口,则须把相关接口放在ready函数中调
						// 用来确保正确执行。对于用户触发时才调用的接口,则可以直接调用,不需要放在ready函数中。
					})
					wx.error((res) => {
						// 这个地方的好处就是wx.config配置错误,会弹出窗口哪里错误,然后根据微信文档查询即可。
					})
				}).catch((error) => {
					// error
				})
			},
			// 开始录音
			start() {
				var that = this
				that.time = 0
				wx.startRecord({
					success: function() {
						that.shShow=true
					
						console.log('成功开始录音')
						that.timer = setInterval(() => {
							that.time++
						}, 1000)
						that.vicoeEnd()
					},
					cancel: function() {
						that.shShow=false
						alert('用户拒绝授权录音')
					}
				})
			},
			stop() {
				this.shShow=false
			
			var  that = this
				// clearInterval(that.timer)
				wx.stopRecord({
					success: function(res) {
						// alert('暂停成功')
						console.log(res, '停止录音')
						
						that.localId = res.localId
						that.upVoice()
					},
					fail: function(error) {
						// alert('死啦停不了')
						console.log(error)
					}
				})
			},
			cancel() {
				wx.stopRecord({
					success: (res) => {
						uni.showToast({
							title: "取消录音",
							icon:'none'
						})
						
						this.shShow=false
						this.yyShow=false
						console.log(res, '取消')
					}
				})
			},
			vicoeEnd() {
				uni.showToast({
					title: "开始录音",
					icon:'none'
				})
				var that = this
				wx.onVoiceRecordEnd({
					// 录音时间超过一分钟没有停止的时候会执行 complete 回调
					complete: function(res) {
						that.shShow=false
						console.log(res, '监听')
						alert('60秒停止录音')
						that.localId = res.localId
						that.upVoice()
					}
				})
			},
			upVoice() {
				
				var that = this
				
				wx.uploadVoice({
					localId: that.localId, // 需要上传的音频的本地ID,由stopRecord接口获得
					isShowProgressTips: 1, // 默认为1,显示进度提示
					success: function(res) {
						console.log(res, '上传')
						var apiUrl = window.location.href
						that.yyShow=false
						that.shShow=false
						that.serverId = res.serverId // 返回音频的服务器端ID
						
						api_voiceToText({
							serverId:res.serverId
						}).then((res)=>{
							that.$emit("yyText",res.result);
						})
					},
					error:(error)=>{
						uni.showToast({
							title: error
						})
					}
					
				})
			}

		},
	};
</script>
<style lang="less">
	/deep/image{
		width: 100%;
	}
</style>

其实作为H5想要做语音识别,自认为还说有各种弊端得,同时还是微信公众号里面,如果小程序得话,或许会简单一点,但是这里是在公众号里面开发,在这个过程中查阅个各种资料,其实里面得东西都大同小异,但是大多数并不全, 首先微信公众号里面得H5开发语音录入,试过各种方法,由于是java渣渣,页面技术只是了解简单得,因此在使用标签得时候,本身并不能适用于当前得需求,因此最后只能选择了微信自带得录音功能,使用微信提供的接口,(具体得接口使用还是去看微信接口得使用) 由于使用微信得接口得话,首先要上传到它得服务器上面去(虽然也有本地得文件储存id,但是好像并没有用),这里就涉及到了一个serverid,这个值是存在于微信临时素材库得id,后期要用它来获取录音得文件。 通过微信提供得获取临时素材文件得接口,得到了文件(具体方法网上一搜一大堆,后期我也会将完整得代码放进资源里面),但是这里有一个坑得问题,他的格式为.amr得格式,但是最后的目的是换为文字,因此这里涉及到了格式换 主要用了现成得技术,也是通过下载资源获取得jar以及实现得方法,将.amr换为了MP3格式 然后就就是最后一部了,将mp3得音频文件换为文字,我这里用的是讯飞得技术,当然百度得也可以, 其实整个需求得这个流程已经完成了,但是不得不说里面遇到得坑,由于是渣渣,除了人们总说的,换为mp3得时候会报N/A得错误,我还遇到了unkowFormat这个错误。 这里只是记录一下自己在查询资料时没有一个符合自己需求得资料,同时也希望以后有这样需求得人,可以将思路捋的更加清楚,也可以进行交流.
### 修改 Shopro 商城系统的聊天对话模块 为了实现对 Shopro 商城系统中的聊天对话功能的自定义或修改,开发者可以根据具体需求调整前端展示逻辑以及后端处理机制。以下是详细的说明: #### 前端部分 对于前端而言,主要涉及的是 Uniapp 框架下的页面组件设计与交互逻辑编写。由于该商城支持多个平台(如微信公众号、微信小程序、H5网页等),因此需要确保任何改动都能适配这些不同环境。 1. **定位文件位置** 找到项目中负责即时通讯或者消息显示的相关 Vue 组件文件。通常这类文件会位于 `src/components` 或者专门用于存放业务逻辑组件的目录下[^1]。 2. **编辑样式和结构** 使用标准 HTML 和 CSS 对话框外观进行定制化设置;也可以通过引入第三方 UI 库简化开发流程。如果想要改变文字颜色、字体大小或者其他视觉属性,则可以直接操作对应的 style 属性或是利用 scoped 样式表来限定作用范围[^2]。 3. **增强互动效果** 添加更多实用的功能按钮,比如表情包发送器、语音输入切换开关等等。这一步骤可能涉及到 JavaScript 的运用,特别是当希望增加一些动态行为时,例如监听用户的键盘事件触发特定动作[^3]。 ```javascript // 示例:为聊天窗口添加新特性 methods: { sendEmoji() { /* 发送表情 */ }, toggleVoiceInputMode() { /* 切换至语音模式 */ } } ``` #### 后端部分 在服务器一侧,重点在于优化数据传输效率并保障信息安全。考虑到这是一个多终端兼容的应用程序,所以应当特别注意 API 接口的一致性和稳定性。 1. **审查现有接口文档** 查看官方提供的 RESTful API 文档或其他形式的服务契约描述,了解当前版本所提供的各项服务及其参数要求[^4]。 2. **扩展数据库模型** 如果计划新增某些字段用来存储额外的信息(像用户反馈评分之类的),就需要相应地更新 MySQL 表结构或者是 NoSQL 集合配置。 3. **强化安全措施** 实施严格的访问控制策略防止未授权人员获取敏感资料;同时采用 HTTPS 协议保护通信链路免受中间人攻击威胁。 ```sql -- 更新 chat_message 表以保存更多信息 ALTER TABLE chat_message ADD COLUMN user_rating INT; ``` ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值