嵌入式Qt下使用科大訊飛的TTS語音模組
阿新 • • 發佈:2019-01-02
使用寫檔案方法傳送(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);
}