Drop product name; pull samples pending ich-laut (espeak-ng-data) fix
Browse files
README.md
CHANGED
|
@@ -17,27 +17,11 @@ tags:
|
|
| 17 |
# Kokoro German "Martin" — sherpa-onnx package
|
| 18 |
|
| 19 |
The German Kokoro voice **Martin**, repackaged for **[sherpa-onnx](https://github.com/k2-fsa/sherpa-onnx)**
|
| 20 |
-
so it runs as **fully offline, on-device** German text-to-speech.
|
| 21 |
-
**Page Reader** (scan or paste text → read it aloud, entirely on the phone, no network at runtime).
|
| 22 |
|
| 23 |
-
|
| 24 |
-
|
| 25 |
-
|
| 26 |
-
applied (see below).
|
| 27 |
-
|
| 28 |
-
**Introduction**
|
| 29 |
-
|
| 30 |
-
<audio controls src="https://huggingface.co/miro-dietiker/kokoro-de-martin/resolve/main/example-intro.wav"></audio>
|
| 31 |
-
|
| 32 |
-
> „Hallo, ich bin Martin, die deutsche Stimme von Page Reader. Ich lese Ihre Dokumente vor,
|
| 33 |
-
> vollständig offline auf dem Gerät."
|
| 34 |
-
|
| 35 |
-
**Numbers & dates** — expanded to spoken German by the app *before* synthesis:
|
| 36 |
-
|
| 37 |
-
<audio controls src="https://huggingface.co/miro-dietiker/kokoro-de-martin/resolve/main/example-numbers.wav"></audio>
|
| 38 |
-
|
| 39 |
-
> „Am vierundzwanzigsten Juni benötigten rund sechshundertachtzigtausend Menschen humanitäre Hilfe."
|
| 40 |
-
> *(from the raw text „Am 24. Juni … 680 000 Menschen …")*
|
| 41 |
|
| 42 |
## What's in the archive
|
| 43 |
|
|
@@ -46,28 +30,25 @@ applied (see below).
|
|
| 46 |
- `model.onnx` — the Martin ONNX with sherpa-onnx metadata injected (`model_type=kokoro`,
|
| 47 |
`sample_rate=24000`, `style_dim=510,1,256`, `n_speakers=1`, `id2speaker=0->martin`, …)
|
| 48 |
- `voices.bin` — the voice style vector (510×1×256 float32)
|
| 49 |
-
- `tokens.txt` and `espeak-ng-data/`
|
| 50 |
|
| 51 |
## Reading German correctly (the quality layer)
|
| 52 |
|
| 53 |
A good voice is only half the story — the phonemes it's given have to be right. Both Kokoro and
|
| 54 |
Piper phonemize German with **espeak-ng**, so any word espeak's G2P gets wrong is mispronounced by
|
| 55 |
-
*every* espeak-based voice.
|
| 56 |
-
|
| 57 |
-
|
| 58 |
-
|
| 59 |
-
|
| 60 |
-
|
| 61 |
-
|
| 62 |
-
espeak `de_dict`. Word **stress** is corrected from Wiktionary — top-5k error rate **6.8% → 1.6%**.
|
| 63 |
-
English anglicisms/names Germans actually use get Germanized pronunciations too.
|
| 64 |
- **Language-aware text normalization.** Numbers, dates, currency and ordinals are expanded to
|
| 65 |
-
spoken German
|
| 66 |
-
|
| 67 |
-
„vierundzwanzigsten Juni".
|
| 68 |
|
| 69 |
Both are built by reproducible tooling (an espeak-vs-WikiPron audit + a Kokoro-lexicon generator,
|
| 70 |
-
and this repackager) rather than hand-editing
|
| 71 |
|
| 72 |
## Provenance & license
|
| 73 |
|
|
@@ -89,4 +70,4 @@ sherpa-onnx and synthesizes a German clip to confirm it works before publishing.
|
|
| 89 |
|
| 90 |
Extract `kokoro-de-martin.tar.bz2` and point sherpa-onnx's Kokoro config at `model.onnx`,
|
| 91 |
`voices.bin`, `tokens.txt`, and `espeak-ng-data/` with `lang=de` (add the German lexicon for the
|
| 92 |
-
corrected pronunciations
|
|
|
|
| 17 |
# Kokoro German "Martin" — sherpa-onnx package
|
| 18 |
|
| 19 |
The German Kokoro voice **Martin**, repackaged for **[sherpa-onnx](https://github.com/k2-fsa/sherpa-onnx)**
|
| 20 |
+
so it runs as **fully offline, on-device** German text-to-speech.
|
|
|
|
| 21 |
|
| 22 |
+
> **Note:** audio samples are temporarily removed while a phoneme-rendering issue is fixed —
|
| 23 |
+
> the bundled `espeak-ng-data` emits the German ich-laut /ç/ decomposed, so some words
|
| 24 |
+
> (`ich`, `-lich`, `-ig`) don't render cleanly yet. Fix in progress.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 25 |
|
| 26 |
## What's in the archive
|
| 27 |
|
|
|
|
| 30 |
- `model.onnx` — the Martin ONNX with sherpa-onnx metadata injected (`model_type=kokoro`,
|
| 31 |
`sample_rate=24000`, `style_dim=510,1,256`, `n_speakers=1`, `id2speaker=0->martin`, …)
|
| 32 |
- `voices.bin` — the voice style vector (510×1×256 float32)
|
| 33 |
+
- `tokens.txt` and `espeak-ng-data/`
|
| 34 |
|
| 35 |
## Reading German correctly (the quality layer)
|
| 36 |
|
| 37 |
A good voice is only half the story — the phonemes it's given have to be right. Both Kokoro and
|
| 38 |
Piper phonemize German with **espeak-ng**, so any word espeak's G2P gets wrong is mispronounced by
|
| 39 |
+
*every* espeak-based voice. Two reproducible, open pieces sit on top of this voice:
|
| 40 |
+
|
| 41 |
+
- **Pronunciation-correction lexicon.** An audit of espeak-ng against the **WikiPron** (Wiktionary)
|
| 42 |
+
dictionary across ~**49k** German words folds away espeak's *systematic* conventions (which the
|
| 43 |
+
models render correctly) and turns the remaining *word-specific* errors into a sherpa-onnx Kokoro
|
| 44 |
+
lexicon (**2,000+ entries**) plus a corrected espeak `de_dict`. Word **stress** is corrected from
|
| 45 |
+
Wiktionary — top-5k error rate **6.8% → 1.6%**. English anglicisms/names get Germanized too.
|
|
|
|
|
|
|
| 46 |
- **Language-aware text normalization.** Numbers, dates, currency and ordinals are expanded to
|
| 47 |
+
spoken German — e.g. **„680 000" → „sechshundertachtzigtausend"** (not „…achtzig null"),
|
| 48 |
+
„24. Juni" → „vierundzwanzigsten Juni" — surviving OCR line-wraps.
|
|
|
|
| 49 |
|
| 50 |
Both are built by reproducible tooling (an espeak-vs-WikiPron audit + a Kokoro-lexicon generator,
|
| 51 |
+
and this repackager) rather than hand-editing.
|
| 52 |
|
| 53 |
## Provenance & license
|
| 54 |
|
|
|
|
| 70 |
|
| 71 |
Extract `kokoro-de-martin.tar.bz2` and point sherpa-onnx's Kokoro config at `model.onnx`,
|
| 72 |
`voices.bin`, `tokens.txt`, and `espeak-ng-data/` with `lang=de` (add the German lexicon for the
|
| 73 |
+
corrected pronunciations).
|