QTextToSpeech Class

QTextToSpeech 类可方便地访问文本到语音引擎。更多

Header: #include <QTextToSpeech>
CMake: find_package(Qt6 REQUIRED COMPONENTS TextToSpeech)
target_link_libraries(mytarget PRIVATE Qt6::TextToSpeech)
qmake: QT += texttospeech
继承: QObject

公共类型

enum class BoundaryHint { Default, Immediate, Word, Sentence, Utterance }
flags Capabilities
(since 6.6) enum class Capability { None, Speak, PauseResume, WordByWordProgress, Synthesize }
enum class ErrorReason { NoError, Initialization, Configuration, Input, Playback }
enum State { Ready, Speaking, Synthesizing, Paused, Error }

属性

公共功能

QTextToSpeech(QObject *parent = nullptr)
QTextToSpeech(const QString &engine, QObject *parent = nullptr)
(since 6.4) QTextToSpeech(const QString &engine, const QVariantMap &params, QObject *parent = nullptr)
virtual ~QTextToSpeech() override
QList<QLocale> availableLocales() const
QList<QVoice> availableVoices() const
QString engine() const
QTextToSpeech::Capabilities engineCapabilities() const
QTextToSpeech::ErrorReason errorReason() const
QString errorString() const
(since 6.6) QList<QVoice> findVoices(Args &&... args) const
QLocale locale() const
double pitch() const
double rate() const
(since 6.4) bool setEngine(const QString &engine, const QVariantMap &params = QVariantMap())
QTextToSpeech::State state() const
(since 6.6) void synthesize(const QString &text, Functor &&functor)
(since 6.6) void synthesize(const QString &text, const QObject *context, Functor &&functor)
QVoice voice() const
double volume() const

公共插槽

(since 6.6) qsizetype enqueue(const QString &utterance)
void pause(QTextToSpeech::BoundaryHint boundaryHint = QTextToSpeech::BoundaryHint::Default)
void resume()
void say(const QString &text)
void setLocale(const QLocale &locale)
void setPitch(double pitch)
void setRate(double rate)
void setVoice(const QVoice &voice)
void setVolume(double volume)
void stop(QTextToSpeech::BoundaryHint boundaryHint = QTextToSpeech::BoundaryHint::Default)

信号

(since 6.6) void aboutToSynthesize(qsizetype id)
void engineChanged(const QString &engine)
void errorOccurred(QTextToSpeech::ErrorReason reason, const QString &errorString)
void localeChanged(const QLocale &locale)
void pitchChanged(double pitch)
void rateChanged(double rate)
(since 6.6) void sayingWord(const QString &word, qsizetype id, qsizetype start, qsizetype length)
void stateChanged(QTextToSpeech::State state)
void voiceChanged(const QVoice &voice)
void volumeChanged(double volume)

静态公共成员

QStringList availableEngines()

详细说明

使用say() 开始向默认音频设备读取文本,使用stop(),pause(), 和resume() 控制文本的读取。

    connect(ui.speakButton, &QPushButton::clicked, m_speech, [this]{
        m_speech->say(ui.plainTextEdit->toPlainText());
    });
    connect(ui.stopButton, &QPushButton::clicked, m_speech, [this]{
        m_speech->stop();
    });
    connect(ui.pauseButton, &QPushButton::clicked, m_speech, [this]{
        m_speech->pause();
    });
    connect(ui.resumeButton, &QPushButton::clicked, m_speech, &QTextToSpeech::resume);

要将文本合成为 PCM 数据以便进一步处理,请使用synthesize() 。

使用findVoices() 获取匹配语音列表,或使用availableVoices() 获取支持当前语言的语音列表。更改locale 属性,使用与输入文本语言和所需语音输出口音匹配的availableLocales() 中的一个。这将更改大多数平台上的可用语音列表。然后在调用setVoice() 时使用其中一种可用语音。

并非每个引擎都支持所有功能。请使用engineCapabilities() 函数测试哪些功能可用,并相应调整类的使用。

