PBToolboxAI AcheterBuyKaufenAcquistaComprarComprar

← Historique de tous les composants← History of every component← Versionsverlauf aller Komponenten← Cronologia di tutti i componenti← Historial de todos los componentes← Histórico de todos os componentes

L'historique des versions est publié en anglais.Version history is published in English.Der Versionsverlauf wird auf Englisch veröffentlicht.La cronologia delle versioni è pubblicata in inglese.El historial de versiones se publica en inglés.O histórico de versões é publicado em inglês.

Speech out — version history

n_pbt_speechout · Introduced in 3.0

Text-to-speech with the voices installed on the workstation, sentence by sentence and word by word, with no third-party service or API key. Introduced in 3.0.

4.0 — October 2026 #

New #

  • Abbreviations: a built-in list per language (Mr., Dr., e.g., M., z.B.…) no longer ends the sentence, and of_add_abbreviation / of_clear_abbreviations add your own.
  • Two pronunciation tags: [mark=name], which raises the new ue_mark(as_name) event when the voice reaches it, and [rate=150]…[/rate], which changes the rate of a passage.
  • of_is_paused(): true while reading is paused.
  • A sentence of more than 250 characters without punctuation is split into readable pieces; if the speech engine stops answering on a sentence, reading moves on to the next one instead of waiting forever.

Fixed #

  • ii_rate, ii_pitch, ii_volume, is_lang and is_voice changed during reading apply to the next sentence, as documented (they were only taken at the next reading).
  • ue_started is raised when the voice actually starts speaking, and reports the language really read (fr-FR when fr-CA has no voice); a pause set right after of_speak holds: nothing is said or announced before of_resume.
  • ue_voice_fallback is also raised when only the region is missing (fr-CA asked, fr-FR voice); language tags are compared without case, and fr_FR equals fr-FR.
  • A pause set while the voice list is still loading is no longer lost; pausing also stops the current-word tracking and the position.
  • of_is_speaking() returns true right after of_speak, even before the voice list has arrived.
  • A [pause=ms] silence no longer makes a sentence be spoken twice, and a [pause=ms] at the end of the text is honoured before ue_stopped.
  • A [spell]…[/spell] that contains a period (an e-mail address, a version number) no longer ends the sentence, and no longer sticks to the next word.
  • of_sentence_count() and of_count() count the text as it is set, no longer the text of the previous reading.
  • of_voice_used, of_duration and of_spoken_text answer with the settings you have just set.
  • of_pick_voice("", gender) picks within is_lang, and a failure keeps is_voice and fills is_last_error.
  • Two quick of_speak calls, or new text set during reading, no longer leave the voice stuck or raise ue_started twice; a late event from an abandoned reading no longer drives the next one.
  • A script error in the voice's page raises ue_error("script error: …") instead of staying silent.
  • of_pause, of_resume and of_clear_queue no longer create the voice for nothing: they return 0 and create nothing.

Behavior changes #

See the 3.0 → 4.0 migration guide, sections 11.3, 11.10, 11.34 and 11.43.

  • of_speak_from beyond the last sentence returns -5 and lets the current reading go on (it used to cut it and return 0).
  • Every reading that started ends with ue_stopped, even when cut by a new of_speak or by of_close; destroying the object no longer raises any — call of_close() in the window's close event if your ue_stopped must act on closing.
  • il_timeout_ms = 0 means no limit (24 hours at most); it used to cut synchronous reading after 5 s.
  • of_speak_sync called from an event raised during another of_speak_sync is refused: -4 and is_last_error = "already speaking synchronously".
  • A voice that could not be created (WebView2 runtime missing) makes the methods return -2 instead of -1, and -4 when the page did not answer.
  • Sentence numbers in ue_sentence may differ from one version to the next (abbreviations, long sentences split): take them from the event.
  • of_count returns a long, as on every component.
  • A runtime error in your events reaches SystemError instead of being swallowed.

3.0 — September 2026 #

New #

  • First release: a text read sentence by sentence with the workstation's voices, ue_sentence for the current sentence and ue_word for the current word (karaoke-style highlighting), of_spoken_text to display what the voice really reads.
  • Settings is_lang, is_voice, ii_rate, ii_pitch, ii_volume; of_voices, of_languages and of_voice_used to know what the workstation can say; of_pick_voice picks a voice by language and gender; ue_voice_fallback when the requested language has no voice.
  • Control: of_speak, of_speak_from, of_pause, of_resume, of_stop; a queue that never cuts (of_enqueue, of_clear_queue, of_queue_count, ue_queue_done).
  • Synchronous reading with of_speak_sync, which returns at the end and is cut beyond il_timeout_ms.
  • Pronunciation: [pause=ms], [spell]…[/spell], [say-as=digits|characters] tags and a replacement dictionary (of_add_replacement).
  • Estimated duration, position and progress (of_duration, of_position, of_progress), which learn each voice's real rate.
  • Events delivered on their own, with no timer or receiver to wire; n_pbt_utils.of_speech_languages and of_speech_voices list the available languages and voices before the object is created.