1 line
29 KiB
JSON
1 line
29 KiB
JSON
{"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
|