注: 引擎支持哪些本地语言和语音通常取决于操作系统配置。例如,在 macOS 上,最终用户可以通过系统偏好设置中的辅助功能面板安装语音。

成员类型文档

enum class QTextToSpeech::BoundaryHint

说明何时应停止和暂停讲话。

常数说明
QTextToSpeech::BoundaryHint::Default0使用引擎特定的默认行为。
QTextToSpeech::BoundaryHint::Immediate1引擎应立即停止播放。
QTextToSpeech::BoundaryHint::Word2当前单词结束时停止语音。
QTextToSpeech::BoundaryHint::Sentence3当前句子结束时停止播放。
QTextToSpeech::BoundaryHint::Utterance (since Qt 6.6)4当前语篇结束时停止语音。语篇是调用say() 或enqueue() 时使用的文本块。

注意: 这些是给引擎的提示。当前引擎可能不支持所有选项。

[since 6.6] 枚举类 QTextToSpeech::Capability
flags QTextToSpeech::Capabilities

该枚举描述了文本到语音引擎的功能。

常量说明
QTextToSpeech::Capability::None0引擎未实现任何功能。
QTextToSpeech::Capability::Speak1 << 0引擎可播放文本中的音频输出。
QTextToSpeech::Capability::PauseResume1 << 1引擎可以暂停并恢复音频输出。
QTextToSpeech::Capability::WordByWordProgress1 << 2引擎会为每个说出的单词发出sayingWord() 信号。
QTextToSpeech::Capability::Synthesize1 << 3引擎能从文本中synthesize PCM 音频数据。

该枚举在 Qt 6.6 中引入。

Capabilities 类型是QFlags<Capability> 的类型定义。它存储 Capability 值的 OR 组合。

另请参见 engineCapabilities()。

enum class QTextToSpeech::ErrorReason

该枚举描述了QTextToSpeech 引擎当前的错误(如果有)。

常量说明
QTextToSpeech::ErrorReason::NoError0未发生错误。
QTextToSpeech::ErrorReason::Initialization1后端无法初始化,例如由于缺少驱动程序或操作系统要求。
QTextToSpeech::ErrorReason::Configuration2给定的后端配置不一致,例如由于语音名称或参数错误。
QTextToSpeech::ErrorReason::Input3所给文本无法合成,例如由于大小或字符无效。
QTextToSpeech::ErrorReason::Playback4音频播放失败,例如由于缺少音频设备、格式错误或音频流中断。

使用errorReason() 获取当前错误,使用errorString() 获取相关错误信息。

另请参阅 errorOccurred() 。

enum QTextToSpeech::State

该枚举描述文本到语音引擎的当前状态。

常量说明
QTextToSpeech::Ready0合成器已准备好开始新文本。这也是文本完成后的状态。
QTextToSpeech::Speaking1正在播放文本。
QTextToSpeech::Synthesizing4文本正在合成为 PCM 数据。synthesized() 信号将以数据块的形式发出。
QTextToSpeech::Paused2合成暂停,可通过resume() 恢复。
QTextToSpeech::Error3发生错误。详情请参见errorReason() 。

另请参阅 QTextToSpeech::ErrorReasonerrorReason() 和errorString()。

属性文档

[since 6.4] engine : QString

此属性包含用于合成文本到语音的引擎。

更改引擎会停止任何正在进行的语音。

在大多数平台上,更改引擎将更新available localesavailable voices 的列表。

此属性在 Qt 6.4 中引入。

访问函数:

QString engine() const
bool setEngine(const QString &engine, const QVariantMap &params = QVariantMap())[see note below]

注: 可通过元对象系统和 QML 调用该函数。请参见Q_INVOKABLE

Notifier 信号:

void engineChanged(const QString &engine)

[read-only, since 6.6] engineCapabilities : const Capabilities

该属性保存当前引擎实现的功能

此属性在 Qt 6.6 中引入。

访问函数:

QTextToSpeech::Capabilities engineCapabilities() const

Notifier 信号:

void engineChanged(const QString &engine)

另请参阅 engine

locale : QLocale

该属性用于保存当前使用的本地语言。

