TextToSpeech QML 类型

TextToSpeech 类型提供了对文本转语音引擎的访问。 更多...

导入语句import QtTextToSpeech

属性

信号

方法

详细描述

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

    TextToSpeech {
        id: tts
        volume: volumeSlider.value
        pitch: pitchSlider.value
        rate: rateSlider.value
    ...

        RowLayout {
            Button {
                text: qsTr("Speak")
                enabled: [TextToSpeech.Paused, TextToSpeech.Ready].includes(tts.state)
                onClicked: {
                    tts.say(input.text)
                }
            }
            Button {
                text: qsTr("Pause")
                enabled: tts.state == TextToSpeech.Speaking
                onClicked: tts.pause()
                visible: tts.engineCapabilities & TextToSpeech.Capabilities.PauseResume
            }
            Button {
                text: qsTr("Resume")
                enabled: tts.state == TextToSpeech.Paused
                onClicked: tts.resume()
                visible: tts.engineCapabilities & TextToSpeech.Capabilities.PauseResume
            }
    ...

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

要设置语音,请使用类似这样的附件属性 VoiceSelector

TextToSpeech {
    VoiceSelector.locale: Qt.locale("en_UK")
    VoiceSelector.gender: Voice.Male
}

将使用符合所有指定条件的第一个语音。如果没有语音符合所有条件,则语音将不会改变。

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

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

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

属性文档

engine : string

用于将文本转换为语音的引擎。

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

在大多数平台上,更改引擎将更新可用的 localesvoices 列表。


engineCapabilities : enumeration [since 6.6]

此属性包含当前引擎实现的功能。

此属性是在 Qt 6.6 中引入的。

另请参阅 engineQTextToSpeech::Capability.


engineParameters : map

此属性包含引擎特定参数。

另请参阅 engine.


locale : locale

此属性包含当前正在使用的区域。

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

另请参阅 voice.


pitch : double

此属性包含语音音调,范围从 -1.0 到 1.0。

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


rate : double

此属性包含当前语音速度,范围从 -1.0 到 1.0。

默认值为 0.0,是正常语音流速度。


state : enumeration

此属性包含语音合成器的当前状态。

        onStateChanged: updateStateLabel(state)

        function updateStateLabel(state)
        {
            switch (state) {
                case TextToSpeech.Ready:
                    statusLabel.text = qsTr("Ready")
                    break
                case TextToSpeech.Speaking:
                    statusLabel.text = qsTr("Speaking")
                    break
                case TextToSpeech.Paused:
                    statusLabel.text = qsTr("Paused...")
                    break
                case TextToSpeech.Error:
                    statusLabel.text = qsTr("Error!")
                    break
            }
        }

另请参阅 QTextToSpeech::Statesaystoppause


voice : Voice

此属性包含将用于语音的语音。

语音需要是引擎的可用的 voice 之一。

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


volume : double

此属性包含当前音量,范围从 0.0 到 1.0。

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


信号文档

[自6.6以来] aboutToSynthesize(number id)

此信号在引擎开始为 id 语音音频合成之前发出。应用程序可以使用此信号对 voice 属性进行最后时刻的更改,或者跟踪通过 enqueue() 添加到队列中的文本。

注意:相应的处理函数是 onAboutToSynthesize

此信号在 Qt 6.6 中引入。

另请参阅:enqueue() 和 voice


void errorOccurred(enumeration reason, string errorString)

当错误发生并且 state 被设置为 TextToSpeech.Error 时,将发出此信号。参数 reason 指定错误的类型,而 errorString 提供了可读的错误描述。

注意:相应的处理函数是 onErrorOccurred

另请参阅:stateerrorReason() 以及 errorString


[自6.6以来] sayingWord(string word, int id, int start, int length)

当表示为 id 的语音中指定的文本片段(由 startlength 指示)的 word 被播放到音频设备时,发出此信号。

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

以下代码突出显示了在 TextArea input 中发音的单词。

        onSayingWord: (word, id, start, length)=> {
            input.select(start, start + length)
        }

注意:相应的处理函数是 onSayingWord

此信号在 Qt 6.6 中引入。

另请参阅:QTextToSpeech::Capabilitysay


方法说明

list<string> availableEngines()

包含支持的语音合成引擎插件列表。


list<Voice> availableLocales()

包含活动 engine 支持的区域列表。


list<Voice> availableVoices()

包含当前 locale 可用的语音列表。


[自6.6以来] enqueue(string utterance)

utterance 添加到待说的文本队列中,并开始说话。

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

每次引擎处理到队列中的下一个文本项时,都会发出 aboutToSynthesize() 信号。这允许应用程序跟踪进度并可以对语音属性进行最后的更改。

调用 stop() 清除队列。

此方法在 Qt 6.6 中引入。

另请参阅 say(),stop(),以及aboutToSynthesize()。


枚举 errorReason()

返回引擎报告错误的原因。

另请参阅 QTextToSpeech::ErrorReason


string errorString()

返回当前引擎的错误信息。


[since 6.6] list<voice> findVoices(map criteria)

返回匹配所有指定criteria的声音列表。

criteria是从声音属性名到属性值的映射,支持组合搜索条件,例如

let daniel = tts.findVoices({
    "name": "Daniel"
})
let maleEnglish = tts.findVoices({
    "gender": Voice.Male,
    "language": Qt.locale('en')
})

此方法在 Qt 6.6 中引入。

另请参阅 VoiceSelector


pause(BoundaryHint boundaryHint)

boundaryHint处中止当前语音。

boundaryHint是否被尊重取决于engine

另请参阅 resume(),QTextToSpeech::BoundaryHint,以及PauseResume


resume()

在调用pause()之后继续说话。

另请参阅 pause


say(string text)

开始合成text

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

        RowLayout {
            Button {
                text: qsTr("Speak")
                enabled: [TextToSpeech.Paused, TextToSpeech.Ready].includes(tts.state)
                onClicked: {
                    tts.say(input.text)
                }
            }

注意: 在开始读取最近合成的文本之前,将停止所有进行中的读取。

当前状态可以用state属性查看,并在读取开始时设置为QTextToSpeech::Speaking。当读取完成后,state将设置为QTextToSpeech::Ready

另请参阅 stoppause,以及resume


stop(BoundaryHint boundaryHint)

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

阅读无法继续。是否尊重boundaryHint取决于引擎。

另请参阅 sayenqueuepause,以及QTextToSpeech::BoundaryHint


© 2024 The Qt Company Ltd。此处包含的文档贡献是各自所有者的版权。此处提供的文档是根据自由软件基金会的GNU自由文档许可版本1.3条款许可的。Qt和相应的徽标是芬兰的Qt公司以及其他国家和地区商标。