<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      Qt播放音頻,支持進度條,設置語速,播放暫停

      原需求:

      需要實現文字轉語音功能,最開始采用的技術方法是QTextToSpeech,但是無法獲取進度,導致出現很多的問題。

      后面就改了方案,使用Windows自帶的SAPI將文字轉為音頻,保存本地。

      然后使用QMediaPlayer來播放音頻。

      QMediaPlayer比較強大,支持所有的需求(進度條、播放、暫停、繼續播放、設置語速、設置音量)

       

       

      Demo:

       

      #ifndef WIDGET_H
      #define WIDGET_H
      
      #include <QWidget>
      #include <QDebug>
      
      #include <QMediaPlayer>
      #include <QMediaPlaylist>
      
      #include <QDir>
      #include <QStandardPaths>
      
      
      QT_BEGIN_NAMESPACE
      namespace Ui {
      class Widget;
      }
      QT_END_NAMESPACE
      
      class Widget : public QWidget
      {
          Q_OBJECT
      
      public:
          Widget(QWidget *parent = nullptr);
          ~Widget();
      
      public slots:
          void fn_play();
          void fn_test();
          void fn_setRate(int rate);
          void fn_position(qint64 pos);
          void fn_duration(qint64 duration);
      
      private:
          Ui::Widget *ui;
      
          QMediaPlayer* player = nullptr;
      };
      #endif // WIDGET_H

       

      #include "widget.h"
      #include "ui_widget.h"
      
      Widget::Widget(QWidget *parent)
          : QWidget(parent)
          , ui(new Ui::Widget)
      {
          ui->setupUi(this);
      
          // 加載本地音頻文件(不支持mp3,支持wmv)
          QString dir_path = QStandardPaths::writableLocation(QStandardPaths::DocumentsLocation);
          QString file_path = dir_path + "/1.wmv";
      
          player = new QMediaPlayer;
          player->setMedia(QUrl::fromLocalFile(file_path));
      
          connect(player, &QMediaPlayer::durationChanged, this, &Widget::fn_duration);
          connect(player, &QMediaPlayer::positionChanged, this, &Widget::fn_position);
          connect(ui->radioButton, &QRadioButton::clicked, this, [=](){fn_setRate(0);});
          connect(ui->radioButton_2, &QRadioButton::clicked, this, [=](){fn_setRate(1);});
          connect(ui->radioButton_3, &QRadioButton::clicked, this, [=](){fn_setRate(2);});
          connect(ui->pushButton, &QPushButton::clicked, this, &Widget::fn_bofang);
          connect(ui->pushButton_2, &QPushButton::clicked, this, &Widget::fn_test);
      }
      
      Widget::~Widget()
      {
          delete ui;
      }
      
      void Widget::fn_bofang()
      {
          if(player->state() == QMediaPlayer::StoppedState){ player->play(); }
          else if(player->state() == QMediaPlayer::PlayingState){ player->pause(); }
          else if(player->state() == QMediaPlayer::PausedState){ player->play(); }
      }
      
      void Widget::fn_test()
      {
          qDebug() << "rate:" << player->playbackRate();
          qDebug() << "state:" << player->state();
      }
      
      void Widget::fn_setRate(int rate)
      {
          if(rate == 0 ){player->setPlaybackRate(0.8);}
          if(rate == 1 ){player->setPlaybackRate(1.0);}
          if(rate == 2 ){player->setPlaybackRate(1.2);}
      }
      
      void Widget::fn_position(qint64 pos)
      {
          qDebug() << "pos:" << pos;
          ui->horizontalSlider->setValue(pos);
      }
      
      void Widget::fn_duration(qint64 duration)
      {
          qDebug() << "duration:" << duration;
          ui->horizontalSlider->setMinimum(0);
          ui->horizontalSlider->setMaximum(duration);
      }

       

       

      我的實際項目是根據QTextEdit的文字轉的語音,QTextEdit的文字改變后,需要重新生成音頻,播放新的音頻。

      播放新的音頻,需要先把Media置空,然后在設置新的音頻,這樣才能生效,不然一直播放的是之前的音頻。

      if(player->state() == QMediaPlayer::StoppedState)
          {
              player->stop();
              player->setMedia(QMediaContent());
              QString file_name = QDir::tempPath() + "/tts.wmv";
              if(QFile::exists(file_name))
              {
                  bool ret = QFile::remove(file_name);
                  qDebug() << "remove:" << ret;
              }
      
              QString file_path = fn_textToAudio(true);
              player->setMedia(QUrl::fromLocalFile(file_path));
              player->play();
          }

       

      posted @ 2025-07-28 19:59  十一的雜文錄  閱讀(52)  評論(0)    收藏  舉報
      主站蜘蛛池模板: 高清无码18| 苍井空毛片精品久久久| 人妻中文字幕亚洲一区| 亚洲精品综合第一国产综合| 亚洲国产99精品国自产拍| 麻豆蜜桃伦理一区二区三区| 亚洲国产色婷婷久久99精品91| 东京热高清无码精品| 国产欧美一区二区三区免费视频| 国产一国产精品免费播放| 虎白女粉嫩尤物福利视频| 日韩有码中文字幕国产| 欧美精欧美乱码一二三四区| 国产精品久久精品| 欧美 亚洲 国产 制服 中文| 久久婷婷五月综合色和啪| 国产蜜臀久久av一区二区| 亚洲欧美日韩综合久久久| 人妻丝袜无码专区视频网站| 成人国产精品中文字幕| 人妻体体内射精一区二区| 国产精品国产片在线观看| 国产精品毛片久久久久久久 | 国产色无码专区在线观看| 亚洲人成网站在小说| 阳信县| 国产一区国产二区在线视频| 亚洲国产精品成人无码区| 一本一道av无码中文字幕麻豆| 又大又粗又硬又爽黄毛少妇| 欧洲精品久久久AV无码电影| 日韩成av在线免费观看| 99久久机热/这里只有精品| 久久国产精品精品国产色| 成人亚欧欧美激情在线观看| 中文午夜乱理片无码| 国产欧美亚洲精品第一页在线| 久久国产精99精产国高潮| 乱人伦人妻中文字幕不卡| 无码少妇一区二区| 九九热视频在线免费观看|