QTextToSpeech 类

QTextToSpeech 类提供了一个方便的途径访问文本语音转换引擎。 更多...

头文件 #include <QTextToSpeech>
CMakefind_package(Qt6 REQUIRED COMPONENTS TextToSpeech)
target_link_libraries(mytarget PRIVATE Qt6::TextToSpeech)
qmakeQT += 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 &params, QObject *parent = nullptr)
virtual~QTextToSpeech() override
QList<QLocale>availableLocales() const
QList<QVoice>availableVoices() const
QStringengine() const
QTextToSpeech::CapabilitiesengineCapabilities() const
QTextToSpeech::ErrorReasonerrorReason() const
QStringerrorString() const
(since 6.6) QList<QVoice>findVoices(Args &&... args) const
QLocalelocale() const
double音高() const
double速率() const
(自6.4) boolsetEngine(const QString &engine, const QVariantMap &params = QVariantMap())
QTextToSpeech::State状态() const
(自6.6) voidsynthesize(const QString &text, const QObject *context, Functor &&functor)
(自6.6) voidsynthesize(const QString &text, Functor &&functor)
QVoice语音() const
double音量() const

公共槽函数

(自6.6) qsizetypeenqueue(const QString &utterance)
voidpause(QTextToSpeech::BoundaryHint boundaryHint = QTextToSpeech::BoundaryHint::Default)
voidresume()
voidsay(const QString &text)
voidsetLocale(const QLocale &locale)
voidsetPitch(double pitch)
voidsetRate(double rate)
voidsetVoice(const QVoice &voice)
voidsetVolume(double volume)
voidstop(QTextToSpeech::BoundaryHint boundaryHint = QTextToSpeech::BoundaryHint::Default)

信号

(自6.6) voidaboutToSynthesize(qsizetype id)
voidengineChanged(const QString &engine)
voiderrorOccurred(QTextToSpeech::ErrorReason reason, const QString &errorString)
voidlocaleChanged(const QLocale &locale)
voidpitchChanged(double pitch)
voidrateChanged(double rate)
(自6.6) voidsayingWord(const QString &word, qsizetype id, qsizetype start, qsizetype length)
voidstateChanged(QTextToSpeech::State state)
voidvoiceChanged(const QVoice &voice)
voidvolumeChanged(double volume)

静态公共成员

QStringListavailableEngines()

详细描述

使用 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::Default0使用特定的引擎默认行为。
QTextToSpeech::BoundaryHint::Immediate1引擎应立即停止播放。
QTextToSpeech::BoundaryHint::Word2完成当前单词时停止语音。
QTextToSpeech::BoundaryHint::Sentence3完成当前句子时停止语音。
QTextToSpeech::BoundaryHint::Utterance (自 Qt 6.6)4完成当前语音输出时停止语音。语音输出是由 say() 或 enqueue() 调用的文本块。

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

[自 6.6] 枚举类 QTextToSpeech::Capability
标志 QTextToSpeech::Capabilities

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

常量描述
QTextToSpeech::Capability::None0引擎实施无任何功能。
QTextToSpeech::Capability::Speak1 << 0引擎可以从文本播放音频输出。
QTextToSpeech::Capability::PauseResume1 << 1引擎可以暂停然后恢复音频输出。
QTextToSpeech::Capability::WordByWordProgress1 << 2引擎对每个要说的单词发出 sayingWord() 信号。
QTextToSpeech::Capability::Synthesize1 << 3引擎可以从文本合成 PCM 音频数据。

此枚举是在 Qt 6.6 中引入的。

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

另请参阅:engineCapabilities()。

枚举类 QTextToSpeech::ErrorReason

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

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

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

另请参阅:errorOccurred()。

枚举 QTextToSpeech::State

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

常量描述
QTextToSpeech::Ready0合成器准备好开始新的文本。这也在文本完成后是状态。
QTextToSpeech::Speaking1正在说话。
QTextToSpeech::Synthesizing4将文本合成到 PCM 数据中。将以数据块的形式发出 synthesized() 信号。
QTextToSpeech::Paused2合成已被暂停,可以使用resume()继续。
QTextToSpeech::Error3发生了错误。详细信息请见errorReason

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

属性说明

[自6.4起] engine : QString

此属性持有用于将文本合成语音的引擎。

更改引擎将停止任何进行的语音。

在大多数平台上,更改引擎将更新可用区域和可用声音的列表。

此属性自Qt 6.4中引入。

访问函数

QStringengine() const
boolsetEngine(const QString &engine, const QVariantMap &params = QVariantMap())[查阅以下说明]

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

通知信号

voidengineChanged(const QString &engine)

[只读,自6.6起] engineCapabilities : const Capabilities

此属性持有当前引擎实现的特性。

此属性自Qt 6.6中引入。

访问函数

QTextToSpeech::CapabilitiesengineCapabilities() const

通知信号

voidengineChanged(const QString &engine)

另请参阅engine

locale : QLocale

此属性持有当前使用的区域设置。

默认情况下,使用系统区域设置。

在某些平台上,更改区域设置将更新可用声音的列表,如果当前声音在新区域设置中不可用,将设置新声音。

访问函数

QLocalelocale() const
voidsetLocale(const QLocale &locale)

通知信号

voidlocaleChanged(const QLocale &locale)

另请参阅voicefindVoices

pitch : double

此属性持有声音音调,范围从-1.0到1.0。

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

访问函数

doublepitch() const
voidsetPitch(double pitch)

通知信号

voidpitchChanged(double pitch)

rate : double

此属性持有当前语音速率,范围从-1.0到1.0。

默认值0.0为正常语音流畅度。

访问函数

doublerate() const
voidsetRate(double rate)

通知信号

voidrateChanged(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);
}

可以使用say()以当前声音区域设置开始合成文本。

访问函数

QTextToSpeech::Statestate() const

通知信号

voidstateChanged(QTextToSpeech::State 状态)

voice : QVoice

此属性保存用于语音的语音。

语音必须是该引擎提供的可用的语音之一。

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

访问函数

QVoicevoice() const
voidsetVoice(const QVoice &voice)

通知信号

voidvoiceChanged(const QVoice &voice)

另请参阅findVoices

volume : double

此属性持有当前音量,范围从 0.0 到 1.0。

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

访问函数

doublevolume() const
voidsetVolume(double volume)

通知信号

voidvolumeChanged(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 中引入的。

另请参阅say() 和 stop

[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 &params, 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相匹配等。可以只指定所需语音的LanguageTerritory,并且名称可以使用正则表达式进行匹配。

如果条件列表为空,此函数返回所有语音。不允许存在相同类型的多个条件,否则会导致编译时错误。

注意:除非args包含当前locale,此函数可能需要改变发动机的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

[信号,自6.6起] void QTextToSpeech::sayingWord(const QString &word, qsizetype id, qsizetype start, qsizetype length)

当文本片段wordid指定的合成中,从startlength开始播放至音频设备时,将发出此信号。

注意:此信号要求引擎具备WordByWordProgress能力。

此功能是在 Qt 6.6 中引入的。

另请参阅:能力say

[可调用,自6.4起] bool QTextToSpeech::setEngine(const QString &engine, const QVariantMap &params = 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取决于引擎。

另请参阅:say(),enqueue() 和 pause

© 2024 Qt公司有限公司。此处包含的文档贡献由各自的所有者拥有版权。此处提供的文档是根据自由软件基金会发布的GNU自由文档许可版本1.3许可的。Qt及其相关标志是芬兰Qt公司及/或在其他国家/地区的商标。所有其他商标均为其各自所有者的财产。