voicetut-egyptian-tashkeel
VoiceTut-TTS (OmniVoice 0.6B, Egyptian Arabic) fine-tuned on Rabe3/egyptian-arabic-tts-diacritized: 17,546 Egyptian Arabic clips (58.6 hours, 9 speakers) whose text carries short vowels (tashkeel) on about half of the words. Write the vowels in the text and the model reads them. The voice prompt was kept in training, so VoiceTut's 19 built-in voices and cloning from a reference clip still work.
Listen
The sentences are the ones on the card of the emotion model. The vowels in the table were written by hand (every word). Plain text without vowels works as before.
Morning with coffee (voice: Ahmed)
| # | Text (with vowels) | VoiceTut-TTS, no vowels | This model, no vowels | This model, vowels on every word | This model, vowels on every other word |
|---|---|---|---|---|---|
| 1 | ุตูุจูุงุญู ุงููุฎููุฑูุ ุงููุง ููุณูููู ู ูุดู ููุงุฏูุฑู ุงููุชูุญู ุนูููููู. | ุตูุจูุงุญู ุงููุฎููุฑูุ ุงููุง ููุณูููู ู ูุดู ููุงุฏูุฑู ุงููุชูุญู ุนูููููู. |
ุตูุจูุงุญู ุงูุฎูุฑุ ุงููุง ูุณู ู ูุดู ูุงุฏุฑ ุงููุชูุญู ุนููู. |
||
| 2 | ุงููุ ุฑููุญูุฉู ุงููููููููุฉู ุฏูู ุจูุชูุตูุญููู ุงููููุงุญูุฏู. | ุงููุ ุฑููุญูุฉู ุงููููููููุฉู ุฏูู ุจูุชูุตูุญููู ุงููููุงุญูุฏู. |
ุงููุ ุฑูุญุฉ ุงููููููููุฉู ุฏู ุจูุชูุตูุญููู ุงููุงุญุฏ. |
||
| 3 | ุงููููู ุฑูุดูููุฉู ููุฏููู ููุงูุฏููููููุง ุงุชูุญูุณููููุชู ุฎูุงููุตู. | ุงููููู ุฑูุดูููุฉู ููุฏููู ููุงูุฏููููููุง ุงุชูุญูุณููููุชู ุฎูุงููุตู. |
ุงููููู ุฑุดูุฉ ููุฏููู ูุงูุฏููุง ุงุชูุญูุณููููุชู ุฎุงูุต. |
||
| 4 | ุงุณูุชููููู! ููููู ุงูุณููุงุนูุฉู ุจูููุชู ุชูุณูุนูุฉูุ | ุงุณูุชููููู! ููููู ุงูุณููุงุนูุฉู ุจูููุชู ุชูุณูุนูุฉูุ |
ุงุณูุชููููู! ูู ุงูุณููุงุนูุฉู ุจูุช ุชูุณูุนูุฉูุ |
||
| 5 | ููุง ููููุงุฑู ุงุจูููุถูุ ุงูุงุฌูุชูู ูุงุนู ุจูุนูุฏู ููุตู ุณูุงุนูุฉูุ ููุงุฒูู ู ุงุฌูุฑูู. | ููุง ููููุงุฑู ุงุจูููุถูุ ุงูุงุฌูุชูู ูุงุนู ุจูุนูุฏู ููุตู ุณูุงุนูุฉูุ ููุงุฒูู ู ุงุฌูุฑูู. |
ููุง ููุงุฑ ุงุจูููุถูุ ุงูุงุฌุชู ุงุน ุจูุนูุฏู ูุต ุณูุงุนูุฉูุ ูุงุฒู ุงุฌูุฑูู. |
Shopping with friends (voice: Mahmoud)
| # | Text (with vowels) | VoiceTut-TTS, no vowels | This model, no vowels | This model, vowels on every word | This model, vowels on every other word |
|---|---|---|---|---|---|
| 1 | ูููููุง ููุง ุฌูู ูุงุนูุฉูุ ุงููููููุงุฑูุฏููู ููููููููุจู ุงููู ูููู ููููููู! | ูููููุง ููุง ุฌูู ูุงุนูุฉูุ ุงููููููุงุฑูุฏููู ููููููููุจู ุงููู ูููู ููููููู! |
ูููููุง ูุง ุฌูู ูุงุนูุฉูุ ุงูููุงุฑุฏู ููููููููุจู ุงูู ูู ููููููู! |
||
| 2 | ุฏูู ุงููุฌูุงูููุชู ุงููููู ููููุชูู ุจูุชูุญููููู ูู ุจููููุงุ ุฌูุฑููุจููููุง ุจูุณูุฑูุนูุฉู. | ุฏูู ุงููุฌูุงูููุชู ุงููููู ููููุชูู ุจูุชูุญููููู ูู ุจููููุงุ ุฌูุฑููุจููููุง ุจูุณูุฑูุนูุฉู. |
ุฏูู ุงูุฌุงููุช ุงููููู ููุชู ุจูุชูุญููููู ูู ุจููุงุ ุฌูุฑููุจููููุง ุจุณุฑุนุฉ. |
||
| 3 | ุงููู ุฏูููุ ุณูุนูุฑูููุง ุชูููุงุชู ุชูููุงูู ุฌููููููุ | ุงููู ุฏูููุ ุณูุนูุฑูููุง ุชูููุงุชู ุชูููุงูู ุฌููููููุ |
ุงููู ุฏูุ ุณูุนูุฑูููุง ุชูุงุช ุชูููุงูู ุฌูููุ |
||
| 4 | ููุง ุทูุจูุนูุงุ ุฏููู ุงููุง ู ูู ููููู ุงุดูุชูุฑูู ุจูููู ุนูุฑูุจููููุฉู. | ููุง ุทูุจูุนูุงุ ุฏููู ุงููุง ู ูู ููููู ุงุดูุชูุฑูู ุจูููู ุนูุฑูุจููููุฉู. |
ููุง ุทุจุนุงุ ุฏููู ุงูุง ู ูู ููููู ุงุดุชุฑู ุจูููู ุนุฑุจูุฉ. |
||
| 5 | ู ูุจูุณููุทูุฉู ุงููู ุงูููุง ุฎูุฑูุฌูููุง ุณูููุงุ ููุญูุดูุชููููู. | ู ูุจูุณููุทูุฉู ุงููู ุงูููุง ุฎูุฑูุฌูููุง ุณูููุงุ ููุญูุดูุชููููู. |
ู ูุจูุณููุทูุฉู ุงูู ุงูููุง ุฎุฑุฌูุง ุณูููุงุ ูุญุดุชููู. |
Joking with friends (voice: Tareq)
| # | Text (with vowels) | VoiceTut-TTS, no vowels | This model, no vowels | This model, vowels on every word | This model, vowels on every other word |
|---|---|---|---|---|---|
| 1 | ููุง ุนูู ู ุงููุชู ูููู ู ูุฑููุฉู ุชูููููู ููุนูู ููู ุฏูุงููุชู ููุชูุฎููููุตู ุทูุจููู ุงููููุดูุฑูู ููููุญูุฏููู. | ููุง ุนูู ู ุงููุชู ูููู ู ูุฑููุฉู ุชูููููู ููุนูู ููู ุฏูุงููุชู ููุชูุฎููููุตู ุทูุจููู ุงููููุดูุฑูู ููููุญูุฏููู. |
ููุง ุนู ุงููุชู ูู ู ูุฑููุฉู ุชููู ููุนูู ููู ุฏุงูุช ููุชูุฎููููุตู ุทุจู ุงููููุดูุฑูู ููุญุฏู. |
||
| 2 | ุงูู ุทูุจูุนูุงุ ุงููุชู ุงููููู ููุชูููุณูุจู ุงููู ูุงุชูุดูุ ุฏููู ุงููุชู ุจูุชููููููุฌู ู ููู ุงูุณูููููู ู. | ุงูู ุทูุจูุนูุงุ ุงููุชู ุงููููู ููุชูููุณูุจู ุงููู ูุงุชูุดูุ ุฏููู ุงููุชู ุจูุชููููููุฌู ู ููู ุงูุณูููููู ู. |
ุงูู ุทุจุนุงุ ุงููุชู ุงููู ููุชูููุณูุจู ุงูู ุงุชุดุ ุฏููู ุงูุช ุจูุชููููููุฌู ู ู ุงูุณูููููู ู. |
||
| 3 | ุงุณูุชูููููุง ุงุณูุชูููููุงุ ููุณูููู ุงููุญูุชููุฉู ุงููุญูููููุฉู ููู ุงููุญูููุงููุฉู ุฌูุงููุฉู! | ุงุณูุชูููููุง ุงุณูุชูููููุงุ ููุณูููู ุงููุญูุชููุฉู ุงููุญูููููุฉู ููู ุงููุญูููุงููุฉู ุฌูุงููุฉู! |
ุงุณูุชูููููุง ุงุณุชููุงุ ููุณูููู ุงูุญุชุฉ ุงููุญูููููุฉู ูู ุงููุญูููุงููุฉู ุฌุงูุฉ! |
||
| 4 | ุฎูููุงุตู ููุงูููู ุถูุญููููุชูููููุ ุจูุทูููู ููุฌูุนูุชูููู ู ููู ุงูุถููุญููู. | ุฎูููุงุตู ููุงูููู ุถูุญููููุชูููููุ ุจูุทูููู ููุฌูุนูุชูููู ู ููู ุงูุถููุญููู. |
ุฎูููุงุตู ูุงููู ุถูุญููููุชูููููุ ุจุทูู ููุฌูุนูุชูููู ู ู ุงูุถููุญููู. |
||
| 5 | ููุง ุฌูู ูุงุนูุฉู ุฑููููุฒููุง ุจููููุ ุงูุงูููู ููููุจูุฑูุฏู! | ููุง ุฌูู ูุงุนูุฉู ุฑููููุฒููุง ุจููููุ ุงูุงูููู ููููุจูุฑูุฏู! |
ููุง ุฌู ุงุนุฉ ุฑููููุฒููุง ุจููุ ุงูุงูููู ููุจุฑุฏ! |
Remembering someone who passed (voice: Mariam)
| # | Text (with vowels) | VoiceTut-TTS, no vowels | This model, no vowels | This model, vowels on every word | This model, vowels on every other word |
|---|---|---|---|---|---|
| 1 | ุงูููู ููุฑูุญูู ูููุงุ ููุงููุชู ุงุทูููุจู ููุงุญูุฏูุฉู ููู ุงููุนููููุฉู ูููููููุง. | ุงูููู ููุฑูุญูู ูููุงุ ููุงููุชู ุงุทูููุจู ููุงุญูุฏูุฉู ููู ุงููุนููููุฉู ูููููููุง. |
ุงูููู ูุฑุญู ูุงุ ููุงููุชู ุงุทูุจ ููุงุญูุฏูุฉู ูู ุงููุนููููุฉู ูููุง. |
||
| 2 | ููุงููุฑูููู ููู ููุง ููุงููุชู ุจูุชูุณูุชููููุงููุง ุนูููู ุงููุจูุงุจู ูููู ุฌูู ูุนูุฉูุ | ููุงููุฑูููู ููู ููุง ููุงููุชู ุจูุชูุณูุชููููุงููุง ุนูููู ุงููุจูุงุจู ูููู ุฌูู ูุนูุฉูุ |
ููุงููุฑูููู ูู ุง ููุงููุชู ุจุชุณุชูุงูุง ุนูููู ุงูุจุงุจ ูููู ุฌู ุนุฉุ |
||
| 3 | ู ูููููุชูุดู ู ูุชูุฎูููููู ุงูู ุงููุจููุชู ููููุจูููู ููุงุถูู ููุฏููู ู ููู ุบูููุฑูููุง. | ู ูููููุชูุดู ู ูุชูุฎูููููู ุงูู ุงููุจููุชู ููููุจูููู ููุงุถูู ููุฏููู ู ููู ุบูููุฑูููุง. |
ู ูููููุชูุดู ู ุชุฎูู ุงูู ุงูุจูุช ููููุจูููู ูุงุถู ููุฏููู ู ู ุบูููุฑูููุง. |
||
| 4 | ุงุฏูุนููููููุง ููุชููุฑูุ ููููู ู ูุญูุชูุงุฌูุฉู ุฏูุนูุงููุง ุฏูููููููุชูู. | ุงุฏูุนููููููุง ููุชููุฑูุ ููููู ู ูุญูุชูุงุฌูุฉู ุฏูุนูุงููุง ุฏูููููููุชูู. |
ุงุฏูุนููููููุง ูุชูุฑุ ููููู ู ุญุชุงุฌุฉ ุฏูุนูุงููุง ุฏูููุชู. |
||
| 5 | ุฑูุจููููุง ููุตูุจููุฑูููุง ูููุฌูู ููุนูููุง ุจููููุง ููู ุงููุฌููููุฉู. | ุฑูุจููููุง ููุตูุจููุฑูููุง ูููุฌูู ููุนูููุง ุจููููุง ููู ุงููุฌููููุฉู. |
ุฑูุจููููุง ูุตุจุฑูุง ูููุฌูู ููุนูููุง ุจููุง ููู ุงูุฌูุฉ. |
Usage
Install OmniVoice from github.com/k2-fsa/OmniVoice, then:
import json, torch, soundfile as sf
from huggingface_hub import snapshot_download
from omnivoice import OmniVoice
refs = snapshot_download("mohammedaly22/VoiceTut-TTS", allow_patterns=["reference_speakers/*"])
voice = json.load(open(f"{refs}/reference_speakers/references.json", encoding="utf-8"))[0] # any of the 19 built-in voices, or your own clip and its transcript
model = OmniVoice.from_pretrained("masterofaudio2077/voicetut-egyptian-tashkeel", device_map="cuda:0", dtype=torch.float16)
text = "ุตูุจูุงุญู ุงููุฎููุฑูุ ุงููุง ููุณูููู ู
ูุดู ููุงุฏูุฑู ุงููุชูุญู ุนูููููู." # vowels on some or all words
audio = model.generate(text=text, language="arz", ref_audio=f"{refs}/{voice['audio_path']}", ref_text=voice["reference_text"])[0]
sf.write("out.wav", audio, 24000)
Vowels can be added to any text with a diacritizer. The training text had vowels on about half of the words (median 0.52), so partly voweled text is the case this model was trained for.
Results
24 held-out sentences read with the 19 built-in voices in turn, plus 20 pairs of words with the same consonants and different vowels (two voices), scored on the output audio.
| VoiceTut-TTS | This model | |
|---|---|---|
| Character error rate (Whisper large-v3, vowels ignored) | 0.046 | 0.045 |
| Diacritic error rate vs the marks in the input | 0.062 | 0.080 |
| Same, without word-final marks | 0.041 | 0.069 |
| Word pairs where the heard vowels match the input | 0.84 | 0.55 |
| Speaker similarity to the voice's reference clip (WavLM) | 0.944 | 0.836 |
| Lines where the model returned no audio | 0 | 9 |
The "heard" vowels come from Cohere-Speech-Tashkeel-2B, which has its own error (6.6% DER on its test set), so the rates are relative, not absolute.
Training
Full fine-tune of VoiceTut-TTS, 13500 steps on 2x T4, Lion optimizer (lr 3e-6, weight decay 0.03), fp16. This is step 10000.
17,546 clips, 58.6 h, text column
text_merged; 396 clips held out (their sentences removed from training). Hours per speaker:lahgtna_eg_spk00000: 6.6 hlahgtna_eg_spk00001: 6.5 hlahgtna_eg_spk00002: 6.5 hlahgtna_eg_spk00003: 6.5 hlahgtna_eg_spk00004: 6.5 hlahgtna_eg_spk00005: 6.5 hlahgtna_eg_spk00006: 6.5 hmasri_3shwa: 6.5 hmasri_7akawi: 6.5 hOmniVoice's stock voice prompt (first 0-30% of a clip) and mask ratio 0-1; no instruction text.
Limitations
- The vowels in the training text are machine-made (Cohere-Speech-Tashkeel-2B) and cover about half of the words; the model learned that labelling, including its mistakes.
lahgtnaclips are 16 kHz upsampled to 24 kHz;masriis natively 24 kHz.- Few speakers (the training data has 9); the other voices come from VoiceTut's own training.
- Not for impersonating a real person or deceiving listeners.
Acknowledgements
VoiceTut-TTS, OmniVoice by k2-fsa, the Higgs audio tokenizer v2, Rabe3/egyptian-arabic-tts-diacritized and its upstream sources, and Cohere-Speech-Tashkeel-2B.