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

news/2024/11/29 12:42:16/

本博是针对上一个版本的语音机器人更新,主要更新内容为对iat的支持,即使用语音交互取代文字输入的方式,由于之前忙于其他事情一直没来的及更新,以后会将语音机器人一直做下去,添加更多的功能和大家分享。
那么先来看看2.0版本的长什么样吧,首先来捕捉一只皮皮怪:
在这里插入图片描述
额,单看界面好像并没有什么变化,唯一的区别就是输入聊天内容变成了按住说话,美化什么的只能图一乐,真快乐还得看功能哈哈哈,当前版本的实现方式同第一版大同小异,同样按照讯飞webapi文档准备好Appid,CurTime, Param 和 CheckSum 信息并放在 HTTP 请求头中,其实与第一版不同的就是param,第一版的Param是上传文字信息的Param,2.0版本则是上传的则是语音信息的,至于其他的参数如何获取可参考第一版,要上传语音信息首先要获取用户的语音,通过QAudioInput来获取用户的语音,首先来声明一个AudioDevice的类:

class AudioDevice : public QWidget
{Q_OBJECT
public:AudioDevice();void startAudioDevice();void endAudioDevice();void playAudio();QString getWavFilePath() {return AudioFileSouce + AudioWavFile;}qint64 addWavHeader(QString catheFileName , QString wavFileName);
private:QString AudioFileSouce = QCoreApplication::applicationDirPath()+ "/Audio/"; //设置音频文件的存放路径QString AudioRawFile = "1.raw"; //音频文件名QString AudioWavFile = "1.pcm"; //音频文件名QFile *file;QAudioInput * input;QAudioOutput* output;
};

