Thai TTS spike: same lines, every engine

Spike 001 for the platform's shared voice capability (brief §3.6, decision 26). Run on this machine (RTX 3070 8 GB, 32 GB RAM), 2026-11-04. RTF = generation time ÷ audio length (below 1 is faster than realtime); the first line of each local engine includes model loading. CER = character error rate when Typhoon's Thai Whisper transcribes the audio (an “ear-to-text” check, not a naturalness score: listen too). Line 3's CER is high for every engine because the transcriber writes “Problem Statement” in Thai letters. The Azure columns use edge-tts, the free endpoint behind Edge's read-aloud: fine for this demo, not for production (production = paid Azure AI Speech, same voices). For the team: no realtime needed here; fixed lines are made once per template version and cached, so GPU or cloud generation time is what matters.

LineF5-TTS-THAI v1KhanomTan v1.1 (YourTTS)Qwen3-TTS 1.7B CustomVoiceCosyVoice 2 0.5B (zero-shot)Azure neural th-TH Niwat (via edge-tts)Azure neural th-TH Premwadee (via edge-tts)Meta MMS-TTS ThaiElevenLabs eleven_v3 (prototype voice)
1. ขออนุญาตแนะนำหน้าตาและเครื่องมือของบอร์ดนี้ครับ
gen 31.53 s · RTF 8.01
CER 0.0 · heard: ขออนุญาตแนะนำหน้าตาและเครื่องมือของบอร์ดนี้ครับ
gen 10.85 s · RTF 2.96
CER 0.085 · heard: พร้อมอนุญาตแนะนำหน้าตาและเครื่องมือของบอร์ดนี้ครับ
gen 85.72 s · RTF 26.79
CER 0.0 · heard: ขออนุญาตแนะนำหน้าตาและเครื่องมือของบอร์ดนี้ครับ
gen 53.45 s · RTF 4.15
CER 1.34 · heard: สัมผัสเช่ไหม ไอ้มีชัวร์ ป่าที่มาเที่ยวบ่าย ผ่ายผ่าที่มาเที่ยว อือ อือ อือ
gen 1.23 s · RTF 0.35
CER 0.0 · heard: ขออนุญาตแนะนำหน้าตาและเครื่องมือของบอร์ดนี้ครับ
No audio
NoAudioReceived: No audio was received. Please verify that your parameters are correct.
gen 33.85 s · RTF 7.53
CER 0.043 · heard: ขออนุญาตแนะหน้าตาและเครื่องมือของบอร์ดนี้ครับ
Its own sentence: ขออนุญาตแนะนำหน้าตาและเครื่องมือที่เกี่ยวข้อง เพื่อความลื่นไหลในการทำกิจกรรมนะครับ ส่วนที่ผมพูดถึงจะสว่างอยู่ ถ้าอยากดูจุดไหนอีกครั้ง กดที่ข้อความนั้นได้เลยครับ
9.95 s (pre-made)
CER 0.0 · heard: ขออนุญาตแนะนำหน้าตาและเครื่องมือที่เกี่ยวข้องเพื่อความลื่นไหลในการทำกิจกรรมนะครับส่วนที่ผมพูดถึงจะสว่างอยู่ถ้าอยากดูจุดไหนอีกครั้งกดที่ข้อความนั้นได้เลยครับ
2. สวัสดีครับ คุณสมชาย ยินดีต้อนรับเข้าสู่การประชุม
gen 1.18 s · RTF 0.3
CER 0.0 · heard: สวัสดีครับคุณสมชายยินดีต้อนรับเข้าสู่การประชุม
gen 0.09 s · RTF 0.02
CER 0.022 · heard: สวัสดีครับคุณสมชัยยินดีต้อนรับเข้าสู่การประชุม
gen 11.54 s · RTF 2.12
CER 0.087 · heard: อ่าสวัสดีครับคุณนสมชายยินดีต้อนรับเข้าสู่การประชุม
gen 4.79 s · RTF 0.75
CER 0.913 · heard: ขี้โพวา ขี้โพไอดี ขี้เยา เคอร์เจ โชว์ไวโย
gen 1.63 s · RTF 0.41
CER 0.065 · heard: สวัสดีครับคุณอสงชัยยินดีต้อนรับเข้าสู่การประชุม
gen 0.62 s · RTF 0.14
CER 0.022 · heard: สวัสดีครับคุณอสมชายยินดีต้อนรับเข้าสู่การประชุม
gen 0.12 s · RTF 0.03
CER 0.0 · heard: สวัสดีครับคุณสมชายยินดีต้อนรับเข้าสู่การประชุม
—
3. หยิบการ์ดใบที่สองขึ้นมา แล้วช่วยกันเขียน Problem Statement ในกล่องกลางบอร์ดครับ
gen 1.31 s · RTF 0.23
CER 0.213 · heard: หยิบการ์ดใบที่สองขึ้นมา แล้วช่วยกันเขียน ผอบลม สเตทเมนต์ ในกล่องกลางบอร์ดครับ
gen 0.09 s · RTF 0.02
CER 0.467 · heard: อีการ์ดใบที่สองครึ่งนาเดลช่วยแจ้งเสียงโทบลุงสตาร์ทมองในกล่องกลางบอร์ดครับ
gen 13.95 s · RTF 2.13
CER 0.213 · heard: หยิบการ์ดใบที่สองขึ้นมาแล้วช่วยกันเขียนโปรแบมสเต็ดเมนต์ในกล่องกลางบอร์ดครับ
gen 10.19 s · RTF 1.18
CER 0.787 · heard: ไอพรายที่ยังคมพลอยเดียน ไฮพรายทินทำไมพรา คมพลอย พราพราย
gen 1.2 s · RTF 0.22
CER 0.213 · heard: หยิบการ์ดใบที่สองขึ้นมาแล้ว ช่วยกันเขียนประเภทสเตทเมนต์ในกล่องกลางบอร์ดครับ
gen 0.56 s · RTF 0.11
CER 0.24 · heard: หยิบกาดใบที่สองขึ้นมาแล้ว ช่วยกันเขียนประเมินสเตทเมนต์ในกล่องกลางบอร์ดครับ
gen 0.29 s · RTF 0.06
CER 0.267 · heard: หยิบกาดใบที่สองขึ้นมาแล้วช่วยกันเฉียนและในกล้องกลางบอร์ดครับ
Its own sentence: บางบอร์ดจะมีการ์ดตัวช่วยอยู่ที่แถบเครื่องมือนี้ เป็นคำถามที่ช่วยให้คิดได้กว้างหรือลึกขึ้น ถ้าบอร์ดไหนไม่มี ผมจะบอกตอนเข้าบอร์ดครับ
7.81 s (pre-made)
CER 0.039 · heard: บอร์ดจะมีการ์ดตัวชั่วอยู่ที่แถบเครื่องมือนี้เป็นคำถามที่ช่วยให้คิดได้กว้างหรือลึกขึ้นถ้าบอร์ดไหนไม่มีผมจะบอกตอนเข้าบอร์ดครับ