默认情况下使用系统语言。

在某些平台上,更改 locale 会更新available voices 的列表,如果当前语音在新的 locale 下不可用,则会设置新的语音。

访问功能:

QLocale locale() const
void setLocale(const QLocale &locale)

Notifier 信号:

void localeChanged(const QLocale &locale)

另请参阅 voicefindVoices() 。

pitch : double

该属性表示语音音高,范围从 -1.0 到 1.0。

默认值 0.0 为正常语音音高。

访问功能:

double pitch() const
void setPitch(double pitch)

通知信号:

void pitchChanged(double pitch)

rate : double

该属性保存当前语音速率,范围从 -1.0 到 1.0。

默认值 0.0 为正常语音流。

访问功能:

double rate() const
void setRate(double rate)

通知信号:

void rateChanged(double rate)

[read-only] state : const State

该属性保存语音合成器的当前状态。

void MainWindow::stateChanged(QTextToSpeech::State state)
{
    switch (state) {
    case QTextToSpeech::Speaking:
        ui.statusbar->showMessage(tr("Speech started..."));
        break;
    case QTextToSpeech::Ready:
        ui.statusbar->showMessage(tr("Speech stopped..."), 2000);
        break;
    case QTextToSpeech::Paused:
        ui.statusbar->showMessage(tr("Speech paused..."));
        break;
    default:
        ui.statusbar->showMessage(tr("Speech error!"));
        break;
    }

    ui.pauseButton->setEnabled(state == QTextToSpeech::Speaking);
    ui.resumeButton->setEnabled(state == QTextToSpeech::Paused);
    ui.stopButton->setEnabled(state == QTextToSpeech::Speaking || state == QTextToSpeech::Paused);
}

使用say() 可以使用当前的voicelocale 开始合成文本。

访问功能:

QTextToSpeech::State state() const

通知信号:

void stateChanged(QTextToSpeech::State state)

voice : QVoice

该属性包含用于语音的声音。

该语音必须是voices available 引擎的语音之一。

在某些平台上,设置语音会改变其他语音属性,如locale,pitch 等。这些更改会触发信号发射。

访问功能:

QVoice voice() const
void setVoice(const QVoice &voice)

Notifier 信号:

void voiceChanged(const QVoice &voice)

另请参阅 findVoices() 。

volume : double

该属性保存当前音量,范围从 0.0 到 1.0。

默认值为平台的默认音量。

访问功能:

double volume() const
void setVolume(double volume)

Notifier 信号:

void volumeChanged(double volume)

成员函数 文档

[since 6.6] template <typename Functor> void QTextToSpeech::synthesize(const QString &text, Functor &&functor)

[since 6.6] template <typename Functor> void QTextToSpeech::synthesize(const QString &text, const QObject *context, Functor &&functor)

text 合成为原始音频数据。

该函数将语音异步合成为原始音频数据。当数据可用时,functor 将以functor(QAudioFormat format, QByteArray bytes) 的形式调用,format 描述bytes 中数据的format ;或以functor(QAudioBuffer &buffer) 的形式调用。

合成开始时,state 属性会被设置为Synthesizing ,合成完成后,则会被设置为Ready 。在合成过程中,functor 可能会被多次调用,可能会改变format 的值。

functor 可以是一个可调用函数,如 lambda 函数或自由函数,可选context 对象:

tts.synthesize("Hello world", [](const QAudioFormat &format, const QByteArray &bytes){
    // process data according to format
});

context 对象的成员函数:

struct PCMProcessor : QObject
{
    void processData(const QAudioFormat &format, const QByteArray &bytes)
    {
        // process data according to format
    }
} processor;
tts.synthesize("Hello world", &processor, &PCMProcessor::processData);

如果context 被销毁,那么functor 将不再被调用。

注意: 该 API 要求引擎具有Synthesize 功能。

此函数在 Qt 6.6 中引入。

另请参阅 say() 和stop()。

[explicit] QTextToSpeech::QTextToSpeech(QObject *parent = nullptr)

从使用默认引擎插件的插件中加载文本到语音引擎,并构建一个 QTextToSpeech 对象作为parent 的子对象。

