Skip to content

Releases: eugenehp/espeak-ng-rs

v0.2.0

Choose a tag to compare

@eugenehp eugenehp released this 05 Sep 08:01

espeak-ng 0.2.0 is the largest release so far: the Klatt and MBROLA ports are
finished, synthesis gains streaming and parallel APIs, and a long round of
translation fixes brings -x output to parity with upstream for every language
tested. All 105 changes were verified against a locally built upstream
espeak-ng binary rather than against expectations.

The version jumps to 0.2.0 rather than 0.1.4 because the whole workspace — the
library and all 125 data crates — now shares a single version and is released
together. The bundled data changed in this release, and letting the crate
versions drift apart made it easy to miss that a data crate needed a bump at
all.

Added

  • The dictionary compiler reproduces upstream's. Measured by compiling each
    language's real dictsource with both compilers and speaking the same words
    through each result: 1144 of 1154 words across 80 languages now come out
    identical. Rule-context commands, rule conditions, rule and group ordering,
    RULE_PRE_ATSTART, list-entry order and list-key folding.
  • klatt.c fully ported, and MBROLA completed — the phoneme-translation
    compiler, the .pho writer, --compile-mbrola, --pho, and mb-* voices.
  • Incremental, parallel and async synthesis: synth_streaming, the
    parallel feature (rayon) with synth_many, and a tokio-runtime feature.
  • Chinese and Cantonese speak, foreign-script text is spoken rather than
    dropped, and skin-tone and subdivision-flag emoji are read.
  • Language configuration read from the voice file, dicts/ layout support,
    NFKC input folding, -X rule tracing and -D deterministic mode.

Changed

  • Bundled data refreshed from eSpeak NG 1.52.0 (Dec 2024) to upstream
    master.
  • Faroese and Pashto now ship as their own dictionary crates, joining
    Russian outside espeak-ng-data-dicts, which would otherwise have grown to
    8.9 MB against the 10 MB crates.io limit. bundled-data depends on all four,
    so this is invisible to callers.

Fixed

  • Every language's -x output matches upstream — a 32-language sweep went
    from 20/32 to 32/32, and --ipa is now rendered from the clause's
    phoneme list the way upstream does.
  • Per-language stress placement is transcribed from tr_languages.c
    instead of guessed, along with inter-word pauses, $pause/$brk, hyphen
    joining, and stress-conditioned phoneme changes.
  • Standard voices no longer render through the Klatt engine, a voice's
    pitch line is no longer ignored, and vowel pitch is no longer flat across
    the syllable.
  • The bundled data crates ship the dictionaries they claim to. Three of
    them were pre-refresh snapshots carrying old version numbers, so they would
    have been skipped as already-published and shipped stale dictionaries under a
    fresh release. Six missing lang/ voice files meant Abkhaz, Ligurian,
    Mongolian and the Pashto variants could not be selected at all.

See CHANGELOG.md
for the complete list of 105 changes.

v0.1.3

Choose a tag to compare

@eugenehp eugenehp released this 02 Aug 02:58

espeak-ng 0.1.3 adds new public API surface and synthesis improvements, plus an
extensive round of number- and text-normalization fixes verified against the
upstream espeak-ng C binary.

Added

  • New public modules: soundicon, voices, async_synth, mbrola, and — behind
    the wav-analysis feature — analysis.
  • Engine Builder, VoiceSpec / VoiceSpecBuilder, synthesis events
    (SynthEvent / EventKind, including word-boundary and Mark), MBROLA-backed
    voices, and a working dictionary-source compiler.
  • Broad expansion of language, script, and synthesis coverage.

Fixed — numbers & text normalization

  • Full Slavic scale-word declension across all five espeak variants — Russian
    ("одна тысяча", "две тысячи", "пять тысяч"), Czech/Polish, Lithuanian, Slovak,
    and Croatian — with correct gender and case agreement (including compounds).
  • Many per-language cardinal grammars: conjunctions (Romanian "și", Swahili "na",
    Icelandic "og", …), Afrikaans units-first, omit-one prefixes, and standalone-vs-
    combining hundred/thousand forms (Tamil/Kannada/Malayalam/Telugu/Sinhala), plus
    Italian elision and French liaison.
  • Punctuation & symbols: times ("10:30" → "ten thirty" / "zehn uhr dreißig"),
    dashes ("5-10" → "five dash ten"), dotted acronyms ("U.S.A."), version strings
    ("1.2.3"), non-time colons ("3:2" → "three colon two"), and per-language symbol
    names.

See CHANGELOG.md
for the complete list.

Full Changelog: v0.1.2...v0.1.3

v0.1.2

Choose a tag to compare

@eugenehp eugenehp released this 11 May 19:57

Full Changelog: v0.1.1...v0.1.2

v0.1.1

Choose a tag to compare

@eugenehp eugenehp released this 24 Apr 01:38

What's Changed

  • Merge PR #1: Start supporting numbers/cardinals/ordinals in all langs
  • Merge PR #2: Add rainbow sentence test and English IPA rule regressions
  • CJK character tokenization support
  • Chinese (cmn) IPA fix for empty output

Full Changelog: v0.1.0...v0.1.1