Engines

EngineRunsLicenceCostVoice cloningOn a CPU (i5-13500, no GPU)Notes
F5-TTS-THAI v1Local GPUWeights tagged CC-BY-4.0, but fine-tuned from F5-TTS base whose weights are CC-BY-NC (Emilia data): commercial use unclearFree (our GPU)Yes, from a ~4 s sample6–9 min per line (93–97×), load 8 sVery accurate Thai. Voice = the repo's sample speaker (cloned).
KhanomTan v1.1 (YourTTS)Local GPU or CPUApache-2.0FreeYes (YourTTS speaker embedding), 4 built-in speakers1.3–2.6 s per line (0.36–0.46×), load 20 sThe only commercial-clean engine that runs faster than realtime on a CPU. Small model, voice quality below F5-class; misread line 3 (CER 0.47) and สมชาย → สมชัย.
Qwen3-TTS 1.7B CustomVoiceLocal GPUApache-2.0Free (our GPU)Yes (Base model), plus voice design30–53 s per line (6.8–8.3×), load 22 sThai is NOT in its 10 official languages (run with language=Auto), yet it is intelligible. English-speaker voice: listen for accent. Slower than realtime on an RTX 3070.
CosyVoice 2 0.5B (zero-shot)Local GPUApache-2.0Free (our GPU)Yes, zero-shotNot measured (blocked on this machine)Does NOT speak Thai: gibberish on every line (CER 0.79–1.34). Thai is not an official language. A community Thai checkpoint exists (isabeth/SE-Bridge-TTS, licence “other”, unverified): not tried.
Azure neural th-TH Niwat (via edge-tts)Cloudedge-tts uses Edge's free read-aloud endpoint: fine for this demo, NOT for production. Production = Azure AI Speech, same voices, paidAzure per-character pricingNo (Azure custom voice is gated)Generated in Microsoft's cloud, not on our CPU (~0.6–1.6 s per line incl. network)Natural, fast. Shows the quality of Azure's Thai voices.
Azure neural th-TH Premwadee (via edge-tts)CloudAs aboveAs aboveNoAs aboveReturned no audio for line 1 on every try (a male-polite “ครับ” line?); read การ์ด as กาด.
Meta MMS-TTS ThaiLocal GPU or CPUCC-BY-NC-4.0: NOT for commercial useFreeNo (one voice)0.7–1.0 s per line (0.14–0.20×), load 8 sVery fast, robotic. Read การ์ด as กาด. Reference only.
ElevenLabs eleven_v3 (prototype voice)CloudCommercial API~US$0.08 / 1k chars (prototype estimate)YesCloudNot run on these lines: no key in aa-platform/.env. These are the prototype's own pre-made files (same voice and model, its own sentences). Line 3 is already respelled ก๊าด.

Looked at, not run