Project board — live roadmap and status for this repo's issues.
A cross-platform Rust engine for neural speech models: text to speech and speech recognition.
- Models: Piper, Kokoro, and MeloTTS ONNX voices
- Phonemization: eSpeak-ng (100+ languages, IPA output) and Arabic diacritization via
libtashkeel - Multi-speaker voices: select by
speaker_id - Streaming synthesis: chunked output (
chunk_size/chunk_padding) and a realtime gRPC stream - Prosody control: rate, pitch, and volume via a Rust port of Sonic in
dengjen-audio-ops - Synthesis modes: lazy, parallel, and batched, selectable per request; realtime for the voices that support it
- Speech recognition: offline Kurmanji recognition in
dengjen-stt, on sherpa-onnx with Omnilingual CTC models (300M int8 by default, 1B int8 for higher accuracy, and a v2 build of each; seedengjen_stt::catalogue). Reachable through the C API (libdengjen-stt), the gRPCRecognizeRPC, the Gosttpackage, the Android AAR, and the Apple XCFramework's opt-insttbuild. Recognition is offline: there are no streaming partial results. - Bindings: native Rust, C-API (
libdengjen), Python (pydengjen), Go and Java bindings over the C API (seebindings/goandbindings/java), gRPC (any language over the wire), and a CLI
RHVoice-style formant/statistical synthesis is a different synthesis paradigm from this engine's neural-ONNX pipeline and isn't planned.
| Piper | Kokoro | MeloTTS | |
|---|---|---|---|
| Lazy, parallel, batched modes | Yes | Yes | Yes |
| Realtime streaming | Voices whose manifest sets "streaming": true |
Yes, by chunking an already synthesized sentence | No |
| Speakers | Manifest speaker map | Presets from the manifest's voices list |
Manifest speaker map |
| Rate, pitch, volume, silence | Yes | Yes | Yes |
| Tunable inference knobs | noise_scale, length_scale, noise_w |
None | noise_scale, length_scale, noise_scale_w |
| Phonemizers | eSpeak-ng, raw text, Hebrew, pinyin, Kurmanji; Arabic diacritization via libtashkeel |
eSpeak-ng, fixed to en-US |
eSpeak-ng (en, es, fr, ja, ko) or pinyin (zh) |
The Hebrew and pinyin phonemizers are opt-in Cargo features (hebrew, pinyin) that no frontend in this repository enables by default, so the prebuilt dengjen-tts-grpc server and the pydengjen wheels do not include them; embedding the Rust crates lets you enable them. The kurmanji feature is on by default in the capi, cli, grpc and python frontends: voices whose espeak voice is ku use the built-in phonemizer instead of eSpeak-ng unless the voice config sets "kurmanji_use_espeak": true. Arabic diacritization (the tashkeel feature) is enabled by default in every frontend this repository publishes.
The documentation lives at https://zirekhq.github.io/dengjen/next/index.html:
- Overview and crate list
- Get started with the gRPC server
- Get started with Python
- Build from source: the workspace build and the eSpeak-ng data directory
- Usage: synthesize from the command line
- Choosing and tuning a model backend
- Streaming synthesis and the gRPC frontend
- Phonemizer language coverage
- Architecture
- Testing
To contribute, see CONTRIBUTING.md.
The Windows SAPI5 voice installer is currently unsigned, so Windows SmartScreen warns when you run it; the SAPI5 voice guide explains how to check its SHA-256 and run it. Signing is tracked in #574. See the code signing policy for what will be signed, who approves it, and the privacy statement.
Licensed under the GNU General Public License v3.0 or later (GPL-3.0-or-later) — see LICENSE. dengjen originated as a fork of Sonata by Musharraf Omer, originally MIT-licensed; see NOTICE for project history and third-party attributions.
If this repository saves you time and effort, please consider supporting it!