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
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]>
46 lines
2.7 KiB
Text
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.
|