QTextToSpeech实现小学生的听写

最近一直在外面出差,孩子的英语和语文课后的听写作业就没法继续了,所以就给他写了个小程序,把所有的语文和英语词组都记录下来,然后从里面随机抽取进行朗读听写。

先上图

整体界面和代码参考了Qt5.8的实例,在实例的基础上添加了读取文本,在一个范围内生成多少个随机数,多线程实现了语音播放的停顿。

1、读取文本

void DxThreadObject::readFile(QString filePath)
{
    QFile file(filePath);
    if(!file.open(QIODevice::ReadOnly | QIODevice::Text))
    {
        return;
    }

    QTextStream in(&file);
    QTextCodec::ConverterState state;
    if(!in.atEnd())
    {
        const QByteArray ba = file.read(file.bytesAvailable());
        QTextCodec* codec = QTextCodec::codecForName("UTF-8");
        QString lineStr = codec->toUnicode(ba.constData(), ba.size(), &state);
        int ninvalidChars = state.invalidChars;
        if(ninvalidChars > 0)
            in.setCodec("GBK");
        else
            in.setCodec("UTF-8");
    }

    m_textList.clear();
    in.seek(0);
    while(!in.atEnd())
    {
        QString line = in.readLine().toUtf8();

        m_textList.push_back(line);
    }
}

2、生成随机数

QList<int> DxThreadObject::randValues(int minValue, int maxValue, int randCount)
{
    QList<int> valList;
    // m_maxOutValue  m_minOutValue 分别代表范围值的最大值和最小值
    double diff = abs(maxValue - minValue); // 求浮点数绝对值
    QTime time;
    for (int i=0,m=0; m!=randCount; i++) {
        time = QTime::currentTime();
        qsrand(time.msec()*1000 + time.second() * 1000 *1000);
        double dtmp = (float)(qrand() % 100) / 100;
        int randoxNumber = minValue + dtmp * diff;
        // 判断生成的随机数 在约定范围内,则追加到容器中
        if(minValue <= randoxNumber && randoxNumber <= maxValue) {
            //判断随机数是否存在容器中
            if(!valList.contains(randoxNumber))
            {
                valList.push_back(randoxNumber);
                m++;
            }
        }
    }
    return valList;
}

3、线程中实现文本朗读的停顿

    for(int i=0; i<size; i++)
    {
        if(valList.contains(i))
        {
            QString txt = m_textList.at(i);
            if(num != 1)
                QThread::sleep(txtCount);

            emit signal_speak(txt);

            emit signal_process(num);
            num++;
        }
    }

4、代码地址

https://download.csdn.net/download/marquess/86946812
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
Java实现语音听写接口的WebSocket请求可以按照以下步骤进行: 1. 导入相关的Java库和类,例如`java.net.URI`和`javax.websocket.*`。 2. 创建一个WebSocket客户端类,并实现`Endpoint`接口。 3. 在`onOpen`方法中,创建一个WebSocket连接,并设置连接的URL和其他参数。 4. 在`onMessage`方法中,处理接收到的消息,可以将消息转化为文本或进行其他操作。 5. 在`onClose`方法中,处理连接关闭的逻辑。 6. 在主程序中,创建一个WebSocket客户端实例,并调用`connectToServer`方法连接到服务器。 以下是一个简单的Java代码示例: ```java import java.net.URI; import javax.websocket.*; @ClientEndpoint public class SpeechRecognitionClient extends Endpoint { @Override public void onOpen(Session session, EndpointConfig config) { // 设置WebSocket连接的URL String url = "ws://api.xfyun.cn/v1/service/v1/iat"; try { // 创建WebSocket连接 WebSocketContainer container = ContainerProvider.getWebSocketContainer(); container.connectToServer(this, new URI(url)); } catch (Exception e) { e.printStackTrace(); } } @Override public void onMessage(Session session, String message) { // 处理接收到的消息 System.out.println("Received message: " + message); // 可以将消息转化为文本或进行其他操作 } @Override public void onClose(Session session, CloseReason closeReason) { // 处理连接关闭的逻辑 System.out.println("Connection closed: " + closeReason.getReasonPhrase()); } public static void main(String\[\] args) { try { // 创建WebSocket客户端实例 SpeechRecognitionClient client = new SpeechRecognitionClient(); // 连接到服务器 client.connectToServer(); } catch (Exception e) { e.printStackTrace(); } } } ``` 请注意,以上代码只是一个简单的示例,实际使用时可能需要根据具体的需求进行修改和完善。同时,还需要根据具体的语音听写接口的要求,设置请求参数和处理接收到的音频数据。 #### 引用[.reference_title] - *1* [909422229_科大讯飞语音听写Java web API接口](https://blog.csdn.net/a909422229/article/details/84943023)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [微信小程序使用讯飞接口语音识别](https://blog.csdn.net/qq_43964734/article/details/120104410)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] - *3* [java技术--电话语音通知](https://blog.csdn.net/qq591009234/article/details/102639171)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值