QTextToSpeech Class
QTextToSpeech 类提供了访问文本转语音引擎的便捷方式。更多内容...
| 头文件: | #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() 获取支持当前区域设置的语音列表。通过调用availableLocales() 中的某个方法,选择与输入文本语言以及所需语音输出的口音相匹配的选项,从而更改locale 属性。在大多数平台上,此操作将更改可用语音的列表。 然后在调用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] enum class 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> 的 typedef。它存储 Capability 值的按“或”运算组合。
另请参阅 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 数据中。systemize() 信号将随数据块一起发出。 |
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 。
通知器信号:
| void | engineChanged(const QString &engine) |
[read-only, since 6.6] engineCapabilities : Capabilities
该属性包含当前引擎实现的功能
该枚举在 Qt 6.6 中引入。
访问函数:
| QTextToSpeech::Capabilities | engineCapabilities() const |
通知信号:
| void | engineChanged(const QString &engine) |
另请参阅 engine 。
locale : QLocale
该属性存储当前使用的区域设置。
默认情况下,系统会使用系统区域设置。
在某些平台上,更改区域设置会更新available voices 的列表,如果当前语音在新区域设置下不可用,则会设置一个新的语音。
访问函数:
| QLocale | locale() const |
| void | setLocale(const QLocale &locale) |
通知信号:
| 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 : 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) |
通知器信号:
| void | voiceChanged(const QVoice &voice) |
另请参阅 findVoices()。
volume : double
该属性存储当前音量,取值范围为 0.0 到 1.0。
默认值为平台的默认音量。
访问函数:
| double | volume() const |
| void | setVolume(double volume) |
通知信号:
| void | volumeChanged(double volume) |
成员函数文档
[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 的设置 函数。
该函数在 Qt 6.4 中引入。
另请参阅 engine()。
[slot] void QTextToSpeech::stop(QTextToSpeech::BoundaryHint boundaryHint = QTextToSpeech::BoundaryHint::Default)
在boundaryHint 处停止当前读取,并清空待处理文本队列。
无法恢复当前的读取操作。是否遵守boundaryHint 取决于引擎。
另请参阅 say()、enqueue() 和pause()。
[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 中引入。
© 2026 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.