TextToSpeech QML Type
The TextToSpeech type provides access to text-to-speech engines. More...
Import Statement: | import QtTextToSpeech |
Properties
- engine : string
- engineCapabilities : enumeration
(since 6.6)
- engineParameters : map
- locale : locale
- pitch : double
- rate : double
- state : enumeration
- voice : Voice
- volume : double
Signals
- aboutToSynthesize(number id)
(since 6.6)
- void errorOccurred(enumeration reason, string errorString)
- sayingWord(string word, int id, int start, int length)
(since 6.6)
Methods
- list<string> availableEngines()
- list<Voice> availableLocales()
- list<Voice> availableVoices()
- enqueue(string utterance)
(since 6.6)
- enumeration errorReason()
- string errorString()
- list<voice> findVoices(map criteria)
(since 6.6)
- pause(BoundaryHint boundaryHint)
- resume()
- say(string text)
- stop(BoundaryHint boundaryHint)
Detailed Description
Use say() to start reading text to the default audio device, and stop(), pause(), and resume() to control the reading of the text.
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 } ...
To synthesize text into PCM data for further processing, use synthesize().
To set a voice, use the VoiceSelector attached property like this:
TextToSpeech { VoiceSelector.locale: Qt.locale("en_UK") VoiceSelector.gender: Voice.Male }
The first voice that matches all specified criteria will be used. If no voice matches all criteria, then the voice will not change.
Alternatively, use findVoices() to get a list of matching voices, or use availableVoices() to get the list of voices that support the current locale. Change the locale property, using one of the availableLocales() that is a good match for the language that the input text is in, and for the accent of the desired voice output. This will change the list of available voices on most platforms. Then use one of the available voices in the voice property.
Not every engine supports all features. Use the engineCapabilities() function to test which features are available, and adjust the usage of the type accordingly.
Note: Which locales and voices the engine supports depends usually on the Operating System configuration. E.g. on macOS, end users can install voices through the Accessibility panel in System Preferences.
Property Documentation
engine : string |
The engine used to synthesize text to speech.
Changing the engine stops any ongoing speech.
On most platforms, changing the engine will update the list of available locales and available voices.
engineCapabilities : enumeration |
This property holds the capabilities implemented by the current engine.
This property was introduced in Qt 6.6.
See also engine and QTextToSpeech::Capability.
engineParameters : map |
This property holds engine-specific parameters.
See also engine.
locale : locale |
This property holds the current locale in use.
By default, the system locale is used.
See also voice.
pitch : double |
This property hold the voice pitch, ranging from -1.0 to 1.0.
The default of 0.0 is the normal speech pitch.
rate : double |
This property holds the current voice rate, ranging from -1.0 to 1.0.
The default of 0.0 is the normal speech flow.
state : enumeration |
This property holds the current state of the speech synthesizer.
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 } }
See also QTextToSpeech::State, say(), stop(), and pause().
voice : Voice |
This property holds the voice that will be used for the speech.
The voice needs to be one of the voices available for the engine.
On some platforms, setting the voice changes other voice attributes such as locale, pitch, and so on. These changes trigger the emission of signals.
volume : double |
This property holds the current volume, ranging from 0.0 to 1.0.
The default value is the platform's default volume.
Signal Documentation
|
This signal gets emitted just before the engine starts to synthesize the speech audio for id. Applications can use this signal to make last-minute changes to voice attributes, or to track the process of text enqueued via enqueue().
Note: The corresponding handler is onAboutToSynthesize
.
This signal was introduced in Qt 6.6.
void errorOccurred(enumeration reason, string errorString) |
This signal is emitted after an error occurred and the state has been set to TextToSpeech.Error
. The reason parameter specifies the type of error, and the errorString provides a human-readable error description.
Note: The corresponding handler is onErrorOccurred
.
See also state, errorReason(), and errorString().
|
This signal is emitted when the word, which is the slice of text indicated by start and length in the utterance id, gets played to the audio device.
Note: This signal requires that the engine has the WordByWordProgress capability.
The following code highlights the word that is spoken in a TextArea input
:
onSayingWord: (word, id, start, length)=> { input.select(start, start + length) }
Note: The corresponding handler is onSayingWord
.
This signal was introduced in Qt 6.6.
See also QTextToSpeech::Capability and say().
Method Documentation
list<string> availableEngines() |
Holds the list of supported text-to-speech engine plug-ins.
list<Voice> availableLocales() |
Holds the list of locales that are supported by the active engine.
list<Voice> availableVoices() |
Holds the list of voices available for the current locale.
|
Adds utterance to the queue of text to be spoken, and starts speaking.
If the engine's state is currently Ready
, utterance will be spoken immediately. Otherwise, the engine will start to speak utterance once it has finished speaking the current text.
Each time the engine proceeds to the next text entry in the queue, the aboutToSynthesize() signal gets emitted. This allows applications to keep track of the progress, and to make last-minute changes to voice attributes.
Calling stop() clears the queue.
This method was introduced in Qt 6.6.
See also say(), stop(), and aboutToSynthesize().
enumeration errorReason() |
Returns the reason why the engine has reported an error.
See also QTextToSpeech::ErrorReason.
string errorString() |
Returns the current engine error message.
|
Returns the list of voices that match all the specified criteria.
criteria is a map from voice property name to property value, supporting combinations of search criteria such as:
let daniel = tts.findVoices({ "name": "Daniel" }) let maleEnglish = tts.findVoices({ "gender": Voice.Male, "language": Qt.locale('en') })
This method was introduced in Qt 6.6.
See also VoiceSelector.
pause(BoundaryHint boundaryHint) |
Pauses the current speech at boundaryHint.
Whether the boundaryHint is respected depends on the engine.
See also resume(), QTextToSpeech::BoundaryHint, and PauseResume.
say(string text) |
Starts synthesizing the text.
This function starts sythesizing the speech asynchronously, and reads the text to the default audio output device.
RowLayout { Button { text: qsTr("Speak") enabled: [TextToSpeech.Paused, TextToSpeech.Ready].includes(tts.state) onClicked: { tts.say(input.text) } }
Note: All in-progress readings are stopped before beginning to read the recently synthesized text.
The current state is available using the state property, and is set to QTextToSpeech::Speaking once the reading starts. When the reading is done, state will be set to QTextToSpeech::Ready.
stop(BoundaryHint boundaryHint) |
Stops the current reading at boundaryHint, and clears the queue of pending texts.
The reading cannot be resumed. Whether the boundaryHint is respected depends on the engine.
See also say(), enqueue(), pause(), and QTextToSpeech::BoundaryHint.