赞
踩
需求:在vue的h5页面上使用科大讯飞的语音转文字功能 /聊天页面发送语音消息点击朗读
代码如下(示例):
- /**
- * Created by lycheng on 2019/8/1.
- *
- * 语音听写流式 WebAPI 接口调用示例 接口文档(必看):https://doc.xfyun.cn/rest_api/语音听写(流式版).html
- * webapi 听写服务参考帖子(必看):http://bbs.xfyun.cn/forum.php?mod=viewthread&tid=38947&extra=
- * 语音听写流式WebAPI 服务,热词使用方式:登陆开放平台https://www.xfyun.cn/后,找到控制台--我的应用---语音听写---个性化热词,上传热词
- * 注意:热词只能在识别的时候会增加热词的识别权重,需要注意的是增加相应词条的识别率,但并不是绝对的,具体效果以您测试为准。
- * 错误码链接:
- * https://www.xfyun.cn/doc/asr/voicedictation/API.html#%E9%94%99%E8%AF%AF%E7%A0%81
- * https://www.xfyun.cn/document/error-code (code返回错误码时必看)
- * 语音听写流式WebAPI 服务,方言或小语种试用方法:登陆开放平台https://www.xfyun.cn/后,在控制台--语音听写(流式)--方言/语种处添加
- * 添加后会显示该方言/语种的参数值
- *
- */
-
- // 1. websocket连接:判断浏览器是否兼容,获取websocket url并连接,这里为了方便本地生成websocket url
- // 2. 获取浏览器录音权限:判断浏览器是否兼容,获取浏览器录音权限,
- // 3. js获取浏览器录音数据
- // 4. 将录音数据处理为文档要求的数据格式:采样率16k或8K、位长16bit、单声道;该操作属于纯数据处理,使用webWork处理
- // 5. 根据要求(采用base64编码,每次发送音频间隔40ms,每次发送音频字节数1280B)将处理后的数据通过websocket传给服务器,
- // 6. 实时接收websocket返回的数据并进行处理
-
- // ps: 该示例用到了es6中的一些语法,建议在chrome下运行
-
- import CryptoJS from 'crypto-js'
- import TransWorker from '@/js/transcode.worker.js'
- import './index.css'
- //import {getAuthUrl} from '@/api/websocketUrl.js'
-
-
- let transWorker = new TransWorker()
- //APPID,APISecret,APIKey在控制台-我的应用-语音听写(流式版)页面获取
- const APPID = '5ea8d439'
- const API_SECRET = 'f723e5fc58653672607a525aad6d22a'//6
- const API_KEY = '41252ac4bd31676c7944905ecfaffa8'//b
-
- /**
- * 获取websocket url
- * 该接口需要后端提供,这里为了方便前端处理
- */
- function getWebSocketUrl() {
- return new Promise((resolve, reject) => {
- // 请求地址根据语种不同变化
- var url = 'wss://iat-api.xfyun.cn/v2/iat'
- var host = 'iat-api.xfyun.cn'
- var apiKey = API_KEY
- var apiSecret = API_SECRET
- var date = new Date().toGMTString()
- var algorithm = 'hmac-sha256'
- var headers = 'host date request-line'
- var signatureOrigin = `host: ${host}\ndate: ${date}\nGET /v2/iat HTTP/1.1`
- var signatureSha = CryptoJS.HmacSHA256(signatureOrigin, apiSecret)
- var signature = CryptoJS.enc.Base64.stringify(signatureSha)
- var authorizationOrigin = `api_key="${apiKey}", algorithm="${algorithm}", headers="${headers}", signature="${signature}"`
- var authorization = btoa(authorizationOrigin)
- url = `${url}?authorization=${authorization}&date=${date}&host=${host}`
- resolve(url)
- })
- }
-
- class IatRecorder {
- constructor({ language, accent, appId } = {}) {
- let self = this
- this.status = 'null'
- this.language = language || 'zh_cn'
- this.accent = accent || 'mandarin'
- this.appId = appId || APPID
- // 记录音频数据
- this.audioData = []
- // 记录听写结果
- this.resultText = ''
- //保存录音
- this.leftDataList = [],
- this.rightDataList = [];
- //保存录音 end
- // wpgs下的听写结果需要中间状态辅助记录
- this.resultTextTemp = ''
- transWorker.onmessage = function (event) {
- self.audioData.push(...event.data)
- }
- }
- // 修改录音听写状态
- setStatus(status) {
- this.onWillStatusChange && this.status !== status && this.onWillStatusChange(this.status, status)
- this.status = status
- }
- setResultText({ resultText, resultTextTemp } = {}) {
- console.log(resultText+'-----'+resultTextTemp)
- this.onTextChange && this.onTextChange(resultTextTemp || resultText || '')
- resultText !== undefined && (this.resultText = resultText)
- resultT
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。