仲裁视频会议H5

f4bb1be2574ff772140b18e033b98356cccbb62adcfb79158fe4c7127b4fffad.json 29KB

1
  1. {"ast":null,"code":"import \"core-js/modules/es.typed-array.to-reversed.js\";\nimport \"core-js/modules/es.typed-array.to-sorted.js\";\nimport \"core-js/modules/es.typed-array.with.js\";\nimport \"core-js/modules/web.dom-exception.stack.js\";\nimport \"core-js/modules/es.array.push.js\";\nimport './cryptojs.js';\nfunction formatSignString(query, params) {\n let strParam = \"\";\n let signStr = \"asr.cloud.tencent.com/asr/v2/\";\n if (query['appid']) {\n signStr += query['appid'];\n }\n const keys = Object.keys(params);\n keys.sort();\n for (let i = 0, len = keys.length; i < len; i++) {\n strParam += `&${keys[i]}=${params[keys[i]]}`;\n }\n return `${signStr}?${strParam.slice(1)}`;\n}\nasync function createQuery(query) {\n const params = {};\n const time = new Date().getTime();\n async function getServerTime() {\n return new Promise((resolve, reject) => {\n try {\n const xhr = new XMLHttpRequest();\n xhr.open(\"GET\", 'https://asr.cloud.tencent.com/server_time', true);\n xhr.send();\n xhr.onreadystatechange = function () {\n if (xhr.readyState === 4 && xhr.status === 200) {\n resolve(xhr.responseText);\n }\n };\n } catch (error) {\n reject(error);\n }\n });\n }\n const serverTime = await getServerTime();\n params['secretid'] = query.secretid || '';\n params['engine_model_type'] = query.engine_model_type || '16k_zh';\n params['timestamp'] = parseInt(serverTime) || Math.round(time / 1000);\n params['expired'] = Math.round(time / 1000) + 24 * 60 * 60;\n params['nonce'] = Math.round(time / 100000);\n params['voice_id'] = guid();\n\n // 非必填参数\n query.hasOwnProperty('voice_format') && (params['voice_format'] = query.voice_format);\n query.hasOwnProperty('hotword_id') && (params['hotword_id'] = query.hotword_id);\n query.hasOwnProperty('needvad') && (params['needvad'] = query.needvad);\n query.hasOwnProperty('filter_dirty') && (params['filter_dirty'] = query.filter_dirty);\n query.hasOwnProperty('filter_modal') && (params['filter_modal'] = query.filter_modal);\n query.hasOwnProperty('filter_punc') && (params['filter_punc'] = query.filter_punc);\n query.hasOwnProperty('convert_num_mode') && (params['convert_num_mode'] = query.convert_num_mode);\n query.hasOwnProperty('word_info') && (params['word_info'] = query.word_info);\n query.hasOwnProperty('vad_silence_time') && (params['vad_silence_time'] = query.vad_silence_time);\n query.hasOwnProperty('max_speak_time') && (params['max_speak_time'] = query.max_speak_time);\n query.hasOwnProperty('token') && (params['token'] = query.token);\n\n // 处理extendParams\n if (typeof query.extend_params !== null) {\n for (let item in query.extend_params) {\n params[item] = query.extend_params[item];\n }\n }\n return params;\n}\nexport const guid = () => {\n return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function (c) {\n const r = Math.random() * 16 | 0,\n v = c === 'x' ? r : r & 0x3 | 0x8;\n return v.toString(16);\n });\n};\n// 获取签名原文\nasync function getUrl(self, params) {\n if (!params.appid || !params.secretid) {\n self.OnError('请确认是否填入账号信息');\n return false;\n }\n const urlQuery = await createQuery(params);\n const queryStr = formatSignString(params, urlQuery);\n let signature = '';\n if (params.signCallback) {\n signature = params.signCallback(queryStr);\n } else {\n signature = signCallback(params.secretkey, queryStr);\n }\n return `wss://${queryStr}&signature=${encodeURIComponent(signature)}`;\n}\n/** 获取签名 start */\n\nfunction toUint8Array(wordArray) {\n // Shortcuts\n const words = wordArray.words;\n const sigBytes = wordArray.sigBytes;\n\n // Convert\n const u8 = new Uint8Array(sigBytes);\n for (let i = 0; i < sigBytes; i++) {\n u8[i] = words[i >>> 2] >>> 24 - i % 4 * 8 & 0xff;\n }\n return u8;\n}\nfunction Uint8ArrayToString(fileData) {\n let dataString = '';\n for (let i = 0; i < fileData.length; i++) {\n dataString += String.fromCharCode(fileData[i]);\n }\n return dataString;\n}\n// 签名函数示例\nfunction signCallback(secretKey, signStr) {\n const hash = window.CryptoJSTest.HmacSHA1(signStr, secretKey);\n const bytes = Uint8ArrayToString(toUint8Array(hash));\n return window.btoa(bytes);\n}\n\n/** 获取签名 end */\n\nconst TAG = 'SpeechRecognizer';\nexport class SpeechRecognizer {\n constructor(params, requestId, isLog) {\n this.socket = null;\n this.isSignSuccess = false; // 是否鉴权成功\n this.isSentenceBegin = false; // 是否一句话开始\n this.query = {\n ...params\n };\n this.isRecognizeComplete = false; // 当前是否识别结束\n this.requestId = requestId;\n this.isLog = isLog;\n this.sendCount = 0;\n this.getMessageList = [];\n }\n // 暂停识别,关闭连接\n stop() {\n if (this.socket && this.socket.readyState === 1) {\n this.socket.send(JSON.stringify({\n type: 'end'\n }));\n this.isRecognizeComplete = true;\n } else {\n this.OnError({\n code: 6003,\n message: '连接未建立或连接已关闭'\n });\n if (this.socket && this.socket.readyState === 1) {\n this.socket.close();\n }\n }\n }\n // 建立websocket链接 data 为用户收集的音频数据\n async start() {\n this.socket = null;\n this.getMessageList = [];\n const url = await getUrl(this, this.query);\n if (!url) {\n this.OnError('鉴权失败');\n return;\n }\n this.isLog && console.log(this.requestId, 'get ws url', url, TAG);\n if ('WebSocket' in window) {\n this.socket = new WebSocket(url);\n } else if ('MozWebSocket' in window) {\n this.socket = new MozWebSocket(url);\n } else {\n this.OnError('浏览器不支持WebSocket');\n return;\n }\n this.socket.onopen = e => {\n // 连接建立时触发\n this.isLog && console.log(this.requestId, '连接建立', e, TAG);\n };\n this.socket.onmessage = async e => {\n // 连接建立时触发\n try {\n this.getMessageList.push(JSON.stringify(e));\n const response = JSON.parse(e.data);\n if (response.code !== 0) {\n if (this.socket.readyState === 1) {\n this.socket.close();\n }\n this.OnError(response);\n } else {\n if (!this.isSignSuccess) {\n this.OnRecognitionStart(response);\n this.isSignSuccess = true;\n }\n if (response.final === 1) {\n this.OnRecognitionComplete(response);\n return;\n }\n if (response.result) {\n if (response.result.slice_type === 0) {\n this.OnSentenceBegin(response);\n this.isSentenceBegin = true;\n } else if (response.result.slice_type === 2) {\n if (!this.isSentenceBegin) {\n this.OnSentenceBegin(response);\n }\n this.OnSentenceEnd(response);\n } else {\n this.OnRecognitionResultChange(response);\n }\n }\n }\n } catch (e) {\n this.isLog && console.log(this.requestId, 'socket.onmessage catch error', JSON.stringify(e), TAG);\n }\n };\n this.socket.onerror = e => {\n // 通信发生错误时触发\n this.isLog && console.log(this.requestId, 'socket error callback', e, TAG);\n this.socket.close();\n this.OnError(e);\n };\n this.socket.onclose = event => {\n try {\n if (!this.isRecognizeComplete) {\n this.isLog && console.log(this.requestId, 'socket is close and error', JSON.stringify(event), TAG);\n this.OnError(event);\n }\n } catch (e) {\n this.isLog && console.log(this.requestId, 'socket is onclose catch' + this.sendCount, JSON.stringify(e), TAG);\n }\n };\n }\n close() {\n this.socket && this.socket.close(1000);\n }\n // 发送数据\n write(data) {\n try {\n if (!this.socket || String(this.socket.readyState) !== '1') {\n setTimeout(() => {\n if (!this.socket || this.socket.readyState !== 1) {\n this.socket.send(data);\n }\n }, 40);\n this.OnError({\n code: 6001,\n message: '连接未建立,请稍后发送数据!'\n });\n }\n this.sendCount += 1;\n this.socket.send(data);\n } catch (e) {\n this.isLog && console.log(this.requestId, '发送数据 error catch', e, TAG);\n }\n }\n // 开始识别的时候\n OnRecognitionStart(res) {}\n // 一句话开始的时候\n OnSentenceBegin(res) {}\n // 识别结果发生变化的时候\n OnRecognitionResultChange() {}\n // 一句话结束的时候\n OnSentenceEnd() {}\n // 识别结束的时候\n OnRecognitionComplete() {}\n // 识别失败\n OnError() {}\n}","map":{"version":3,"names":["formatSignString","query","params","strParam","signStr","keys","Object","sort","i","len","length","slice","createQuery","time","Date","getTime","getServerTime","Promise","resolve","reject","xhr","XMLHttpRequest","open","send","onreadystatechange","readyState","status","responseText","error","serverTime","secretid","engine_model_type","parseInt","Math","round","guid","hasOwnProperty","voice_format","hotword_id","needvad","filter_dirty","filter_modal","filter_punc","convert_num_mode","word_info","vad_silence_time","max_speak_time","token","extend_params","item","replace","c","r","random","v","toString","getUrl","self","appid","OnError","urlQuery","queryStr","signature","signCallback","secretkey","encodeURIComponent","toUint8Array","wordArray","words","sigBytes","u8","Uint8Array","Uint8ArrayToString","fileData","dataString","String","fromCharCode","secretKey","hash","window","CryptoJSTest","HmacSHA1","bytes","btoa","TAG","SpeechRecognizer","constructor","requestId","isLog","socket","isSignSuccess","isSentenceBegin","isRecognizeComplete","sendCount","getMessageList","stop","JSON","stringify","type","code","message","close","start","url","console","log","WebSocket","MozWebSocket","onopen","e","onmessage","push","response","parse","data","OnRecognitionStart","final","OnRecognitionComplete","result","slice_type","OnSentenceBegin","OnSentenceEnd","OnRecognitionResultChange","onerror","onclose","event","write","setTimeout","res"],"sources":["/Users/Guest/nouiroom/src/utils/speechrecognizer.js"],"sourcesContent":["import './cryptojs.js';\n\nfunction formatSignString(query, params){\n let strParam = \"\";\n let signStr = \"asr.cloud.tencent.com/asr/v2/\";\n if(query['appid']){\n signStr += query['appid'];\n }\n const keys = Object.keys(params);\n keys.sort();\n for (let i = 0, len = keys.length; i < len; i++) {\n strParam += `&${keys[i]}=${params[keys[i]]}`;\n }\n return `${signStr}?${strParam.slice(1)}`;\n}\nasync function createQuery(query){\n const params = {};\n const time = new Date().getTime();\n\n async function getServerTime(){\n return new Promise((resolve, reject)=>{\n try {\n const xhr = new XMLHttpRequest();\n xhr.open(\"GET\", 'https://asr.cloud.tencent.com/server_time', true);\n xhr.send();\n xhr.onreadystatechange = function () {\n if (xhr.readyState === 4 && xhr.status === 200) {\n resolve(xhr.responseText);\n }\n }\n } catch (error) {\n reject(error);\n }\n })\n }\n const serverTime = await getServerTime();\n params['secretid'] = query.secretid || '';\n params['engine_model_type'] = query.engine_model_type || '16k_zh';\n params['timestamp'] = parseInt(serverTime) || Math.round(time / 1000);\n params['expired'] = Math.round(time / 1000) + 24 * 60 * 60;\n params['nonce'] = Math.round(time / 100000);\n params['voice_id'] = guid();\n\n // 非必填参数\n query.hasOwnProperty('voice_format') && (params['voice_format'] = query.voice_format);\n query.hasOwnProperty('hotword_id') && (params['hotword_id'] = query.hotword_id);\n query.hasOwnProperty('needvad') && (params['needvad'] = query.needvad);\n query.hasOwnProperty('filter_dirty') && (params['filter_dirty'] = query.filter_dirty);\n query.hasOwnProperty('filter_modal') && (params['filter_modal'] = query.filter_modal);\n query.hasOwnProperty('filter_punc') && (params['filter_punc'] = query.filter_punc);\n query.hasOwnProperty('convert_num_mode') && (params['convert_num_mode'] = query.convert_num_mode);\n query.hasOwnProperty('word_info') && (params['word_info'] = query.word_info);\n query.hasOwnProperty('vad_silence_time') && (params['vad_silence_time'] = query.vad_silence_time);\n query.hasOwnProperty('max_speak_time') && (params['max_speak_time'] = query.max_speak_time);\n query.hasOwnProperty('token') && (params['token'] = query.token);\n\n // 处理extendParams\n if (typeof query.extend_params !== null) {\n for (let item in query.extend_params) {\n params[item] = query.extend_params[item];\n }\n }\n return params;\n}\n\nexport const guid = () => {\n return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function (c) {\n const r = Math.random() * 16 | 0,\n v = c === 'x' ? r : (r & 0x3 | 0x8);\n return v.toString(16);\n });\n};\n// 获取签名原文\nasync function getUrl(self, params) {\n if (!params.appid || !params.secretid) {\n self.OnError('请确认是否填入账号信息');\n return false;\n }\n const urlQuery = await createQuery(params);\n const queryStr = formatSignString(params, urlQuery);\n let signature = '';\n if (params.signCallback) {\n signature = params.signCallback(queryStr);\n } else {\n signature = signCallback(params.secretkey, queryStr);\n }\n return `wss://${queryStr}&signature=${encodeURIComponent(signature)}`;\n}\n/** 获取签名 start */\n\nfunction toUint8Array(wordArray) {\n // Shortcuts\n const words = wordArray.words;\n const sigBytes = wordArray.sigBytes;\n\n // Convert\n const u8 = new Uint8Array(sigBytes);\n for (let i = 0; i < sigBytes; i++) {\n u8[i] = (words[i >>> 2] >>> (24 - (i % 4) * 8)) & 0xff;\n }\n return u8;\n}\n\nfunction Uint8ArrayToString(fileData){\n let dataString = '';\n for (let i = 0; i < fileData.length; i++) {\n dataString += String.fromCharCode(fileData[i]);\n }\n return dataString;\n}\n// 签名函数示例\nfunction signCallback(secretKey, signStr) {\n const hash = window.CryptoJSTest.HmacSHA1(signStr, secretKey);\n const bytes = Uint8ArrayToString(toUint8Array(hash));\n return window.btoa(bytes);\n}\n\n/** 获取签名 end */\n\nconst TAG = 'SpeechRecognizer';\nexport class SpeechRecognizer {\n constructor(params, requestId, isLog) {\n this.socket = null;\n this.isSignSuccess = false; // 是否鉴权成功\n this.isSentenceBegin = false; // 是否一句话开始\n this.query = {\n ...params\n };\n this.isRecognizeComplete = false; // 当前是否识别结束\n this.requestId = requestId;\n this.isLog = isLog;\n this.sendCount = 0;\n this.getMessageList = [];\n }\n // 暂停识别,关闭连接\n stop() {\n if (this.socket && this.socket.readyState === 1) {\n this.socket.send(JSON.stringify({type: 'end'}));\n this.isRecognizeComplete = true;\n } else {\n this.OnError({ code : 6003, message: '连接未建立或连接已关闭' });\n if (this.socket && this.socket.readyState === 1) {\n this.socket.close();\n }\n }\n }\n // 建立websocket链接 data 为用户收集的音频数据\n async start(){\n this.socket = null;\n this.getMessageList = [];\n const url = await getUrl(this, this.query);\n if (!url) {\n this.OnError('鉴权失败');\n return\n }\n this.isLog && console.log(this.requestId, 'get ws url', url, TAG);\n if ('WebSocket' in window) {\n this.socket = new WebSocket(url);\n } else if ('MozWebSocket' in window) {\n this.socket = new MozWebSocket(url);\n } else {\n this.OnError('浏览器不支持WebSocket');\n return\n }\n this.socket.onopen = (e) => { // 连接建立时触发\n this.isLog && console.log(this.requestId, '连接建立', e, TAG);\n };\n this.socket.onmessage = async (e) => { // 连接建立时触发\n try {\n this.getMessageList.push(JSON.stringify(e));\n const response = JSON.parse(e.data);\n if (response.code !== 0) {\n if (this.socket.readyState === 1) {\n this.socket.close();\n }\n this.OnError(response);\n } else {\n if (!this.isSignSuccess) {\n this.OnRecognitionStart(response);\n this.isSignSuccess = true;\n }\n if (response.final === 1) {\n this.OnRecognitionComplete(response);\n return;\n }\n if (response.result) {\n if (response.result.slice_type === 0) {\n this.OnSentenceBegin(response);\n this.isSentenceBegin = true;\n } else if (response.result.slice_type === 2) {\n if (!this.isSentenceBegin) {\n this.OnSentenceBegin(response);\n }\n this.OnSentenceEnd(response);\n } else {\n this.OnRecognitionResultChange(response);\n }\n }\n }\n } catch (e) {\n this.isLog && console.log(this.requestId, 'socket.onmessage catch error', JSON.stringify(e), TAG);\n }\n\n };\n this.socket.onerror = (e) => { // 通信发生错误时触发\n this.isLog && console.log(this.requestId, 'socket error callback', e, TAG);\n this.socket.close();\n this.OnError(e);\n }\n this.socket.onclose = (event) => {\n try {\n if (!this.isRecognizeComplete) {\n this.isLog && console.log(this.requestId, 'socket is close and error', JSON.stringify(event), TAG);\n this.OnError(event);\n }\n } catch (e) {\n this.isLog && console.log(this.requestId, 'socket is onclose catch' + this.sendCount, JSON.stringify(e), TAG);\n }\n }\n }\n close() {\n this.socket && this.socket.close(1000);\n }\n // 发送数据\n write(data) {\n try {\n if (!this.socket || String(this.socket.readyState) !== '1') {\n setTimeout(() => {\n if (!this.socket || this.socket.readyState !== 1) {\n this.socket.send(data);\n }\n }, 40);\n this.OnError({ code : 6001, message: '连接未建立,请稍后发送数据!' });\n }\n this.sendCount += 1;\n this.socket.send(data);\n } catch (e) {\n this.isLog && console.log(this.requestId , '发送数据 error catch', e, TAG);\n }\n };\n // 开始识别的时候\n OnRecognitionStart(res) {\n\n }\n // 一句话开始的时候\n OnSentenceBegin(res) {\n\n }\n // 识别结果发生变化的时候\n OnRecognitionResultChange() {\n\n }\n // 一句话结束的时候\n OnSentenceEnd() {\n\n }\n // 识别结束的时候\n OnRecognitionComplete() {\n\n }\n // 识别失败\n OnError() {\n\n }\n}"],"mappings":"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"},"metadata":{},"sourceType":"module","externalDependencies":[]}