首页IT科技科大讯飞语音引擎3.0怎么卸载(vue3+vite+ts项目集成科大讯飞语音识别(项目搭建过程以及踩坑记录))

科大讯飞语音引擎3.0怎么卸载(vue3+vite+ts项目集成科大讯飞语音识别(项目搭建过程以及踩坑记录))

时间2025-09-17 12:22:58分类IT科技浏览6036
导读:🐱 个人主页:不叫猫先生...

🐱 个人主页:不叫猫先生

🙋‍♂️ 作者简介:前端领域新星创作者              、阿里云专家博主              ,专注于前端各领域技术                       ,共同学习共同进步        ,一起加油呀!

💫系列专栏:vue3从入门到精通                       、TypeScript从入门到实践

📢 资料领取:前端进阶资料以及文中源码可以找我免费领取

🔥 前端学习交流:博主建立了一个前端交流群              ,汇集了各路大神                      ,互相交流学习        ,期待你的加入!(文末有我wx或者直接私信)

背景

本人最近在做数字人项目       ,用到科大讯飞的语音识别功能                      ,遇到了许多坑               ,做个总结       ,给兄弟们铺铺路               。科大讯飞语音识别主要通过识别声音然后转换成文字                      ,具体展示如下图所示:

一        、项目环境

vue3+ts+vite

二              、注册科大讯飞

注册后新建个应用               ,拿到APPID                      、APISecret        、APIkey,在项目中会用到这三个参数                      ,新用户有500条免费的服务量                      。

,

三       、下载语音识别demo

科大讯飞文档中心中示例demo                       ,博主选择的是js语言,注意该demo项目环境为webpack+js

选择demo-js语言下载

四                      、新建vue3项目

yarn creat vite project-name 或者 npm init vite@latest project-name

五               、项目目录

digitalPerson ├─ .gitignore ├─ README.md ├─ auto-imports.d.ts ├─ index.html ├─ package.json ├─ public │ ├─ index.html │ └─ vite.svg ├─ src │ ├─ App.vue │ ├─ assets │ │ └─ vue.svg │ ├─ components │ │ └─ HelloWorld.vue │ ├─ iat_ws.js │ ├─ layout │ │ └─ index.vue │ ├─ main.ts │ ├─ router │ │ └─ index.ts │ ├─ style.css │ ├─ until │ │ ├─ base64js.js │ │ ├─ bootstrap.js │ │ ├─ browser.min.js │ │ ├─ jquery.js │ │ └─ transcode.worker.js │ ├─ views │ │ └─ index.vue │ └─ vite-env.d.ts ├─ tsconfig.json ├─ tsconfig.node.json ├─ vite.config.ts ├─ vite.config.ts.js └─ yarn.lock

六       、配置

package.json配置项具体如下              ,我们需要安装一些依赖来支持语音识别demo适应vue3环境                       ,不然会遇到很多问题.

"dependencies": { "@originjs/vite-plugin-commonjs": "^1.0.3", "@rollup/plugin-inject": "^5.0.3", "ant-design-vue": "^3.2.15", "jquery": "^3.6.2", "vue": "^3.2.45", "vue-router": "^4.1.6" }, "devDependencies": { "@types/node": "^18.11.17", "@vitejs/plugin-vue": "^4.0.0", "crypto-js": "4.0.0", "typescript": "^4.9.3", "unplugin-auto-import": "^0.12.1", "vconsole": "^3.15.0", "vite": "^4.0.0", "vue-tsc": "^1.0.11" } 依赖名称 描述 @originjs/vite-plugin-commonjs 项目中混用 require 和 import         ,即存在混用 commonJS 和 ES6 模块的情况              ,需要用该插件的transformMixedEsModules 配置进行 hotfix @rollup/plugin-inject 使用该插件注入全局 jQuery 环境 @types/node 可以整体解决模块的声明文件问题 crypto-js 加密                      、解密 unplugin-auto-import 自动导入vue               、vue-router等提供的API vconsole 提供轻量、可拓展                      、针对手机网页的前端开发者调试面板

具体代码实现如下:

