添加OpenCv
This commit is contained in:
72
PublicFunctions/TTSManager.h
Normal file
72
PublicFunctions/TTSManager.h
Normal file
@@ -0,0 +1,72 @@
|
||||
#ifndef TTSMANAGER_H
|
||||
#define TTSMANAGER_H
|
||||
|
||||
#include <QObject>
|
||||
#include <QProcess>
|
||||
#include <QTimer>
|
||||
#include <QString>
|
||||
#include <QList>
|
||||
#include <QFile>
|
||||
|
||||
// 播放状态枚举
|
||||
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<SpeechTask> m_taskQueue; // 任务队列(按优先级排序)
|
||||
QString m_tempAudioPath; // 临时音频文件路径(用户目录下)
|
||||
};
|
||||
|
||||
#endif // TTSMANAGER_H
|
||||
Reference in New Issue
Block a user