| 1 |
- {"ast":null,"code":"import \"core-js/modules/web.url-search-params.delete.js\";\nimport \"core-js/modules/web.url-search-params.has.js\";\nimport \"core-js/modules/web.url-search-params.size.js\";\nimport \"core-js/modules/web.dom-exception.stack.js\";\nimport \"core-js/modules/es.array.push.js\";\nimport \"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 { SpeechRecognizer } from './speechrecognizer.js';\nconst audioWorkletCode = `\nclass MyProcessor extends AudioWorkletProcessor {\n constructor(options) {\n super(options);\n this.audioData = [];\n this.nextUpdateFrame = 40;\n }\n\n get intervalInFrames() {\n return 40 / 1000 * sampleRate;\n }\n\n process(inputs) {\n // 去处理音频数据\n // eslint-disable-next-line no-undef\n const output = ${to16kHz}(inputs[0][0], sampleRate);\n const audioData = ${to16BitPCM}(output);\n const data = [...new Int8Array(audioData.buffer)];\n this.audioData = this.audioData.concat(data);\n this.nextUpdateFrame -= inputs[0][0].length;\n if (this.nextUpdateFrame < 0) {\n this.nextUpdateFrame += this.intervalInFrames;\n this.port.postMessage({\n audioData: new Int8Array(this.audioData)\n });\n this.audioData = [];\n }\n return true;\n }\n}\n\nregisterProcessor('my-processor', MyProcessor);\n`;\nconst audioWorkletBlobURL = window.URL.createObjectURL(new Blob([audioWorkletCode], {\n type: 'text/javascript'\n}));\nexport default class ASR {\n constructor(options) {\n this.audioTrack = options.audioTrack;\n this.audioContext = new (window.AudioContext || window.webkitAudioContext)();\n this.speechRecognizer = null;\n this.isCanSendData = false;\n this.audioData = [];\n this.secretkey = options.secretKey;\n this.params = {\n secretid: options.secretId,\n appid: options.appId,\n engine_model_type: options.engine_model_type || '16k_zh',\n voice_format: options.voice_format || 1,\n // hotword_id: options.hotword_id,\n needvad: options.needvad\n // filter_dirty: options.filter_dirty,\n // filter_modal: options.filter_modal,\n // filter_punc: options.filter_punc,\n // convert_num_mode: options.convert_num_mode,\n // word_info: options.word_info,\n // token: options.token,\n };\n\n this.OnRecognitionStart = function () {};\n this.OnSentenceBegin = function () {};\n this.OnRecognitionResultChange = function () {};\n this.OnSentenceEnd = function () {};\n this.OnRecognitionComplete = function () {};\n this.OnError = function () {};\n this.OnChange = function () {};\n }\n signCallback(signStr) {\n const secretKey = this.secretkey;\n const hash = window.CryptoJSTest.HmacSHA1(signStr, secretKey);\n const bytes = Uint8ArrayToString(toUint8Array(hash));\n return window.btoa(bytes);\n }\n start() {\n if (!this.speechRecognizer) {\n const params = {\n // 用户参数\n signCallback: this.signCallback.bind(this),\n ...this.params\n };\n this.speechRecognizer = new SpeechRecognizer(params);\n }\n\n // 开始识别\n this.speechRecognizer.OnRecognitionStart = res => {\n this.isCanSendData = true;\n this.OnRecognitionStart(res);\n };\n // 一句话开始\n this.speechRecognizer.OnSentenceBegin = res => {\n this.OnSentenceBegin(res);\n this.OnChange(res);\n };\n // 识别变化时\n this.speechRecognizer.OnRecognitionResultChange = res => {\n this.OnRecognitionResultChange(res);\n this.OnChange(res);\n };\n // 一句话结束\n this.speechRecognizer.OnSentenceEnd = res => {\n this.OnSentenceEnd(res);\n this.OnChange(res);\n };\n // 识别结束\n this.speechRecognizer.OnRecognitionComplete = res => {\n this.OnRecognitionComplete(res);\n };\n // 识别错误\n this.speechRecognizer.OnError = res => {\n this.isCanSendData = false;\n this.OnError(res);\n };\n\n // 建立连接\n this.speechRecognizer.start();\n this.getAudioData();\n }\n getAudioData() {\n const mediaStream = new MediaStream();\n mediaStream.addTrack(this.audioTrack);\n const mediaStreamSource = this.audioContext.createMediaStreamSource(mediaStream); // 将声音对象输入这个对象\n if (this.audioContext.audioWorklet) {\n this.audioContext.audioWorklet.addModule(audioWorkletBlobURL).then(() => {\n const myNode = new AudioWorkletNode(this.audioContext, 'my-processor', {\n numberOfInputs: 1,\n numberOfOutputs: 1,\n channelCount: 1\n });\n myNode.port.onmessage = event => {\n if (this.isCanSendData) {\n this.speechRecognizer.write(event.data.audioData);\n }\n };\n mediaStreamSource.connect(myNode).connect(this.audioContext.destination);\n }).catch(console.error);\n } else {\n // 创建一个音频分析对象,采样的缓冲区大小为0(自动适配),输入和输出都是单声道\n const scriptProcessor = this.audioContext.createScriptProcessor(0, 1, 1);\n scriptProcessor.onaudioprocess = e => {\n // 去处理音频数据\n const inputData = e.inputBuffer.getChannelData(0);\n const output = to16kHz(inputData, this.audioContext.sampleRate);\n const audioData = to16BitPCM(output);\n this.audioData.push(...new Int8Array(audioData.buffer));\n if (this.audioData.length > 1280) {\n if (this.isCanSendData) {\n const audioDataArray = new Int8Array(this.audioData);\n this.speechRecognizer.write(audioDataArray);\n this.audioData = [];\n }\n }\n };\n // 连接\n mediaStreamSource.connect(scriptProcessor);\n scriptProcessor.connect(this.audioContext.destination);\n }\n }\n stop() {\n this.speechRecognizer.stop();\n this.audioContext && this.audioContext.suspend();\n }\n}\nwindow && (window.ASR = ASR);\nfunction toUint8Array(wordArray) {\n // Shortcuts\n\n const {\n words\n } = wordArray;\n const {\n sigBytes\n } = wordArray;\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}\nfunction to16BitPCM(input) {\n const dataLength = input.length * (16 / 8);\n const dataBuffer = new ArrayBuffer(dataLength);\n const dataView = new DataView(dataBuffer);\n let offset = 0;\n for (let i = 0; i < input.length; i++, offset += 2) {\n const s = Math.max(-1, Math.min(1, input[i]));\n dataView.setInt16(offset, s < 0 ? s * 0x8000 : s * 0x7fff, true);\n }\n return dataView;\n}\nfunction to16kHz(audioData, sampleRate = 44100) {\n const data = new Float32Array(audioData);\n const fitCount = Math.round(data.length * (16000 / sampleRate));\n const newData = new Float32Array(fitCount);\n const springFactor = (data.length - 1) / (fitCount - 1);\n newData[0] = data[0];\n for (let i = 1; i < fitCount - 1; i++) {\n const tmp = i * springFactor;\n const before = Math.floor(tmp).toFixed();\n const after = Math.ceil(tmp).toFixed();\n const atPoint = tmp - before;\n newData[i] = data[before] + (data[after] - data[before]) * atPoint;\n }\n newData[fitCount - 1] = data[data.length - 1];\n return newData;\n}","map":{"version":3,"names":["SpeechRecognizer","audioWorkletCode","to16kHz","to16BitPCM","audioWorkletBlobURL","window","URL","createObjectURL","Blob","type","ASR","constructor","options","audioTrack","audioContext","AudioContext","webkitAudioContext","speechRecognizer","isCanSendData","audioData","secretkey","secretKey","params","secretid","secretId","appid","appId","engine_model_type","voice_format","needvad","OnRecognitionStart","OnSentenceBegin","OnRecognitionResultChange","OnSentenceEnd","OnRecognitionComplete","OnError","OnChange","signCallback","signStr","hash","CryptoJSTest","HmacSHA1","bytes","Uint8ArrayToString","toUint8Array","btoa","start","bind","res","getAudioData","mediaStream","MediaStream","addTrack","mediaStreamSource","createMediaStreamSource","audioWorklet","addModule","then","myNode","AudioWorkletNode","numberOfInputs","numberOfOutputs","channelCount","port","onmessage","event","write","data","connect","destination","catch","console","error","scriptProcessor","createScriptProcessor","onaudioprocess","e","inputData","inputBuffer","getChannelData","output","sampleRate","push","Int8Array","buffer","length","audioDataArray","stop","suspend","wordArray","words","sigBytes","u8","Uint8Array","i","fileData","dataString","String","fromCharCode","input","dataLength","dataBuffer","ArrayBuffer","dataView","DataView","offset","s","Math","max","min","setInt16","Float32Array","fitCount","round","newData","springFactor","tmp","before","floor","toFixed","after","ceil","atPoint"],"sources":["/Users/Guest/nouiroom/src/utils/asr.esm.js"],"sourcesContent":["import {SpeechRecognizer } from './speechrecognizer.js';\n\nconst audioWorkletCode = `\nclass MyProcessor extends AudioWorkletProcessor {\n constructor(options) {\n super(options);\n this.audioData = [];\n this.nextUpdateFrame = 40;\n }\n\n get intervalInFrames() {\n return 40 / 1000 * sampleRate;\n }\n\n process(inputs) {\n // 去处理音频数据\n // eslint-disable-next-line no-undef\n const output = ${to16kHz}(inputs[0][0], sampleRate);\n const audioData = ${to16BitPCM}(output);\n const data = [...new Int8Array(audioData.buffer)];\n this.audioData = this.audioData.concat(data);\n this.nextUpdateFrame -= inputs[0][0].length;\n if (this.nextUpdateFrame < 0) {\n this.nextUpdateFrame += this.intervalInFrames;\n this.port.postMessage({\n audioData: new Int8Array(this.audioData)\n });\n this.audioData = [];\n }\n return true;\n }\n}\n\nregisterProcessor('my-processor', MyProcessor);\n`;\nconst audioWorkletBlobURL = window.URL.createObjectURL(new Blob([audioWorkletCode], { type: 'text/javascript' }));\n\nexport default class ASR {\n constructor(options) {\n this.audioTrack = options.audioTrack;\n this.audioContext = new (window.AudioContext || window.webkitAudioContext)();\n this.speechRecognizer = null;\n this.isCanSendData = false;\n this.audioData = [];\n this.secretkey = options.secretKey;\n this.params = {\n secretid: options.secretId,\n appid: options.appId,\n engine_model_type: options.engine_model_type || '16k_zh',\n voice_format: options.voice_format || 1,\n // hotword_id: options.hotword_id,\n needvad: options.needvad,\n // filter_dirty: options.filter_dirty,\n // filter_modal: options.filter_modal,\n // filter_punc: options.filter_punc,\n // convert_num_mode: options.convert_num_mode,\n // word_info: options.word_info,\n // token: options.token,\n };\n this.OnRecognitionStart = function () {};\n this.OnSentenceBegin = function () {};\n this.OnRecognitionResultChange = function () {};\n this.OnSentenceEnd = function () {};\n this.OnRecognitionComplete = function () {};\n this.OnError = function () {};\n this.OnChange = function () {};\n }\n signCallback(signStr) {\n const secretKey = this.secretkey;\n const hash = window.CryptoJSTest.HmacSHA1(signStr, secretKey);\n const bytes = Uint8ArrayToString(toUint8Array(hash));\n return window.btoa(bytes);\n }\n start() {\n if (!this.speechRecognizer) {\n const params = {\n // 用户参数\n signCallback: this.signCallback.bind(this),\n ...this.params,\n };\n this.speechRecognizer = new SpeechRecognizer(params);\n }\n\n // 开始识别\n this.speechRecognizer.OnRecognitionStart = (res) => {\n this.isCanSendData = true;\n this.OnRecognitionStart(res);\n };\n // 一句话开始\n this.speechRecognizer.OnSentenceBegin = (res) => {\n this.OnSentenceBegin(res);\n this.OnChange(res);\n };\n // 识别变化时\n this.speechRecognizer.OnRecognitionResultChange = (res) => {\n this.OnRecognitionResultChange(res);\n this.OnChange(res);\n };\n // 一句话结束\n this.speechRecognizer.OnSentenceEnd = (res) => {\n this.OnSentenceEnd(res);\n this.OnChange(res);\n };\n // 识别结束\n this.speechRecognizer.OnRecognitionComplete = (res) => {\n this.OnRecognitionComplete(res);\n };\n // 识别错误\n this.speechRecognizer.OnError = (res) => {\n this.isCanSendData = false;\n this.OnError(res);\n };\n\n // 建立连接\n this.speechRecognizer.start();\n this.getAudioData();\n }\n getAudioData() {\n const mediaStream = new MediaStream();\n mediaStream.addTrack(this.audioTrack);\n const mediaStreamSource = this.audioContext.createMediaStreamSource(mediaStream); // 将声音对象输入这个对象\n if (this.audioContext.audioWorklet) {\n this.audioContext.audioWorklet.addModule(audioWorkletBlobURL).then(() => {\n const myNode = new AudioWorkletNode(this.audioContext, 'my-processor', { numberOfInputs: 1, numberOfOutputs: 1, channelCount: 1 });\n myNode.port.onmessage = (event) => {\n if (this.isCanSendData) {\n this.speechRecognizer.write(event.data.audioData);\n }\n };\n mediaStreamSource.connect(myNode).connect(this.audioContext.destination);\n })\n .catch(console.error);\n } else {\n // 创建一个音频分析对象,采样的缓冲区大小为0(自动适配),输入和输出都是单声道\n const scriptProcessor = this.audioContext.createScriptProcessor(0, 1, 1);\n scriptProcessor.onaudioprocess = (e) => {\n // 去处理音频数据\n const inputData = e.inputBuffer.getChannelData(0);\n const output = to16kHz(inputData, this.audioContext.sampleRate);\n const audioData = to16BitPCM(output);\n this.audioData.push(...new Int8Array(audioData.buffer));\n if (this.audioData.length > 1280) {\n if (this.isCanSendData) {\n const audioDataArray = new Int8Array(this.audioData);\n this.speechRecognizer.write(audioDataArray);\n this.audioData = [];\n }\n }\n };\n // 连接\n mediaStreamSource.connect(scriptProcessor);\n scriptProcessor.connect(this.audioContext.destination);\n }\n }\n stop() {\n this.speechRecognizer.stop();\n this.audioContext && this.audioContext.suspend();\n }\n}\nwindow && (window.ASR = ASR);\n\nfunction toUint8Array(wordArray) {\n // Shortcuts\n\n const { words } = wordArray;\n const { sigBytes } = wordArray;\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}\nfunction to16BitPCM(input) {\n const dataLength = input.length * (16 / 8);\n const dataBuffer = new ArrayBuffer(dataLength);\n const dataView = new DataView(dataBuffer);\n let offset = 0;\n for (let i = 0; i < input.length; i++, offset += 2) {\n const s = Math.max(-1, Math.min(1, input[i]));\n dataView.setInt16(offset, s < 0 ? s * 0x8000 : s * 0x7fff, true);\n }\n return dataView;\n}\nfunction to16kHz(audioData, sampleRate = 44100) {\n const data = new Float32Array(audioData);\n const fitCount = Math.round(data.length * (16000 / sampleRate));\n const newData = new Float32Array(fitCount);\n const springFactor = (data.length - 1) / (fitCount - 1);\n newData[0] = data[0];\n for (let i = 1; i < fitCount - 1; i++) {\n const tmp = i * springFactor;\n const before = Math.floor(tmp).toFixed();\n const after = Math.ceil(tmp).toFixed();\n const atPoint = tmp - before;\n newData[i] = data[before] + (data[after] - data[before]) * atPoint;\n }\n newData[fitCount - 1] = data[data.length - 1];\n return newData;\n}"],"mappings":"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"},"metadata":{},"sourceType":"module","externalDependencies":[]}
|