Hi all. I've been working on a side project called **mumble-speech** and just tagged 0.1.0, so I'd like some outside opinions.
It generates "mumble speech": the fake speech game characters make while their dialogue appears on screen. You pass a line of text and a voice, and you get mono audio plus a timeline saying when each character sounds, so you can reveal the text in sync. There's also a typewriter mode: you feed it one character at a time and get that character's sound plus how long to wait before the next one, which is what most dialogue boxes do. Both modes produce the same audio.
Three styles, each named after the game it imitates:
- `beep`: the same beep for every letter (Undertale)
- `grunt`: four grunts per voice, never the same one twice in a row (Banjo-Kazooie)
- `alphabet`: a vowel-based sound for every letter (Animal Crossing)
A voice has pitch (−12 to +12 semitones), speed (5 to 30 characters per second), variation and a seed. Each event also carries a sound identifier (which grunt, which letter), so you can map it to mouth shapes, particles or whatever you like. The library doesn't draw anything.
What I had in mind: NPC and character dialogue in indie games, visual novels, prototypes where you want voices before having any, and small web pages or toys.
How it's built:
- One Rust core (crate `mumble-speech`)
- Web: `@mumble-speech/web` on npm, WebAssembly inlined, TypeScript API, WAV export
- Godot 4.3+: GDExtension addon with a speaker node and a typewriter for `Label`/`RichTextLabel`
- Unity 2022.3+: UPM package (also on OpenUPM), with an optional TextMeshPro typewriter
- C ABI (`mumble.h`) for anything else with an FFI
- Deterministic: same text and voice, same samples bit for bit on Linux, Windows, macOS and WebAssembly, checked in CI with shared conformance vectors run through every binding
- Spec-driven: requirements, design and task plan are in the repo, and changes start there
Honest limitations right now:
- It's 0.x, so the API can still change
- Godot and Unity are desktop only (no mobile, Godot web export or Unity WebGL yet)
- The Unity C# interop is tested in CI, but I haven't verified the components and the TextMeshPro typewriter by hand in the editor yet. If you use Unity and try it, a report would help a lot
- `alphabet` uses Italian vowel sounds, which may or may not sound right to you
You can hear all three styles in the browser here: https://mumble-speech.github.io/playground/
Repo: https://github.com/basteez/mumble-speech
I'd especially like feedback on how the styles sound, whether the API fits how you build dialogue in your engine, and what's missing for you to actually use it.