Finetune a multilingual Ghanaian-language TTS base model on a small dataset — 42 languages, clone-and-run.
# Ghana Voice Builder
Finetune a strong multilingual **base TTS model** on a *small* amount of your own Ghanaian-language
speech and get a great-sounding voice — for **any of the 42 supported languages**, one or many at
a time. Clone, point it at your data (a HuggingFace dataset **or** a local folder with a
`metadata.csv`), run a couple of commands, and synthesize.
Built on Matcha-TTS (flow-matching acoustic model),
with a shared phonemizer + per-language conditioning so a single base model covers all languages.
The model code is **vendored** in this repo — no external model dependency to install.
---
## Why finetune instead of train from scratch?
The base model has already learned Ghanaian phonetics, prosody, and 42 language identities from
hundreds of hours of speech. Finetuning adapts it to *your* speaker/dialect/recording conditions
with about ~5 hours of audio per language (recommended minimum) — far less data and compute than
training from zero.
## Supported languages
42 languages (Akuapem/Asante Twi, Fante, Ewe, Dagbani, Hausa, Nzema, Gonja, Kasem, Kusaal, ...).
Run `ghanavoice languages` for the full list. Each has a fixed id used for conditioning.
---
## Quickstart
```bash
git clone
github.com
cd ghana-voice-builder
pip install -e . # installs deps + builds the alignment extension
# 1. Prepare your data (local folder OR HuggingFace dataset)
ghanavoice prepare --input ./my_data --out ./prepped
# or: ghanavoice prepare --hf-dataset myorg/my-twi-speech --out ./prepped
# 2. Finetune the base model on it
ghanavoice train --data ./prepped --out ./my_voice
# 3. Synthesize
ghanavoice synthesize --model ./my_voice/best.ckpt \
--language "Asante Twi" --text "Akwaaba!" --out hello.wav
```
Multiple languages: just include rows for each language in your data — the base model handles
them jointly, and you pick the language at synthesis time with `--language`.
---
## Data format
**Local folder:**
```
my_dat …