嵌入式Qt下使用科大讯飞的TTS语音模块

本文介绍了一种通过串口发送中文文本转语音(TTS)指令的方法。具体包括使用不同编码方式转换字符串,并构建特定的数据包格式进行发送。文中提供了两种实现方式:一种是直接通过写文件的方式操作串口;另一种则是利用串口管理类实现。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

使用写文件方法发送(str直接填中文即可)

int KeyboardSerialTalk::ttsSend(QString str)

{
    QTextCodec *utf8 = QTextCodec::codecForName("UTF-8");
    QTextCodec *gbk = QTextCodec::codecForName("GBK");
    QByteArray gbk_byte;
    qDebug()<<"str:"<<str.toLatin1().toHex()<<"\ngbk:"<<gbk->fromUnicode(utf8->toUnicode(str.toLatin1())).toHex();

    gbk_byte = gbk->fromUnicode(utf8->toUnicode(str.toLatin1()));
    int len = gbk_byte.length();

    int ret;
    char buf[1024] = {0};

    buf[0] = 0xFD ; //构造帧头FD
    buf[1] = 0x00 ; //构造数据区长度的高字节
    buf[2] = len+2; //构造数据区长度的低字节
    buf[3] = 0x01 ; //构造命令字:合成播放命令
    buf[4] = 0x01;       //文本编码格式:01:GBK 03:unioncode


    memcpy(buf+5, gbk_byte.data(), len);
    buf[len+5]=0x0d;
    buf[len+6]=0x0a;//
    
    ret = write(keyboard_fd, buf, len+7);
    sleep(1);
    return ret;

}


使用ManageSerialPort串口类发送

void MainWindow::ttsSend(QString str)
{
    QTextCodec *utf8 = QTextCodec::codecForName("UTF-8");
    QTextCodec *gbk = QTextCodec::codecForName("GBK");

    QByteArray gbk_str = gbk->fromUnicode(utf8->toUnicode(str.toLatin1()));
    qDebug()<<"str:"<<str.toLatin1().toHex()<<"\ngbk:"<<gbk_str.toHex();

    QByteArray buf;
    buf[0] = 0xFD ; //构造帧头FD
    buf[1] = 0x00 ; //构造数据区长度的高字节
    buf[2] = gbk_str.length()+2; //构造数据区长度的低字节
    buf[3] = 0x01 ; //构造命令字:合成播放命令
    buf[4] = 0x01;       //文本编码格式:0x01 GBK   0x03 unioncode
    buf += gbk_str;
    buf[str.length()+5]=0x0d;
    buf[str.length()+6]=0x0a;//

    m_pSerialPortPark->sendData(buf);
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值