QTextToSpeech 类
QTextToSpeech 类提供了一个方便的途径访问文本语音转换引擎。 更多...
头文件 | #include <QTextToSpeech> |
CMake | find_package(Qt6 REQUIRED COMPONENTS TextToSpeech) target_link_libraries(mytarget PRIVATE Qt6::TextToSpeech) |
qmake | QT += texttospeech |
继承 | QObject |
公共类型
枚举类 | BoundaryHint { Default, Immediate, Word, Sentence, Utterance } |
标志 | 功能 |
(since 6.6) 枚举类 | Capability { None,Speak, PauseResume, WordByWordProgress, Synthesize } |
枚举类 | ErrorReason { NoError, Initialization, Configuration, Input, Playback } |
枚举 | 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 | 音高() const |
double | 速率() const |
(自6.4) bool | setEngine(const QString &engine, const QVariantMap ¶ms = QVariantMap()) |
QTextToSpeech::State | 状态() const |
(自6.6) void | synthesize(const QString &text, const QObject *context, Functor &&functor) |
(自6.6) void | synthesize(const QString &text, Functor &&functor) |
QVoice | 语音() const |
double | 音量() const |
公共槽函数
(自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) |
信号
(自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) |
(自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 上,最终用户可以通过 系统偏好设置 中的 辅助功能 面板安装语音。
成员类型文档
枚举类 QTextToSpeech::BoundaryHint
描述了何时应停止和暂停语音。
常量 | 值 | 描述 |
---|---|---|
QTextToSpeech::BoundaryHint::Default | 0 | 使用特定的引擎默认行为。 |
QTextToSpeech::BoundaryHint::Immediate | 1 | 引擎应立即停止播放。 |
QTextToSpeech::BoundaryHint::Word | 2 | 完成当前单词时停止语音。 |
QTextToSpeech::BoundaryHint::Sentence | 3 | 完成当前句子时停止语音。 |
QTextToSpeech::BoundaryHint::Utterance (自 Qt 6.6) | 4 | 完成当前语音输出时停止语音。语音输出是由 say() 或 enqueue() 调用的文本块。 |
注意:这些是对引擎的提示。当前引擎可能不支持所有选项。
[自 6.6]
枚举类 QTextToSpeech::Capability
标志 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 | 引擎可以从文本合成 PCM 音频数据。 |
此枚举是在 Qt 6.6 中引入的。
Capabilities 类型是 QFlags<Capability> 的 typedef。它存储了 Capability 值的 OR 组合。
另请参阅:engineCapabilities()。
枚举类 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()。
枚举 QTextToSpeech::State
此枚举描述了文本到语音引擎的当前状态。
常量 | 值 | 描述 |
---|---|---|
QTextToSpeech::Ready | 0 | 合成器准备好开始新的文本。这也在文本完成后是状态。 |
QTextToSpeech::Speaking | 1 | 正在说话。 |
QTextToSpeech::Synthesizing | 4 | 将文本合成到 PCM 数据中。将以数据块的形式发出 synthesized() 信号。 |
QTextToSpeech::Paused | 2 | 合成已被暂停,可以使用resume()继续。 |
QTextToSpeech::Error | 3 | 发生了错误。详细信息请见errorReason。 |
属性说明
[自6.4起]
engine : QString
此属性持有用于将文本合成语音的引擎。
更改引擎将停止任何进行的语音。
在大多数平台上,更改引擎将更新可用区域和可用声音的列表。
此属性自Qt 6.4中引入。
访问函数
QString | engine() const | |
bool | setEngine(const QString &engine, const QVariantMap ¶ms = QVariantMap()) | [查阅以下说明] |
注意:此函数可通过元对象系统和从QML调用。请参阅Q_INVOKABLE。
通知信号
void | engineChanged(const QString &engine) |
[只读,自6.6起]
engineCapabilities : const Capabilities
此属性持有当前引擎实现的特性。
此属性自Qt 6.6中引入。
访问函数
QTextToSpeech::Capabilities | engineCapabilities() const |
通知信号
void | engineChanged(const QString &engine) |
另请参阅engine。
locale : QLocale
此属性持有当前使用的区域设置。
默认情况下,使用系统区域设置。
在某些平台上,更改区域设置将更新可用声音的列表,如果当前声音在新区域设置中不可用,将设置新声音。
访问函数
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) |
[只读]
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); }
访问函数
QTextToSpeech::State | state() const |
通知信号
void | stateChanged(QTextToSpeech::State 状态) |
voice : QVoice
此属性保存用于语音的语音。
语音必须是该引擎提供的可用的语音之一。
在某些平台上,设置语音会改变其他语音属性,例如区域、音调等。这些更改会触发信号的发射。
访问函数
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) |
成员函数文档
[since 6.6]
模板 <typename Functor> void QTextToSpeech::synthesize(const QString &text, Functor &&functor)
[since 6.6]
模板 <typename Functor> void QTextToSpeech::synthesize(const QString &text, const QObject *context, Functor &&functor)
将文本合成成原始音频数据。
此函数以异步方式将语音合成成原始音频数据。当数据可用时,functor 将被调用为 functor(QAudioFormat format, QByteArray bytes)
,其中 format
描述了 bytes
中数据的 格式;或者 functor(QAudioBuffer &buffer)
。
开始合成时,将 state 属性设置为 Synthesizing,完成合成后设置为 Ready。在合成过程中,functor 可能会被调用多次,format
的值可能发生变化。
functor 可以是一个可调用的,如 lambda 或 free 函数,带有可选的 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)
从使用默认引擎插件的对象中加载数文到语音引擎,并以 parent 作为其子对象构造 QTextToSpeech 对象。
默认引擎是平台特定的。
如果引擎初始化正确,则引擎的 state 将更改为 QTextToSpeech::Ready;注意这可能会异步发生。如果插件加载失败,则 state 将设置为 QTextToSpeech::Error。
另请参阅 availableEngines().
[显式]
QTextToSpeech::QTextToSpeech(const QString &engine, QObject *parent = nullptr)
从与参数engine匹配的插件中加载文本到语音引擎,并将QTextToSpeech对象构造为parent的子对象。
如果engine为空,则使用默认的引擎插件。默认引擎是平台特定的。
如果引擎正确初始化,则引擎的state将被设置为QTextToSpeech::Ready。如果插件加载失败,或引擎初始化失败,则引擎的state将设置为QTextToSpeech::Error。
另请参阅 availableEngines().
[显式,自6.4以来]
QTextToSpeech::QTextToSpeech(const QString &engine, const QVariantMap ¶ms, QObject *parent = nullptr)
从与参数engine匹配的插件中加载文本到语音引擎,并将QTextToSpeech对象构造为parent的子对象,将参数params传递给引擎。
如果engine为空,则使用默认的引擎插件。默认引擎是平台特定的。支持的键值对取决于引擎。有关详细信息,请参阅引擎文档。不支持的条目将被忽略。
如果引擎正确初始化,则引擎的state将被设置为QTextToSpeech::Ready。如果插件加载失败,或引擎初始化失败,则引擎的state将设置为QTextToSpeech::Error。
此函数自Qt 6.4版本引入。
另请参阅 availableEngines().
[重写虚函数noexcept]
QTextToSpeech::~QTextToSpeech()
销毁此QTextToSpeech对象,停止任何语音。
[信号,自6.6以来]
void QTextToSpeech::aboutToSynthesize(qsizetype id)
在引擎开始为id音频生成合成语音之前发出此信号。 id是调用enqueue()返回的值。应用程序可以在此信号的帮助下对voice属性进行最后时刻的修改,或跟踪通过enqueue()入队的文本的过程。
此功能是在 Qt 6.6 中引入的。
另请参阅 enqueue(),synthesize()和voice。
[静态可调用]
QStringList QTextToSpeech::availableEngines()
获取支持的文本到语音引擎插件的列表。
注意:此函数可通过元对象系统和从QML调用。请参阅Q_INVOKABLE。
另请参阅engine。
[可调用]
QList<QLocale> QTextToSpeech::availableLocales() const
返回活动engine支持的区域列表。
注意:此函数可通过元对象系统和从QML调用。请参阅Q_INVOKABLE。
另请参阅 availableVoices()和findVoices()。
[可调用]
QList<QVoice> QTextToSpeech::availableVoices() const
返回当前地区可用的语音列表。
注意:如果未设置地区,则使用系统地区。
注意:此函数可通过元对象系统和从QML调用。请参阅Q_INVOKABLE。
另请参阅:availableLocales() 和 findVoices()。
[槽,自6.6版本以来]
qsizetype QTextToSpeech::enqueue(const QString &utterance)
将utterance添加到待读文本队列中,并开始朗读。返回文本在队列中的索引,或在出错时返回-1。
如果引擎的状态目前为Ready
,则立即朗读utterance。否则,引擎将在完成朗读当前文本后开始朗读utterance。
每当引擎开始读取队列中的下一个文本条目时,将发出aboutToSynthesize()信号。这允许应用程序跟踪进度,并对语音属性进行最后-minute更改。
调用stop()清除队列。要在文本末尾暂停引擎,使用Utterance边界提示。
此功能是在 Qt 6.6 中引入的。
另请参阅:say()、stop()、aboutToSynthesize() 和 synthesize()。
[信号]
void QTextToSpeech::errorOccurred(QTextToSpeech::ErrorReason reason, const QString &errorString)
在发生错误并将状态设置为QTextToSpeech::Error后发出此信号。参数reason指定错误类型,参数errorString提供人类可读的错误描述。
QTextToSpeech::ErrorReason不是一个已注册的元类型,因此对于排队连接,您必须使用Q_DECLARE_METATYPE() 和 qRegisterMetaType()进行注册。
另请参阅:errorReason()、errorString() 和 创建自定义Qt类型。
[可调用]
QTextToSpeech::ErrorReason QTextToSpeech::errorReason() const
返回引擎报告错误的原因。
注意:此函数可通过元对象系统和从QML调用。请参阅Q_INVOKABLE。
另请参阅:状态和errorOccurred。
[可调用]
QString QTextToSpeech::errorString() const
返回当前的引擎错误消息。
注意:此函数可通过元对象系统和从QML调用。请参阅Q_INVOKABLE。
另请参阅:errorOccurred()。
[自6.6版本以来]
模板 <typename... Args> QList<QVoice> QTextToSpeech::findVoices(Args &&... args) const
返回符合args中条件的语音列表。
将args中的参数按顺序处理,以组装符合所有参数的语音列表。类型为QString的参数与语音的name相匹配,类型为QLocale的参数与语音的locale相匹配等。可以只指定所需语音的Language或Territory,并且名称可以使用正则表达式进行匹配。
如果条件列表为空,此函数返回所有语音。不允许存在相同类型的多个条件,否则会导致编译时错误。
注意:除非args包含当前locale,此函数可能需要改变发动机的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。
[信号,自6.6起]
void QTextToSpeech::sayingWord(const QString &word, qsizetype id, qsizetype start, qsizetype length)
当文本片段word在id指定的合成中,从start和length开始播放至音频设备时,将发出此信号。
注意:此信号要求引擎具备WordByWordProgress能力。
此功能是在 Qt 6.6 中引入的。
[可调用,自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。
[槽函数]
void QTextToSpeech::stop(QTextToSpeech::BoundaryHint boundaryHint = QTextToSpeech::BoundaryHint::Default)
在boundaryHint处停止当前朗读,并清除挂起的文本队列。
朗读无法继续。是否尊重boundaryHint取决于引擎。
© 2024 Qt公司有限公司。此处包含的文档贡献由各自的所有者拥有版权。此处提供的文档是根据自由软件基金会发布的GNU自由文档许可版本1.3许可的。Qt及其相关标志是芬兰Qt公司及/或在其他国家/地区的商标。所有其他商标均为其各自所有者的财产。