【QT分享】基于QT+科大迅飞的连续语音识别

本博客分享了一个基于QT的连续语音识别演示项目,利用音量大小判断音频录制的开始和结束,提供了MicAudio、WaveRecorder和iFlyVoice三个关键类,分别用于音量监听、录音和语音转文字。

【QT分享】基于QT的连续语音识别 [复制链接]
电梯直达
跳转到指定楼层
21189
楼主| TShadow 发表于 2017-3-13 19:56:21
1#
本帖最后由 TShadow 于 2017-3-13 19:56 编辑


操作系统:windows 10 x64
测试版本:Qt 5.8 mingw

本贴提供一个基于QT的连续语音识别Demo,通过音量大小判断音频录入的开始和结束,在附件的代码里,实时音量跟踪和录音都被封装成了独立的类,大家可以在记的代码里导入这些类并直接使用,即可实现连续语音识别了。

  1. MicAudio类
    提供两个可调用的函数,很简单。

    1. void startListen() : 开始监听音量
    2. void stopListen():停止监听音量
      刷新时间可以在函数内部自行修改,当捕获到音量时会自动发出一个signal,在主函数中connect一下并在slot里操作即可。
  2. WaveRecorder类
    主要用到的就是void set_FileName(QString des_path),void Start(),void Stop(),void Reset()

    1. void set_FileName: 设置录音文件
    2. void Start: 开始录音
    3. void Stop: 停止录音
    4. void Reset: 重置参数
      这个类很简单,但是调用的是win底层api,QT在使用之前需要先在pro文件里加载libwinmm.a,这个我已经在demo配置好了,libwinmm.a就在目录下。
  3. iFlyVoice类
    这个类相对于之前的版本(http://bbs.xfyun.cn/forum.php?mo … id=24654&extra=)做了修改,继承了QThread,程序中是以新的线程执行的,为什么这么做后面会说。主要用到以下函数:

    1. bool login(const char* login_param):登录操作,返回登录是否成功。记得填好自己的appid
    2. bool logout():退出操作,很简单。
    3. void speech2Text(const char* audioFileName, int iaccent, char *grammarId):主要就是语音转文字,具体介绍可以看code里面的说明,这个函数会通过继承QThread的run函数在新的线程里面执行,以start函数自动调用run。

主函数的整体思路:
由MicAudio类实时监听音量变化,当超过一定数值就开始由WaveRecorder类录音,为什么不用Qt自带的录音,一是避免实时监听和录音的冲突,二是底层API的效率会高一些,可以有效避免冲突。当音量低于一定数值时,自动停止录音,然后调用iFlyVoice类开辟新的线程并进行翻译,然后显示出结果。其实,我也试过用QAudioRecorder录音,但是效果总是不好,于是抛弃了。

提示:代码中的appid已经删除,请填写自己的,msc.dll也使用自己的吧,如果遇见未启动就crash,基本上是msc.dll没放好的原因。其他的操作也可以看参考之前的帖子,就是写的有点乱。http://bbs.xfyun.cn/forum.php?mo … id=24654&extra=

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值