mainwindow.h 1.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960
  1. #ifndef MAINWINDOW_H
  2. #define MAINWINDOW_H
  3. #include <QMainWindow>
  4. #include <QString>
  5. #include <QTimer>
  6. #include <QProcess>
  7. #include <QQueue>
  8. #include <QMutex>
  9. #include <QVector>
  10. #include <QSet>
  11. QT_BEGIN_NAMESPACE
  12. namespace Ui { class MainWindow; }
  13. QT_END_NAMESPACE
  14. class TTSClient;
  15. class MainWindow : public QMainWindow
  16. {
  17. Q_OBJECT
  18. public:
  19. MainWindow(QWidget* parent = nullptr);
  20. ~MainWindow();
  21. private slots:
  22. void onConnectClicked();
  23. void onSynthesizeClicked();
  24. void onBrowseRefAudio();
  25. void onConnected();
  26. void onDisconnected();
  27. void onConnectionError(const QString& error);
  28. void onAudioReceived(const QByteArray& audioData, int sampleRate, int chunkIndex, bool isFirst, bool isLast);
  29. void onSynthesisFinished(int chunkIndex);
  30. void onVoicesReceived(const QStringList& voices);
  31. void onPlayerFinished();
  32. private:
  33. Ui::MainWindow* ui;
  34. TTSClient* m_ttsClient;
  35. QProcess* m_playerProcess;
  36. bool m_isConnected;
  37. QString m_refAudio;
  38. QMap<QString, QByteArray> m_audioBuffer;
  39. QSet<QString> m_receivedChunkIds;
  40. QMap<int, bool> m_streamComplete;
  41. QMutex m_audioMutex;
  42. int m_totalChunks;
  43. int m_receivedChunks;
  44. int m_nextExpectedChunk;
  45. bool m_isPlaying;
  46. void updateUiState();
  47. void playNextInQueue();
  48. void playAudio(const QByteArray& wavData);
  49. QStringList splitTextIntoChunks(const QString& text, int chunkSize);
  50. };
  51. #endif