open-standards/aac/aac-rs/third_party/moonshine-wasm/NOTICE.txt
Transaction Science 186c887f72
Some checks failed
standards workspaces build + test / jouleclaw-rs (push) Successful in 1m51s
standards workspaces build + test / aac-rs (push) Successful in 59s
standards workspaces build + test / joule-code-rs (push) Successful in 39s
standards workspaces build + test / joulecontract-rs (push) Successful in 35s
standards workspaces build + test / map-rs (push) Successful in 32s
standards workspaces build + test / mesh-rs (push) Successful in 24s
standards workspaces build + test / openpay (push) Successful in 1m48s
no-vanity-metrics / Scan committed Markdown for vanity metrics (push) Has been cancelled
standards workspaces build + test / arl-rs (push) Has been cancelled
standards workspaces build + test / eoc-rs (push) Has been cancelled
standards workspaces build + test / jcp-rs (push) Has been cancelled
standards workspaces build + test / joule-ui-rs (push) Has been cancelled
standards workspaces build + test / jouledesk-rs (push) Has been cancelled
standards workspaces build + test / joulehook-rs (push) Has been cancelled
standards workspaces build + test / proof-rs (push) Has been cancelled
standards workspaces build + test / sandbox-rs (push) Has been cancelled
standards workspaces build + test / sense-rs (push) Has been cancelled
standards workspaces build + test / smart-byte-rs (push) Has been cancelled
standards workspaces build + test / macOS energy backend (jcp-energy) (push) Has been cancelled
feat(aac-web): better voices, on the device, in 11 languages
The device's own voice is all most people get, and on many devices in
many languages it is poor or missing. A person can now download a
neural voice for their language, once, and it speaks their words on
the device, offline, with nothing sent anywhere.

- neural_voice.rs, neural_tts.js: the catalogue (aac-voice-index/1:
  runtimes, shared components, per-language packs, each file by size
  and SHA-256, read once per content-named catalogue and kept for
  offline use); downloads into the model store, one at a time, only
  with room for them, verified, and never left half-finished; a record
  of what each voice installed, so it keeps speaking from its own files
  whatever a later catalogue says (a newer version is an update to
  choose), read afresh before any change so another tab of the app
  never deletes a voice it installed; remove keeps what other voices
  need and takes the engine with the last voice.
- Speaking: taps never wait while the device has a voice for the
  language (a voice not ready in 1.2 s gives the words to the device
  voice); with none, the words wait for the downloaded voice rather
  than go unsaid. Words the person moved past (a newer utterance, Stop)
  are never said by either voice, and words no voice could say are
  reported. Sentences are split by the runtime's own splitter, so
  "1.5 mg", "1.000 Euro" and "Dr. Smith" stay whole. The chosen voice
  is loaded when the app opens and after a change of language, speed
  or voice; every call site speaks at the same speed.
- third_party/moonshine-wasm: the Moonshine WASM 0.1.5 runtime (the
  latest), vendored and pinned like MediaPipe, with its worker (one
  voice in memory at a time), revision aac2.
- Settings > Better voices: each voice rated in plain words (sounds
  natural / clear, though less natural / experimental), named in its
  radio button, with its size, licence and credits; downloads that
  outlive the panel and say when they finish; Remove asks first; focus
  stays in place; one quiet live region; plain errors. Settings > Voice
  names the better voice when one is chosen. A language without one
  says so plainly, with the recorded reason one click away.
- tools/voices: the pinned, reproducible pack builder (every source
  pinned by commit, version and SHA-256; byte-identical rebuilds; the
  pointer written last), a smoke test that synthesizes with every pack,
  and check_packs.py, which every static build runs so packs that are
  missing, stale or incomplete never ship (AAC_VOICES=none builds
  without them on purpose). Voices: en, es, fr, pt, it, ja, hi and zh
  (experimental) on Kokoro-82M; de (experimental), nl and uk on Piper.
  Nothing non-commercial or GPL. A voice that says something other than
  the word chosen is withheld: en-piper-norman turns "more" into
  seconds of babble. 32 languages record why they have no voice yet;
  ha and yo are planned.
- data/voices: the committed catalogue and LICENSES.md.
- prerender-static.sh ships the runtime and the checked packs with the
  static app.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-09-30 18:23:13 -04:00

46 lines
2.7 KiB
Text

On-device neural voices in the AAC reference app run on Moonshine's
WebAssembly runtime. The app serves it from its own site, under
vendor/moonshine-wasm-<version>-<revision>/, put there by
third_party/moonshine-wasm/vendor.sh. The app copies these files into the
person's model store when they download a voice, and runs them from there
in a worker on their device. Nothing they type or say is sent anywhere.
Moonshine WASM (@moonshine-ai/moonshine-wasm, the version in the directory
name), by Useful Sensors, Inc. (dba Moonshine AI).
moonshine.mjs and moonshine.wasm, unchanged from the npm package.
Licensed under the MIT License: SECTION 1 of LICENSE.txt beside this file
(Moonshine's LICENSE, verbatim).
Source: https://www.npmjs.com/package/@moonshine-ai/moonshine-wasm
(package.json "license": "MIT"),
https://github.com/moonshine-ai/moonshine (LICENSE read 2026-09-29 at
commit 234f60faa0eb388b01cdf7e60aca232af37aefda)
SECTION 2 of LICENSE.txt (the Moonshine AI Community License,
non-commercial) covers only Moonshine's legacy non-streaming
speech-to-text models for languages other than English. The app ships
none of them and loads none of them: it uses text to speech only.
The text-to-speech and grapheme-to-phoneme data files (voices, lexicons,
models) are not part of this directory and are not covered by LICENSE.txt.
Each carries its own licence and attribution, which the app lists per
voice pack (Settings > Voice) from the voice index.
The runtime statically links third-party code from Moonshine's
core/third-party/ (same commit). Their licence texts are in THIRD_PARTY/:
ONNX Runtime 1.23.2 (minimal build) MIT onnxruntime-LICENSE.txt
and the notices of the code it includes: onnxruntime-ThirdPartyNotices.txt
(from https://github.com/microsoft/onnxruntime at tag v1.23.2)
Eigen MPL-2.0 Eigen-COPYING.MPL2
Unmodified; its source is at https://gitlab.com/libeigen/eigen and in
Moonshine's repository under core/third-party/Eigen.
kaldi-native-fbank Apache-2.0 kaldi-native-fbank-LICENSE
KISS FFT BSD-3-Clause kissfft-COPYING
nlohmann/json MIT nlohmann-LICENSE.MIT
UTF8-CPP BSL-1.0 utf-8-LICENSE.txt
utf8proc MIT utf8proc-LICENSE.md
None of it is GPL or LGPL, and the runtime contains no eSpeak: Moonshine's
grapheme-to-phoneme code is its own (MIT).
voice-worker.js is the AAC reference app's own code (Apache-2.0, like the
rest of the app): it runs the runtime in a worker and reads voice files only
from the model store.