import { defineConfig } from vite import vue from @vitejs/plugin-vue import { resolve } from path import AutoImport from unplugin-auto-import/vite import { viteCommonjs } from @originjs/vite-plugin-commonjs // 让浏览器支持commonjs语法 import inject from @rollup/plugin-inject export default defineConfig({ plugins: [ vue(), AutoImport({ imports: [vue, vue-router]//自动导入vue和vue-router相关函数 }), inject({ $: "jquery", // 这里会自动载入 node_modules 中的 jquery jQuery: "jquery", "windows.jQuery": "jquery" }), viteCommonjs({ transformMixedEsModules: true//混用 commonJS 和 ES6 模块 }) ], resolve: { alias: { @: resolve(__dirname, src), components: resolve(__dirname, src/components), }, extensions: [.js, .json, .ts, .vue], // 使用路径别名时想要省略的后缀名                      ,可以自己 增减 }, server: { port: 8070, host: true, open: true, proxy: {}, hmr: true, // 开启热更新 } })

七                       、踩坑记录

在科大讯飞的js-demo中        ,并没有用到vue或者vite       ,我们实际开发时都会遇到let transWorker = new TransWorker()代码报错                      ,比如:

报错1:TypeError:TransWorker is not a constructor

报错2:Uncaught SyntaxError: The requested module /src/until/transcode.worker.js?t=1671455993687 does not provide an export named default

为什么会报错呢?

import TransWorker from ‘js/transcode.worker.js引入了webWorker文件               ,webWorker相当于js中的线程       ,在主线程中启动一个子线程不影响ui                      ,有关webworker内容如下:

web worker

是运行在后台的 JavaScript               ,不会影响页面的性能        。 当在 HTML 页面中执行脚本时,页面的状态是不可响应的                      ,直到脚本已完成       。

web worker 是运行在后台的 JavaScript                       ,独立于其他脚本,不会影响页面的性能                      。您可以继续做任何愿意做的事情:点击、选取内容等等              ,而此时 web worker 在后台运行               。

在iat_ws.js(本人自定义的文件)文件里面const transWorker = new TransWorker() 报错                       ,原因是vue里面不能直接使用原生的new Worker        ,vite中有专门关于webworker的配置项              ,详细请前往vite中webworker配置

语法:

const worker = new Worker(new URL(‘./worker.js’, import.meta.url))

所以需要将以下代码

import TransWorker from ./until/transcode.worker.js let transWorker = new TransWorker()

改为如下

const transWorker = new Worker(new URL(./until/transcode.worker.js, import.meta.url))

并且transcode.worker.js文件需要修改为如下所示:

self.onmessage = function(e){ transAudioData.transcode(e.data) } let transAudioData = { transcode(audioData) { let output = transAudioData.to16kHz(audioData) output = transAudioData.to16BitPCM(output) output = Array.from(new Uint8Array(output.buffer)) self.postMessage(output) }, to16kHz(audioData) { var data = new Float32Array(audioData) var fitCount = Math.round(data.length * (16000 / 44100)) var newData = new Float32Array(fitCount) var springFactor = (data.length - 1) / (fitCount - 1) newData[0] = data[0] for (let i = 1; i < fitCount - 1; i++) { var tmp = i * springFactor var before = Math.floor(tmp).toFixed() var after = Math.ceil(tmp).toFixed() var atPoint = tmp - before newData[i] = data[before] + (data[after] - data[before]) * atPoint } newData[fitCount - 1] = data[data.length - 1] return newData }, to16BitPCM(input) { var dataLength = input.length * (16 / 8) var dataBuffer = new ArrayBuffer(dataLength) var dataView = new DataView(dataBuffer) var offset = 0 for (var i = 0; i < input.length; i++, offset += 2) { var s = Math.max(-1, Math.min(1, input[i])) dataView.setInt16(offset, s < 0 ? s * 0x8000 : s * 0x7fff, true) } return dataView }, }

八              、实现效果

具体实现效果如下                      ,样式忽略😄

声明:本站所有文章        ,如无特殊说明或标注       ,均为本站原创发布       。任何个人或组织                      ,在未征得本站同意时               ,禁止复制                       、盗用        、采集              、发布本站内容到任何网站                      、书籍等各类媒体平台                      。如若本站内容侵犯了原著者的合法权益       ,可联系我们进行处理               。

创心域SEO版权声明:以上内容作者已申请原创保护,未经允许不得转载,侵权必究!授权事宜、对本内容有异议或投诉,敬请联系网站管理员,我们将尽快回复您,谢谢合作!

展开全文READ MORE
vue点击切换颜色(Vue项目如何配置、切换主题颜色(mixin + scss方式,简单高效)) vue3的ref和reactive的区别(Vue3:探讨一下mixin)