默认引擎与特定平台有关。

如果引擎初始化正确,那么引擎的state 将更改为QTextToSpeech::Ready ;请注意,这可能会异步发生。如果插件加载失败,那么state 将被设置为QTextToSpeech::Error

另请参阅 availableEngines() 。

[explicit] QTextToSpeech::QTextToSpeech(const QString &engine, QObject *parent = nullptr)

从符合参数engine 的插件中加载文本到语音引擎,并构造一个 QTextToSpeech 对象作为parent 的子对象。

如果engine 为空,则使用默认引擎插件。默认引擎与特定平台有关。

如果引擎初始化正确,引擎的state 将被设置为QTextToSpeech::Ready 。如果插件加载失败或引擎初始化失败,引擎的state 将被设置为QTextToSpeech::Error

另请参阅 availableEngines() 。

[explicit, since 6.4] QTextToSpeech::QTextToSpeech(const QString &engine, const QVariantMap &params, QObject *parent = nullptr)

从符合参数engine 的插件中加载文本到语音引擎,并构造一个 QTextToSpeech 对象作为parent 的子对象,将params 传递给引擎。

如果engine 为空,则使用默认引擎插件。默认引擎与特定平台有关。params 中支持哪些键/值对取决于引擎。详情请参见引擎文档。不支持的条目将被忽略。

如果引擎初始化正确,引擎的state 将被设置为QTextToSpeech::Ready 。如果插件加载失败,或引擎初始化失败,引擎的state 将被设置为QTextToSpeech::Error

此函数在 Qt 6.4 中引入。

另请参阅 availableEngines() 。

[override virtual noexcept] QTextToSpeech::~QTextToSpeech()

销毁QTextToSpeech 对象,停止任何发言。

[signal, since 6.6] void QTextToSpeech::aboutToSynthesize(qsizetype id)

该信号在引擎开始合成id 的语音音频之前发出。id 是调用enqueue() 返回的值,应用程序可使用此信号对voice 属性进行最后一分钟的修改,或跟踪通过enqueue() 查询文本的进程。

该函数在 Qt 6.6 中引入。

另请参阅 enqueue()、synthesize() 和voice

[static invokable] QStringList QTextToSpeech::availableEngines()

获取支持的文本到语音引擎插件列表。

注: 可通过元对象系统和 QML 调用此函数。请参阅Q_INVOKABLE

另请参阅 engine

[invokable] QList<QLocale> QTextToSpeech::availableLocales() const

返回活动engine 支持的本地化列表。

注: 可通过元对象系统和 QML 调用该函数。请参见Q_INVOKABLE

另请参阅 availableVoices() 和findVoices()。

[invokable] QList<QVoice> QTextToSpeech::availableVoices() const

返回当前locale 可用的语音列表。

注: 如果未设置本地语言,则使用系统本地语言。

注: 可通过元对象系统和 QML 调用此函数。请参见Q_INVOKABLE

另请参阅 availableLocales() 和findVoices()。

[slot, since 6.6] qsizetype QTextToSpeech::enqueue(const QString &utterance)

utterance 加入待说文本队列,并开始说话。返回队列中文本的索引,如果出错则返回-1。

如果引擎的state 当前是Ready ,则utterance 将立即被说出。否则,引擎将在说完当前文本后开始说话utterance

每次引擎进入队列中的下一个文本条目时,都会发出aboutToSynthesize() 信号。这样,应用程序就可以跟踪进度,并在最后一刻更改语音属性。

调用stop() 会清除队列。要在文本结束时暂停引擎,请使用Utterance 边界提示。

该函数在 Qt 6.6 中引入。

另请参阅 say()、stop()、aboutToSynthesize() 和synthesize()。

[signal] void QTextToSpeech::errorOccurred(QTextToSpeech::ErrorReason reason, const QString &errorString)

该信号在发生错误且state 已设置为QTextToSpeech::Error 后发出。reason 参数指定了错误类型,而errorString 则提供了人类可读的错误描述。

