• 首页 首页 icon
  • 工具库 工具库 icon
    • IP查询 IP查询 icon
  • 内容库 内容库 icon
    • 快讯库 快讯库 icon
    • 精品库 精品库 icon
    • 问答库 问答库 icon
  • 更多 更多 icon
    • 服务条款 服务条款 icon

保姆级教程js前端接入科大讯飞语音评测,实现朗读打分,vue对接科大讯飞语音评测,还可以实现句子逐词对错以和打分,demo接入vue项目

武飞扬头像
刚作愁时又忆卿
帮助1

需求说明:实现一个点击录制英文句子朗读,然后调用科大讯飞接口分析朗读准确度,并逐词分析朗读正确性。

步骤一、下载运行demo

首先附上科大讯飞语音评测流式版的文档链接:链接在此
然后在文档里找到demo下载,如图:
学新通

步骤二、注册获取appid

运行起来以后还不能直接调用接口,因为我们需要在讯飞开放平台注册登录并创建应用,然后拿到appid,apisecret,apikey这3个数据,然后填到demo中的index.js中去,保存再来操作点击开始识别,就可以用了,免费版的每天可以调用500次接口,测试够用了。

学新通
这是分析完成的结果
学新通

步骤三、引入自己的VUE项目中

demo是使用webpack的包管理工具,如果我们要接入vue,那我们接着往下走:
首先我们大概估计哪些是重要的工具,如图:
学新通
红框圈起来的是我们需要用到的文件,其实已经是全部的内容了,红线删除的两个页面和样式文件留不留都无所谓,反正我们肯定要用我们自己的样式页面。最最重要的就是index.js文件了,这里直接写了长链接的开启、录音权限的调用、请求状态的监听等等,这个文件很重要,

我们把index.js里面的所有带有布局id的内容都删掉,比如:
学新通
当然还有其他的一些布局相关的也删掉,自己去找一下吧。删掉以后看调用吧,调用最重要的就是两个监听事件,一个是长链接状态监听,一个是获取分析结果监听,代码长这样:


let iseRecorder = new IseRecorder()
let countInterval
// 状态改变时触发
iseRecorder.onWillStatusChange = function(oldStatus, status) {
  // 可以在这里进行页面中一些交互逻辑处理:倒计时(语音评测支持180s),录音的动画,按钮交互等
}

// 监听识别结果的变化
iseRecorder.onTextChange = function(grade) {
  console.log('iseRecorder.onTextChange==>',grade)
  console.log(JSON.stringify(grade))
}

这就是调用并监听,我们把这两个监听事件放到我们的vue组件的mounted中,让他自动创建监听并实现事件的操作。

学新通
然后我们搞一个按钮,点击以后调用this.iseRecorder.start()这句来实现录制,当录制状态发生改变的时候,我们可以在监听事件中获取到状态来对我们的界面进行操作(图标切换、进度条展示、倒计时等)
学新通

注意!!! 添加依赖并配置worker

这里调用会出一个问题,那就是在index.js里有这么一句:let transWorker = new TransWorker(),这句话会报一个错,
_IMPORTED_MODULE_50___default.a is not a constructor
at eval (index.js:19:1)
错误内容说这里不是一个构造器,不能new,我们进到transcode.worker.js这个文件里看下
学新通
发现确实也不是一个类,(大致解释一下:是使用立即调用函数表达式(Immediately-invoked function expression,IIFE)来创建一个名为transAudioData的对象,并将其作为Web Worker的处理程序。Web Worker在处理传入消息时会调用onmessage函数,因此该函数被指定为self.onmessage的值。然后,transAudioData对象具有一个transcode方法,用于执行音频转码。当此方法被调用时,它将输入的音频数据进行转码,并使用postMessage方法将输出数据发送回主线程。)

上面这段文字了解就好了,咱们接着解决问题,为什么demo中就可以直接new,而我们不行呢,是因为少一个配置:

首先我们在依赖中添加(你的项目中可能还缺少其中的别的依赖,根据报错去引入即可)

"crypto-js": "^4.0.0",
"fast-xml-parser": "^3.17.4",
"crypto-js": "^4.0.0",
"copy-webpack-plugin": "^5.1.1",

在vue.config.js文件顶部添加:

const CopyWebpackPlugin = require('copy-webpack-plugin');

然后在vue.config.js中的configureWebpack下添加以下内容(注意这里的路径的写法和demo有区别哦,写法不对是无法传输录音数据的呦):

		module: {
            rules: [
                {
                    test: /\.worker\.js$/,
                    use: { loader: 'worker-loader' }
                }
            ]
        },
        plugins: [
            new CopyWebpackPlugin([{
                from: './src/audiorecord/pages/doc/readme.md',
                to: './data/doc.readme.md'
            }, {
                from: './src/audiorecord/pages/doc/transcode.js',
                to: './data/transcode.js'
            }, {
                from: './src/audiorecord/pages/doc/websocket.js',
                to: './data/websocket.js'
            }])
        ],

学新通

解释一下这部分配置内容,就是音频录制相关的内容,如果不配置的话,就无法获取录制的音频数据。

然后在控制台命令行终端ctrl C停止,然后重新运行项目,就可以生效了,这个问题很关键,没有人指点的话会卡很久,
然后我们就可以接着上面的步骤,在vue组件中继续调用了。至此可以成功返回数据了。数据如图,至于解析json数据,自己去处理吧,能看到这儿的同学肯定不用我来指点怎么去分析json数据吧,数据拿到了,那不就想怎么处理就怎么处理喽。

学新通

结尾、打分参数

对了,打分和分析单词对错的参数,文档里都有,官方文档在此,包括每个单词也有分数,但是单词的对错有一个专门的参数,我把这个秘密告诉你吧:serr_msg,你去数据里搜索这个参数名就可以,这个参数等于0代表正确,1代表错误,其他的值是官方用来测试新值的,可以忽略不计,都按照错误处理吧。

结语

到这里就完了,虽然乱了一些,但是总归很详细,希望你能看明白哈哈哈,不明白的或者没实现的可以评论区提问,我知无不言。主要是给自己做个记录,以防下次再用就忘记了,拜拜~~

这篇好文章是转载于:学新通技术网

  • 版权申明: 本站部分内容来自互联网,仅供学习及演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,请提供相关证据及您的身份证明,我们将在收到邮件后48小时内删除。
  • 本站站名: 学新通技术网
  • 本文地址: /boutique/detail/tanhggcccg
系列文章
更多 icon
同类精品
更多 icon
继续加载