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 ¶ms, 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 ¶ms = 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::Default | 0 | 使用引擎特定的默认行为。 |
QTextToSpeech::BoundaryHint::Immediate | 1 | 引擎应立即停止播放。 |
QTextToSpeech::BoundaryHint::Word | 2 | 当前单词结束时停止语音。 |
QTextToSpeech::BoundaryHint::Sentence | 3 | 当前句子结束时停止播放。 |
QTextToSpeech::BoundaryHint::Utterance (since Qt 6.6) | 4 | 当前语篇结束时停止语音。语篇是调用say() 或enqueue() 时使用的文本块。 |
注意: 这些是给引擎的提示。当前引擎可能不支持所有选项。
[since 6.6]
枚举类 QTextToSpeech::Capability
flags QTextToSpeech::Capabilities
该枚举描述了文本到语音引擎的功能。
常量 | 值 | 说明 |
---|---|---|
QTextToSpeech::Capability::None | 0 | 引擎未实现任何功能。 |
QTextToSpeech::Capability::Speak | 1 << 0 | 引擎可播放文本中的音频输出。 |
QTextToSpeech::Capability::PauseResume | 1 << 1 | 引擎可以暂停并恢复音频输出。 |
QTextToSpeech::Capability::WordByWordProgress | 1 << 2 | 引擎会为每个说出的单词发出sayingWord() 信号。 |
QTextToSpeech::Capability::Synthesize | 1 << 3 | 引擎能从文本中synthesize PCM 音频数据。 |
该枚举在 Qt 6.6 中引入。
Capabilities 类型是QFlags<Capability> 的类型定义。它存储 Capability 值的 OR 组合。
另请参见 engineCapabilities()。
enum class QTextToSpeech::ErrorReason
该枚举描述了QTextToSpeech 引擎当前的错误(如果有)。
常量 | 值 | 说明 |
---|---|---|
QTextToSpeech::ErrorReason::NoError | 0 | 未发生错误。 |
QTextToSpeech::ErrorReason::Initialization | 1 | 后端无法初始化,例如由于缺少驱动程序或操作系统要求。 |
QTextToSpeech::ErrorReason::Configuration | 2 | 给定的后端配置不一致,例如由于语音名称或参数错误。 |
QTextToSpeech::ErrorReason::Input | 3 | 所给文本无法合成,例如由于大小或字符无效。 |
QTextToSpeech::ErrorReason::Playback | 4 | 音频播放失败,例如由于缺少音频设备、格式错误或音频流中断。 |
使用errorReason() 获取当前错误,使用errorString() 获取相关错误信息。
另请参阅 errorOccurred() 。
enum QTextToSpeech::State
该枚举描述文本到语音引擎的当前状态。
常量 | 值 | 说明 |
---|---|---|
QTextToSpeech::Ready | 0 | 合成器已准备好开始新文本。这也是文本完成后的状态。 |
QTextToSpeech::Speaking | 1 | 正在播放文本。 |
QTextToSpeech::Synthesizing | 4 | 文本正在合成为 PCM 数据。synthesized() 信号将以数据块的形式发出。 |
QTextToSpeech::Paused | 2 | 合成暂停,可通过resume() 恢复。 |
QTextToSpeech::Error | 3 | 发生错误。详情请参见errorReason() 。 |
另请参阅 QTextToSpeech::ErrorReason 、errorReason() 和errorString()。
属性文档
[since 6.4]
engine : QString
此属性包含用于合成文本到语音的引擎。
更改引擎会停止任何正在进行的语音。
在大多数平台上,更改引擎将更新available locales 和available voices 的列表。
此属性在 Qt 6.4 中引入。
访问函数:
QString | engine() const | |
bool | setEngine(const QString &engine, const QVariantMap ¶ms = 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) |
另请参阅 voice 和findVoices() 。
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() 可以使用当前的voice 和locale 开始合成文本。
访问功能:
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 中引入。
[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 ¶ms, 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 。
另请参阅 state 和errorOccurred() 。
[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 匹配,等等。可以只指定所需声音的Language 或Territory ,也可以将名称与regular expression 匹配。
如果条件列表为空,该函数将返回所有声音。不能使用同一类型的多个标准,否则会导致编译错误。
注意: 除非args 包括当前的locale ,否则该函数可能需要更改引擎的语言版本才能得到所有声音的列表。这与引擎有关,但可能会影响正在进行的语音合成。因此,除非state 是Ready ,否则建议不要调用此函数。
此函数在 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 (即语句id 中start 和length 所指示的文本片段)被播放到音频设备时,就会发出该信号。
注: 此信号要求引擎具有WordByWordProgress 功能。
该功能在 Qt 6.6 中引入。
另请参阅 Capability 和say()。
[invokable, since 6.4]
bool QTextToSpeech::setEngine(const QString &engine, const QVariantMap ¶ms = 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 取决于引擎。
© 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.