QTextToSpeech::ErrorReason 不是已注册的元类型,因此对于队列连接,必须使用 () 和 () 注册。Q_DECLARE_METATYPE qRegisterMetaType

另请参阅 errorReason(),errorString() 和创建自定义 Qt 类型

[invokable] QTextToSpeech::ErrorReason QTextToSpeech::errorReason() const

返回引擎报错的原因。

注: 可通过元对象系统和 QML 调用该函数。参见Q_INVOKABLE

另请参阅 stateerrorOccurred() 。

[invokable] QString QTextToSpeech::errorString() const

返回当前引擎错误信息。

注: 可通过元对象系统和 QML 调用该函数。参见Q_INVOKABLE

另请参阅 errorOccurred() 。

[since 6.6] template <typename... Args> QList<QVoice> QTextToSpeech::findVoices(Args &&... args) const

返回符合args 中条件的声音列表。

args 中的参数将被处理,以汇总符合所有参数的声音列表。QString 类型的参数与声音的name 匹配,QLocale 类型的参数与声音的locale 匹配,等等。可以只指定所需声音的LanguageTerritory ,也可以将名称与regular expression 匹配。

如果条件列表为空,该函数将返回所有声音。不能使用同一类型的多个标准,否则会导致编译错误。

注意: 除非args 包括当前的locale ,否则该函数可能需要更改引擎的语言版本才能得到所有声音的列表。这与引擎有关,但可能会影响正在进行的语音合成。因此,除非stateReady ,否则建议不要调用此函数。

此函数在 Qt 6.6 中引入。

另请参阅 availableVoices()。

[slot] void QTextToSpeech::pause(QTextToSpeech::BoundaryHint boundaryHint = QTextToSpeech::BoundaryHint::Default)

boundaryHint 暂停当前发言。

boundaryHint 是否受到尊重取决于engine

另请参阅 resume() 和PauseResume

[slot] void QTextToSpeech::resume()

调用pause() 后恢复说话。

注意: 在 Android 上,恢复暂停的语音会从头开始。这是底层文本到语音引擎的限制。

另请参阅 pause()。

[slot] void QTextToSpeech::say(const QString &text)

开始语音text

此函数开始异步合成语音,并将文本读到默认音频输出设备上。

    connect(ui.speakButton, &QPushButton::clicked, m_speech, [this]{
        m_speech->say(ui.plainTextEdit->toPlainText());
    });

注意: 在开始朗读最近合成的文本之前,所有正在进行的朗读都会停止。

当前状态可通过state 属性获得,一旦开始朗读,该属性将被设置为Speaking 。阅读完成后,state 将被设置为Ready

另请参阅 enqueue(),stop(),pause(),resume() 和synthesize().

[signal, since 6.6] void QTextToSpeech::sayingWord(const QString &word, qsizetype id, qsizetype start, qsizetype length)

word (即语句idstartlength 所指示的文本片段)被播放到音频设备时,就会发出该信号。

注: 此信号要求引擎具有WordByWordProgress 功能。

该功能在 Qt 6.6 中引入。

另请参阅 Capabilitysay()。

[invokable, since 6.4] bool QTextToSpeech::setEngine(const QString &engine, const QVariantMap &params = QVariantMap())

QTextToSpeech 对象使用的引擎设置为engine ,并将params 传递给引擎构造函数。

返回engine 是否设置成功。

params 中支持哪些键/值对取决于引擎。详情请参见引擎文档。不支持的条目将被忽略。

注: 可通过元对象系统和 QML 调用此函数。请参阅Q_INVOKABLE

注: 用于属性engine 的 Setter 函数。

此函数在 Qt 6.4 中引入。

另请参阅 engine() 。

[slot] void QTextToSpeech::stop(QTextToSpeech::BoundaryHint boundaryHint = QTextToSpeech::BoundaryHint::Default)

boundaryHint 停止当前读取,并清除待读文本队列。

阅读无法恢复。是否尊重boundaryHint 取决于引擎。

另请参阅 say()、enqueue() 和pause()。

© 2025 The Qt Company Ltd. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd. in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.