Vue使用讯飞实时语音识别


进入讯飞官方文档实时语音识别通过下载示例demo,这里选择的是demo js.

创建项目并引入js文件


这里使用的是vue项目,便在public下的index.html直接引入了

<script src="./js/hmac-sha256.js"></script>
<script src="./js/HmacSHA1.js"></script>
<script src="./js/md5.js"></script>
<script src="./js/enc-base64-min.js"></script>
<script src="./js/index.umd.js"></script>

创建vue页面

其中的appIdsecretKey需要在讯飞工作台中找到自己申请的进行替换。
其中mounted中所引用的js代表processor.worker.js所在文件地址。

 this.recorder = new RecorderManager("../js");
<template>
	<div>
		{
  {message}}
		<div>浏览器录音听写:<button @click.stop="startLuyin">{
  {btnTxt}}</button></div>
		<div>输出结果:{
  {resultText}}</div>
	</div>
</template>

<script>
	export default {
     
		name: 'App',
		data() {
     
			return {
     
				message: 'Hello Vue!',
				btnStatus:"UNDEFINED", // "UNDEFINED" "CONNECTING" "OPEN" "CLOSING" "CLOSED"
				recorder:null,
				resultText:'',
				resultTextTemp:'',
				countdownInterval:null,
				iatWS:null,
				btnTxt:'开始录音',
			};
		}
### 集成科大实时语音转写功能于Vue项目 #### 准备工作 为了在Vue项目中集成科大实时语音转写功能,需先完成必要的准备工作。这包括获取科大开放平台上的API密钥以及安装所需的依赖库。 #### 安装依赖项 确保已安装`websocketchat`或其他适用于Websocket通信的npm包来处理与科大服务器之间的连接[^2]: ```bash npm install websocketchat --save ``` 实际上,具体使用的WebSocket库取决于科大文档中的推荐或个人偏好;上述命令仅为示意性质。 #### 创建语音识别服务类 创建一个新的JavaScript模块(例如命名为`SpeechRecognitionService.js`),用来封装同科大交互所需的方法: ```javascript // SpeechRecognitionService.js import { createSocket } from 'some-websocket-package'; // 替换成实际使用的websocket库 class SpeechRecognitionService { constructor(appId, apiKey) { this.appId = appId; this.apiKey = apiKey; this.socketUrl = `wss://ws-api.xfyun.cn/v1/iat?appid=${this.appId}&token=${this.getAccessToken()}`; this.wsClient = null; } getAccessToken() { /* 获取accessToken逻辑 */ return "your_access_token"; } connect() { const wsInstance = createSocket(this.socketUrl); wsInstance.on('open', () => console.log('Connected to iFlytek WebSocket')); wsInstance.on('message', (data) => console.log(`Received message: ${JSON.stringify(data)}`)); wsInstance.on('close', () => console.log('Disconnected')); this.wsClient = wsInstance; } sendAudio(audioData) { if (!this.wsClient || !this.wsClient.readyState === 1) throw new Error("WebSocket is not connected"); this.wsClient.send(JSON.stringify({ data: audioData })); } } export default SpeechRecognitionService; ``` 此部分代码展示了如何建立至科大的服务端口链接并定义发送音频数据给对方的方式。 #### 构建Vue组件 接下来,在Vue组件内部引入刚才创建的服务,并编写UI界面让用户能够上传录音文件或是录制新的声音片段再传递给后台进行分析转换为文本形式显示出来。 ```html <template> <div class="speech-recognition"> <button @click="startRecording">Start Recording</button> <button v-if="isRecording" @click="stopAndTranscribe">Stop & Transcribe</button> <p>{{ transcription }}</p> </div> </template> <script> import SpeechRecognitionService from './path/to/SpeechRecognitionService'; let recognitionSvc; export default { name: 'VoiceToText', data() { return { isRecording: false, transcription: '' }; }, methods: { async startRecording() { try { navigator.mediaDevices.getUserMedia({audio: true}) .then(stream => { let chunks = []; const mediaRecorder = new MediaRecorder(stream); mediaRecorder.addEventListener('dataavailable', event => chunks.push(event.data)); mediaRecorder.start(); mediaRecorder.addEventListener('stop', async () => { const blob = new Blob(chunks); await transcribe(blob); stream.getTracks().forEach(track => track.stop()); }); this.isRecording = true; function transcribe(blob){ const reader = new FileReader(); reader.onloadend = async () => { const base64String = btoa(reader.result.split(',')[1]); recognitionSvc.connect(); // 建立webscoket连接 setTimeout(() => { recognitionSvc.sendAudio(base64String); // 发送base64编码后的音频数据 recognitionSvc.wsClient.on('message', ({data})=>{ const result = JSON.parse(data).cn.rsl; setTranscription(result.wd.join('')); // 更新transcription属性值 }); }, 500); }; reader.readAsDataURL(blob); }; document.querySelector('[v-if]').addEventListener('click', ()=>{ mediaRecorder.stop(); }) }).catch(err=>console.error(err)) } catch(error){console.warn(error)} } }, mounted(){ recognitionSvc = new SpeechRecognitionService('YOUR_APP_ID','YOUR_API_KEY'); } } </script> ``` 这段模板和脚本实现了基本的功能:启动麦克风权限请求、记录用户的讲话内容并通过WebSocket协议向科大提交待处理的数据流最终得到返回的结果呈现在界面上。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值