最近打算做一个语音识别,语义理解机器人方面的软件,于是了解了科大讯飞语音平台,平台大部分都是对Java的支持,对c和c++的支持特别少,对c的支持有Windows的SDK,但是代码相对冗杂,且不支持跨平台,于是打算用Qt做一个跨平台的语音交互软件。
博主也是初学者,代码中如有不规范,各位见谅,百度了很久也没有QT webapi方面的讯飞代码,作为初学者,深知初学者不容易,自己写了个,希望能帮到各位。
运行效果如下:

废话不多说,直接上代码:
首先按照讯飞webapi文档准备好Appid,CurTime, Param 和 CheckSum 信息并放在 HTTP 请求头中,这里只介绍CurTime和CheckSum的获取,其他注册后都是现成的,具体注册参考官方文档吧

//获取当前UTC时间戳并转化
QByteArray Widget::Get_CurTime()
{QDateTime time = QDateTime::currentDateTime();   //获取当前时间int timeT = time.toTime_t();   //将当前时间转为时间戳char *time_box = (char*)malloc(sizeof(char));sprintf(time_box,"%d",timeT);QByteArray x_curtime(time_box);return x_curtime;
}
//checksum
QByteArray Widget::Get_CheckSum(QByteArray apikey, QByteArray curTime, QByteArray para)
{QByteArray hash = QCryptographicHash::hash(apikey+curTime+para, QCryptographicHash::Md5).toHex();return hash;
}

接下来就是post问题并获得答复了。
以下为组合代码罗列,不在一个函数内,引用注意。

//通过按钮触发消息发送,后续可改成语音发送。
connect(BtnFaSong,SIGNAL(clicked(bool)),this,SLOT(on_btnSend_clicked())); //发送问题按钮信号槽绑定//request
QNetworkRequest request;
request.setUrl(QUrl(XunFeiAiui_URL));
request.setHeader(QNetworkRequest::ContentTypeHeader, "application/x-www-form-urlencoded");
//Appid,CurTime, Param 和 CheckSum 信息放在 HTTP 请求头
request.setRawHeader("X-Param",Param);
request.setRawHeader("X-Appid",XunFeiAiui_Appid);
Curtime = Get_CurTime();        //获取当前UTC时间戳
request.setRawHeader("X-CurTime",Curtime);
Check_Sum = Get_CheckSum(XunFeiAiui_Apikey, Curtime, Param);    //checksum
request.setRawHeader("X-CheckSum",Check_Sum);//manger
QNetworkAccessManager *ask_manager = new QNetworkAccessManager(this);
connect(ask_manager, SIGNAL(finished(QNetworkReply*)),this, SLOT(finishedSlot(QNetworkReply*)));
QByteArray dataArray;
QString text = lineEdit->text();
if(text.isEmpty())  //若发送内容为空时,默认发送你好
{text = "你好";
}
dataArray.append(text);
NetworkReply* reply = ask_manager->post(request, dataArray);    //post请求获取         

接下来就是获取post的消息,在槽函数finishedSlot