startAudioDevice表示开始录音,endAudioDevice表示结束,按照界面的方式我们的实现逻辑就应该是当鼠标按下按钮时调用startAudioDevice,然后录音结束时调用endAudioDevice,然后就可以将语音消息上传到讯飞Aiui获取结果了,addWavHeader主要是将录音生成的.raw文件转成.wav格式的语音文件,类中具体的实现博主也是参考了网友的代码,这里不做展示,需要源码的可以在评论区给个邮件地址,然后就是准备好Param,主要录音的采用频率和编码格式,比如博主采用的是采样频率:8000,音频编码格式:raw,一切准备就绪后回到主程序:

    audioDevice = new AudioDevice;connect(BtnFaSong, &QPushButton::pressed, this, [=](){audioDevice->startAudioDevice();  //开始录音		});connect(BtnFaSong, &QPushButton::released, this, [=](){audioDevice->endAudioDevice();  //结束录音SendMsg();  //上传语音消息});

逻辑如上所述,然后就是SendMsg中的变化:

    QByteArray dataArray;
//    QString text = lineEdit->text();
//    if(text.isEmpty())  //若发送内容为空时,默认发送你好
//    {
//        text = "你好";
//    }//获取文件的指针FILE *file=fopen(audioDevice->getWavFilePath().toLocal8Bit().data(),"rb");if(!file){qDebug()<<"Open Failed";return;}    //把指针移动到文件的结尾 ,获取文件长度fseek(file,0,SEEK_END);    //获取文件长度auto fileLength=ftell(file);    //定义数组长度auto fileBuffer = new char[fileLength+1];//把指针移动到文件开头 因为我们一开始把指针移动到结尾,如果不移动回来 会出错rewind(file);//读文件fread(fileBuffer,1,fileLength,file);//把读到的文件最后一位 写为0 要不然系统会一直寻找到0后才结束fileBuffer[fileLength]=0;//关闭文件fclose(file);qDebug()<<fileLength;dataArray.append(fileBuffer,fileLength);

1.0版本是将用户输入框lineedit中的内容作为post的内容(注释部分),2.0则是获取本地保存的之前录好的wav文件,将wav文件读取并以二进制字节数组放入请求body中,发送出去后就可以获取到返回的Jason信息了,对于Jason信息我们主要关注关键字:“sub”,“text”和“answer”就可以了,至于其他内容功能可以自行选择解析,备注第一版的解析方式不可以直接在第二版上用,需要做一定的修改。
至此,iat功能已经集成,其他省略的内容请参照第一版,下面是讯飞官方的webapi文档:
讯飞官方的webapi文档
独乐乐不如众乐乐,需要源码的可以评论留下邮件地址。


http://www.ppmy.cn/news/246540.html

相关文章

qq等级计算机在线,I'M QQ - QQ官方网站

QQ等级说明 QQ等级规则 通过累积活跃天数&#xff0c;您可以获取相应的QQ等级。累积在线天数将有机会参加我们即将推出的奖励活动和享受相关的优惠服务&#xff0c;而不影响正常的QQ使用。 拥有QQ在线等级为太阳级别及以上的用户&#xff0c;可享受任意上传设置QQ自定义头像和建…

QQ通讯

要求 实现增删改查功能制作代码展示 启动方法 public void start(){Console.WriteLine("程序启动了&#xff0c;这是start方法");//判断是否登录成功if (login()){Console.WriteLine("登录成功!");Menu();//显示菜单}else{Console.WriteLine("账号或…

腾 讯 滑块

腾讯邮箱的登录就两个加密&#xff0c;邮箱本身的&#xff0c;和一个腾讯系的滑块&#xff0c;之前搞的时候和防水墙还是一样的&#xff0c;现在和防水墙已经不同了&#xff0c;但是主要的加密还是tdc这个文件。现在邮箱的滑块和防水墙相比简洁了很多&#xff0c;全程就两个包 …

Q_04_01 什么是Q#?

什么是Q&#xff03;&#xff1f; Q&#xff03;是用于量子计算的可扩展的多范式特定领域编程语言。 Q&#xff03;是一种量子编程语言&#xff0c;它可以用来描述如何在量子机器上执行指令。 可以定位的机器包括许多不同的抽象层次&#xff0c;从各种模拟器到实际的量子硬件…

Q-Q图

Q-Q图 ​  统计学里的Q-Q图&#xff08;Q代表分位数&#xff09;是一个概率图&#xff0c;用图形的方式比较两个概率分布&#xff0c;把他们的两个分位数放在一起比较。首先选好分位数间隔。图上的点&#xff08;x,y)反映出一个第二分布&#xff08;y坐标&#xff09;的分位数…

大数据24小时:地质局发布地质大数据共享平台,科大讯飞将语音识别植入腾讯小Q机器人

地质调查局发布首个地质大数据共享服务平台“地质云”&#xff1b;华为与华制智能合作&#xff0c;共同发布制造业解决方案“智造云”&#xff1b;科大讯飞与腾讯联手&#xff0c;将语音识别技术植入腾讯小Q机器人……以下为您奉上更多大数据热点事件 编辑 | abby 官网 | www.d…

讯连科技

youcam3注册版下载 thunder://QUFodHRwOi8vZHgyLnFpYW5uYW8uY29tOjgwODAvc2VydmxldC9GaWxlRG93bmxvYWQ/dmlkPTAmZmlsZW5hbWU9Ly9pcXNody8tNGUwYS00ZjIwLTUyMDYtNGVhYi8yMDEwLzAyL1lvdUNhbVBhdGNoLTAwMmR3d3cuaXFzaHcuY29tLnJhclpa 注册码YK4694178987463M youcam4注册版 …

QQ 腾讯QQ(简称“QQ”)是腾讯公司开发的一款基于Internet的即时通信(IM)软件...

QQ 编辑 腾讯QQ(简称“QQ”)是腾讯公司开发的一款基于 Internet的 即时通信( IM) 软件。 腾讯QQ支持在线聊天、视频通话、点对点断点续传文件、共享文件、 网络硬盘、自定义面板、 QQ邮箱等多种功能,并可与多种通讯终端相连。2015年