Antalia 1: an open Turkish voice, and the listening test it failed
Antalia 1 reads Turkish text aloud in one voice, belonging to a professional voice actor who agreed to let us publish everything: the model, the code, and five hours of her recordings. On our test sentences, a speech recognizer gets roughly 3 characters in 100 wrong when it transcribes the model’s chosen takes back. It also failed the one test we cared about most. This post is about both.
Development is discontinued, and Antalia 1 is not served. The weights, code, voice corpus, evaluation data and paper are public and free to download. It has been succeeded by Alania 1, which is served through the API at speech.patientdesk.ai.
A Turkish voice anyone can download
Turkish is a large language with comparatively few open, high-quality neural text-to-speech voices. We built Antalia 1 at Patientdesk.ai as the one flagship Turkish voice for a conversational product. The product was cancelled, and we stopped developing the model before the fixes we had planned.
Rather than let the work disappear, we published all of it, as it was:
- the model, cloud0day3/antalia-1, and the voice-free base model it grew from, antalia-1-foundation;
- the training, inference and evaluation code on GitHub;
- the five hours of recordings the voice was trained on, antalia-voice-corpus, under CC-BY-4.0;
- the evaluation prompts, antalia-eval;
- a technical report (the web version is here) and a sample site with more than sixty clips.
It speaks Turkish in one voice. It cannot clone other voices from a sample, and nothing about it runs as a service.
Press play
Every clip below is AI-generated; none is a recording of a real person. Each one is the best of eight attempts, picked automatically (more on why below). Under each clip are two scores. Errors is the character error rate: we play the audio to Whisper, a speech recognizer, and count what fraction of the characters it writes down differ from the text. Similarity is an automated score, from 0 to 1, of how close the voice sounds to the actor’s real recordings. Hold on to that second number.
Audio is streamed from the public sample site, where every clip sits next to its raw single-attempt version.
Built only from audio we had the right to use
No training audio was scraped from the web. Antalia learned Turkish in general from two public datasets, Mozilla Common Voice (volunteers reading sentences aloud) and FLEURS: 61,469 clips, 67.55 hours, after filtering. Every candidate clip was transcribed by a speech recognizer and compared with the sentence it was supposed to contain. Mismatches, near-silent clips and clips that were too quiet were dropped, and every rejection was logged with its reason.
Then it learned one voice. A professional Turkish voice actor recorded scripts written for the project, machine-generated and free of personal data, in the same studio with the same microphone at every session. She is credited anonymously at her request. She signed an addendum permitting public redistribution of the recordings themselves, not only of the model weights, which is why her 5.008 hours are published too. She consented to redistribution of the weights and her recordings, not to derivative datasets of her voice presented as recordings of a real person.
We did look for a shortcut. Public-domain Turkish audiobooks and government broadcasts would have been legally clean. A short pilot found nothing usable: an archive search for Turkish LibriVox audiobooks returned 0 items, and the Voice of America Turkish feed we could reach held 1.63 hours of multi-speaker field reporting, noisier than our training audio. Paid, consented recording sessions were the only path that worked.
How it works, in one paragraph
Antalia is a flow-matching model with about 300 million parameters. It starts from random noise shaped like a spectrogram (a picture of sound: frequency against time) and, over 32 small steps, pushes that noise toward the spectrogram of the sentence, guided by the text. A separate, freely available network from NVIDIA, BigVGAN, turns the spectrogram into 24 kHz audio. The model reads letters rather than phonetic symbols, after a rule-based step that writes numbers, dates and abbreviations out as words: saat 09:07’de becomes saat dokuz sıfır yedi’de (“at 09:07” becomes “at nine zero seven”).
The number that said yes, and the person who said no
Voice projects usually check identity with a speaker-verification model: it turns each clip into a numerical fingerprint and measures how close two fingerprints are. Ours used a model called WavLM. On the released Antalia 1, synthetic clips score 0.93 to 0.94 against the actor’s real recordings. By that number, the voice is hers.
We did not stop at the number. On 9 August 2026 we ran a blind listening session with a native Turkish speaker who knows the actor’s voice: the project owner. Twelve times, the listener heard a synthetic clip next to a real recording of her, saying different sentences, and was asked whether both were the same person. The answer was no, twelve times out of twelve. For that same audio, the automated score sat between 0.91 and 0.94 throughout.
The listener could say what was wrong: apart from the tone of the voice, everything sounded like the same person. A spectrum measurement confirmed it. The synthetic voice carries 4 dB too much energy between 4.7 and 6.8 kHz, the “presence” band, plus a tilt around the formants, the resonances that shape vowels. The vocoder rebuilds real recordings to within 0.4 dB, so the fault was in our model, not in the step that makes the audio.
So we built a ruler for exactly that fault: a simple measure of spectral shape across 11 frequency bands. On the test pack, real recordings scored 0.47 to 0.98 and synthetic ones 1.42 to 3.26, with no overlap, which is the listener’s verdict reproduced by a measurement. We used it in two ways: to choose among the eight takes, and as the target for a final small training stage (3.2 million extra parameters added to the frozen model). Together they moved the average from 2.585 to 1.997.
The honest summary is that Antalia 1 sounds like someone who sounds a lot like her, not like her. We did not close that gap before we stopped.
An automated similarity score is a good way to choose between two takes, and a poor way to certify a voice.
If identity matters in your project, put people who know the voice in front of it early, and more than one of them.
Where it stumbles
Numbers, codes and foreign words
These are the hardest categories. Each generation starts from different random noise, and the result varies a lot from attempt to attempt: on the same sentence, the error rate can land anywhere from 0 to 0.17. So the release recipe makes eight attempts per sentence and keeps the one that scores best on a mix of errors, similarity and tone. That is how a single-attempt error rate of 0.053 becomes 0.030. Because the eight attempts run as one batch, they take about 1.5 times as long as a single attempt, plus the time to score each one.
That second example points at a lesson we learned the hard way. At one point the numbers category looked disastrous, at 41.5% character error. Whisper writes spoken numbers as digits, while our reference text had them as words. Once the scorer spelled out digits the way Turkish speaks them, the same audio measured about 2.7%. We had nearly launched a training run to fix what turned out to be a bug in the measurement.
Long passages
The model predicts the length of the whole input as a single number, and on long text it guesses short: 0.0635 seconds per character, against 0.083 in the actor’s natural speech, about 35% too fast. The result is rushed, smeared speech. The fix is to split text at commas and full stops into pieces of up to 120 characters, read each piece separately, and join them with a short pause. Listen to the same 370-character passage both ways:
With the splitting and a minimum time per character, the word error rate on long passages fell from 36.6% to 10.7% in our measurements. Without it, the model mumbles.
What the listener liked and did not
The same listening session scored each category on a scale from −3 to +3. Emotional and everyday sentences did best (+2.0 each). Numbers (−2.0) and text heavy with abbreviations and codes (−2.5) did worst. The model was not promoted to be the product’s voice.
Everything else is in the list you would expect: Turkish only, one voice, 24 kHz audio. No check was run for whether the model memorized its training recordings, and the audio carries no watermark.
Why release a model that failed its own test
Because the parts around the voice are reusable, and they are rare in open Turkish speech. Every training clip can be traced to its source and to the filter decision that let it in. The actor’s consent covers open release. The release format puts the audio settings, text rules, vocabularies, vocoder version and provenance in one config file.
For many uses, the five-hour corpus is worth more than the model: fine-tuning a different architecture on the same voice, Turkish speech recognition on read speech, or research on how numbers, read-backs and foreign terms are spoken. It is studio-quality, single-speaker, and every clip passed the full quality gate.
And the failure itself is useful to anyone about to trust a similarity score. The two lessons we would pass on are simple. Sign the consent for redistribution before anyone records a word, not after. And measure identity with people who know the voice.
Run it yourself
You need Python 3.12 and ideally a CUDA GPU (CPU works slowly). The vocoder is downloaded separately from NVIDIA; the repository README has the three setup lines. Then:
# after: git clone https://github.com/0daycloud/antalia && cd antalia && uv sync
python scripts/synthesize-crossflow.py \
--checkpoint cloud0day3/antalia-1 \
--vocoder nvidia/bigvgan_v2_24khz_100band_256x \
--speaker voicedata-candidate-b \
--prosody-presets prosody-presets.json --preset warm_voice_agent \
--text-guidance 4.0 --sway -0.8 --steps 32 --mel-clamp 5.0 \
--min-seconds-per-char 0.085 --chunk-chars 120 \
--text "Merhaba, ben Antalia." --output out.wav
It is meant for research on Turkish speech synthesis, prototypes that clearly disclose the voice is AI, and study of the failure modes above. It is not meant for anything where a listener could believe a real person is speaking. The weights are licensed under Antalia OpenRAIL-M: no impersonation, fraud, deception or political robocalls, generated audio must be disclosed as synthetic, and anything that uses or redistributes the model must credit “Antalia 1” by Sezgin Saygili, Emre Kaplaner, Oncel Ozgul and Fikri San Koktas (Patientdesk.ai), with a link to the model or code repository. The code is Apache-2.0.
Need a Turkish voice you can call today? Antalia 1 has been succeeded by Alania 1, which is served through the API at speech.patientdesk.ai. Questions about Antalia go to GitHub issues; there is no roadmap and no support commitment.