QNetworkReply::NetworkError err = reply->error();
if(err != QNetworkReply::NoError) {qDebug() << "Failed: " << reply->errorString();
}
else {// 获取返回内容QString data = UTF82GBK(reply->readAll());  //将返回的内容转换成GBK编码,以便正常显示//qDebug() << data;QStringList list = data.split(QRegExp("\""), QString::SkipEmptyParts);  //采用正则分割文本,个人感觉json解析不太方便,如果要严谨,建议还是使用jsonQString str;for(int i=0; i<list.count(); i++)    //遍历list{str = list[i];if(str == "text"){str = list[i+2];    //text后第二个list为返回的主要答复,后第一个是":"break;}}qDebug()<<str;}

看到这里,如果对Qt有所学习,相信你很快能引用我的代码写出自己的Robot,此代码还未添加iat和tts支持,即完全的语音交互和回复,后续会继续更新。
源码下载链接:
https://download.csdn.net/download/weixin_39541080/12430996

基于QT平台webapi科大讯飞语音机器人相关推荐

  1. 基于QT平台webapi科大讯飞语音机器人2.0

    本博是针对上一个版本的语音机器人更新,主要更新内容为对iat的支持,即使用语音交互取代文字输入的方式,由于之前忙于其他事情一直没来的及更新,以后会将语音机器人一直做下去,添加更多的功能和大家分享. 那 ...

  2. 基于Qt平台开发安卓应用

    基于Qt平台开发安卓应用 在之前的Qt学习中,使用QtGUI来实现简单的界面与后台功能设计.这样开发出来的应用往往界面元素比较单一,美感几乎可以省略,与其他移动平台开发的App相比,确实逊色不少.基于 ...

  3. 基于Qt平台的集串口调试助手、示波器、图像显示功能于一体的上位机。

    基于Qt平台的集串口调试助手.示波器.图像显示功能于一体的上位机. 可用的上位机及通信协议可在这里下载,通信协议可以很方便的移植到stm32上 链接:https://pan.baidu.com/s/1 ...

  4. 超详细基于Qt平台实现C/C++调用Matlab函数全流程

    超详细基于Qt平台实现C/C++调用Matlab函数全流程 1. 基本调用方式介绍 2. 环境配置 3. 将Matlab程序写成函数形式 4. Matlab配置C编译器,将.m文件转换成动态链接库 4 ...

  5. 基于云平台的智能语音交互式灌溉系统

    ---------------------------------------------------------------------------------------------------- ...

  6. ubuntu下,在QT中利用科大讯飞语音库实现语音合成TTS

    首先要去科大讯飞语音库注册,下载linux下的在线合成TTS的SDK,然后在QT下建立一个基于控制台的工程,其实建立关于UI的也可以,问题不大,这里以控制台工程进行说明.将sample中TTS部分的t ...

  7. 基于QT平台的手持媒体播放器项目实战视频教程下载

    分享一套关于在QT平台的手持媒体播放器项目实战的视频教程,Qt是一个1991年由奇趣科技开发的跨平台C++图形用户界面应用程序开发框架. 它既可以开发GUI程式,也可用于开发非GUI程式,比如控制台工 ...

  8. 【项目一】基于Qt平台的交互式输入与输出窗口

    [一]前言: 经过一段时间的C++和Qt学习,作为对这一阶段学习成果的检验,我决定使用Qt平台模仿C++的控制台输入输出编写一个项目. 初学C++的时候,程序获取用户输入是通过标准输入输出流对象实现的 ...

  9. 基于QT平台调试rtklib教程

    本次调试基于QT5.6.3 MinGW平台 Windows10系统 rtklib版本为最新b31 下载地址为https://github.com/tomojitakasu/RTKLIB/tree/rt ...

最新文章

  1. 把RNN植入体内,仅凭一张“薄片”,就能直接检测你有无心律异常 | Science子刊...
  2. 位置式PID与增量式PID的介绍和代码实现
  3. C语言 | 求级数的和
  4. python win10还是linux_在win10的Linux子系统(WSL)上搭载python编程环境
  5. nproc是什么意思_top/htop内容的含义
  6. 史上最惨创始人!250亿帝国如今8亿贱卖,还被兄弟亲手送进了监狱
  7. 深度系统安装移动硬盘启动_深度系统如何安装_电脑知识
  8. 使用物理硬盘_许迎果 第147期 机械硬盘的物理结构和逻辑结构
  9. 直线分割平面问题(数学归纳法)
  10. 看数据模型界两大长老的神仙打架
  11. 调试经验——使用VBA下载网络资源
  12. 2022-04-15 redis使用raft协议做主从复制记录
  13. 【金融财经】金融市场一周简报(2017-09-15)
  14. 打造数智制造“新引擎”,用友U9 cloud助百得胜加速崛起
  15. 031:vue+openlayers加载GPX数据(代码示例)
  16. android studio 导出 aar,Android Studio 导出 .aar包的操作流程
  17. java 网速测试_简易的网速测试 - 梦想游戏 - OSCHINA - 中文开源技术交流社区
  18. android插件实现打印机,Android USB调用打印机(针式打印机)
  19. NT151应用案例:西门子PLC S7-1200与派克ACR9000的通信(Part 3)
  20. 企业网站如何进行外链建设

热门文章

  1. 小白入门SQL基础知识汇总
  2. 小技巧 | 关于问卷星如何粘贴复制
  3. EXCEL对数据的相对引用和绝对引用
  4. 计算机设置汉字手机,桌面字体怎么设置-手机锁屏上会滚动的文字怎么设置?一步搞定,超简单...
  5. wow金色平原服务器显示rp,听说国服唯一一个RP 服务器金色平原!有此服玩家么?求真相!...
  6. linux--发展史与环境
  7. BEVFormerV2:Adapting Modern Image Backbones to Bird’s-Eye-View Recognition via Perspective Supervisi
  8. Python beautifulsoup库实践
  9. error LNK2038: 检测到“RuntimeLibrary”的不匹配项 解决方法
  10. 恢复账套提示文件上的媒体簇结构不正确_用友U8软件用友固定资产(账套数据结构不正确)...