#ifndef TTSMANAGER_H #define TTSMANAGER_H #include #include #include #include #include #include // 播放状态枚举 enum class PlayState { Stopped, // 停止状态 Playing, // 播放中 Completed, // 播放完成 Failed // 播放失败 }; // 语音任务结构体(支持优先级和重复播放) struct SpeechTask { QString text; // 待播放文本 int repeatCount; // 重复播放次数(1=播放1次) int priority; // 优先级(0-3,3最高) int currentRepeat; // 当前已重复次数 }; class TTSManager : public QObject { Q_OBJECT public: explicit TTSManager(QObject *parent = nullptr); ~TTSManager(); // 对外播放接口:text=播放文本,repeatCount=重复次数,priority=优先级 PlayState speak(const QString &text, int repeatCount = 1, int priority = 1); // 停止所有播放任务 void stopAll(); // 获取当前播放状态 PlayState getCurrentState() const { return m_currentState; } signals: // 状态变化信号(供外部监听) void stateChanged(PlayState state); // 当前任务变化信号 void currentTaskChanged(const SpeechTask &task); private slots: // 播放进程完成回调 void onPlayFinished(int exitCode, QProcess::ExitStatus exitStatus); // 处理下一个任务(定时器触发) void processNextTask(); private: // 执行语音生成与播放(核心函数) bool executeVoiceTask(const QString &text); // 检查环境(edge-tts + ffplay 是否安装) bool checkEnvironment(); // 入队任务(按优先级排序) void enqueueTask(const SpeechTask &task); // 处理高优先级任务(打断低优先级) bool handleHighPriorityTask(const SpeechTask &newTask); // 成员变量 QProcess *m_voiceProcess; // 执行 edge-tts + ffplay 的进程 QTimer *m_taskTimer; // 任务调度定时器(避免进程阻塞) PlayState m_currentState; // 当前播放状态 SpeechTask m_currentTask; // 当前正在执行的任务 QList m_taskQueue; // 任务队列(按优先级排序) QString m_tempAudioPath; // 临时音频文件路径(用户目录下) }; #endif // TTSMANAGER_H