公众号 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>

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
其实作为H5想要做语音识别,自认为还说有各种弊端得,同时还是微信公众号里面,如果小程序得话,或许会简单一点,但是这里是在公众号里面开发,在这个过程中查阅个各种资料,其实里面得东西都大同小异,但是大多数并不全, 首先微信公众号里面得H5开发语音录入,试过各种方法,由于是java渣渣,页面技术只是了解简单得,因此在使用标签得时候,本身并不能适用于当前得需求,因此最后只能选择了微信自带得录音功能,使用微信提供的接口,(具体得接口使用还是去看微信接口得使用) 由于使用微信得接口得话,首先要上传到它得服务器上面去(虽然也有本地得文件储存id,但是好像并没有用),这里就涉及到了一个serverid,这个值是存在于微信临时素材库得id,后期要用它来获取录音得文件。 通过微信提供得获取临时素材文件得接口,得到了文件(具体方法网上一搜一大堆,后期我也会将完整得代码放进资源里面),但是这里有一个坑得问题,他的格式为.amr得格式,但是最后的目的是换为文字,因此这里涉及到了格式换 主要用了现成得技术,也是通过下载资源获取得jar以及实现得方法,将.amr换为了MP3格式 然后就就是最后一部了,将mp3得音频文件换为文字,我这里用的是讯飞得技术,当然百度得也可以, 其实整个需求得这个流程已经完成了,但是不得不说里面遇到得坑,由于是渣渣,除了人们总说的,换为mp3得时候会报N/A得错误,我还遇到了unkowFormat这个错误。 这里只是记录一下自己在查询资料时没有一个符合自己需求得资料,同时也希望以后有这样需求得人,可以将思路捋的更加清楚,也可以进行交流.

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值