open-standards/aac/aac-rs/third_party/readium-speech/NOTICE.txt
Transaction Science ac08f2c324 feat(access-core): rank device voices by quality, and name the ones never to use
A device voice now has a tier, or a reason it is never used, decided from
what the browser exposes (its name, identifier and language) and the
platform, never from `default` or `localService` alone (WebKit sets both on
every voice):

- Rejected: a voice that sends the words away (not on the device, "Online",
  "-network"), eSpeak, Linux speech-dispatcher, Apple's Eloquence voices
  (Eddy, Flo, Grandma...), novelty voices (Readium's list, and Fred, Junior,
  Kathy and Ralph) and Apple's super-compact voices.
- Premium: Apple Premium (identifier, or its marker in the interface
  language), a local "(Natural)" voice, or one Readium rates high (Google's
  natural voices on ChromeOS among them).
- Enhanced: Apple Enhanced, or an Android speech engine's voice (Android
  Chrome lists them under localized names, so the platform comes in).
- Basic: Apple compact, Microsoft's desktop voices (David, Zira, Mark...),
  other "Chrome OS" voices, anything unknown.

rank_voices orders a language's usable voices by tier, then the region asked
for, the language's usual region, Readium's order. choose_voice gives the
person's chosen voice while the device has it, else the best that may speak
unasked (premium or enhanced), else none. SystemVoice gains the identifier
(voiceURI); Platform reads the user agent (iPadOS Safari says it is a Mac:
touch points tell them apart). earlier_choice keeps the old ranking, to keep
the voice of someone who was speaking with it; the app still uses it until
the next commit.

The facts come from Readium Speech v0.13.0 (npm latest; its json/ is
byte-identical to v0.11.0's), voice data CC0 and code BSD-3-Clause.
third_party/readium-speech/generate.py reads the pinned commit's files,
checks their digest, and writes them as Rust tables
(access-core/src/voice/readium.rs): nothing is fetched at run time. Tests
use voice lists as iPad and Mac Safari, Mac Chrome, Windows Chrome and Edge,
ChromeOS, Android Chrome and Linux give them.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-04 15:06:20 -04:00

22 lines
1.5 KiB
Text

The AAC reference app chooses which of a device's own voices may speak for a
person (access-core, src/voice.rs). Part of what it goes by is what Readium
Speech documents about the voices browsers expose: which are novelty or very
low quality voices, how Apple marks a voice's quality in its name, and, for
each language, the voices known and their quality, in Readium's order.
generate.py beside this file reads those facts at one pinned commit and
writes them into crates/access-core/src/voice/readium.rs as Rust tables, so
the app carries them in its own code. Nothing is fetched while the app runs,
and nothing about a person's voices leaves their device.
Readium Speech (@readium/speech v0.13.0), by the Readium Foundation.
Used: json/<language>.json for the app's languages, json/filters/novelty.json,
json/filters/veryLowQuality.json and json/localizedNames/apple.json, reduced
to voice names, quality and order (network voices left out).
The code is licensed under the BSD 3-Clause License: LICENSE.txt beside
this file (the project's LICENSE, verbatim at the same commit).
The voice data began as Hadrien Gardeur's web-speech-recommended-voices,
released under CC0 1.0 (https://github.com/HadrienGardeur/web-speech-recommended-voices).
Source: https://github.com/readium/speech (tag v0.13.0, commit
4a7b73dd37a736e6762497ea7d7bc773c0fe1a30, read 2026-10-04; its json/
is byte-identical to v0.11.0's), https://www.npmjs.com/package/@readium/speech