Give your AI companion a Thai voice

A companion is judged on two things: whether it sounds like someone, and whether it stops when you start talking. Both are text-to-speech problems, and both are solved here.

How this voice sounds

0:04

ค่ำคืนนี้ ปล่อยให้เสียงของฉัน อยู่เป็นเพื่อนคุณจนกว่าจะหลับนะคะ

37 / 50

That is a companion opening a conversation. Change it and hear it again. The box takes up to 50 characters and speaks in 4 voices, two of them the intimate registers this page is about.

Closeness lives in the words#

English companions fake intimacy with delivery, because English has nowhere else to put it. A warmer voice, a slower line, a softer end. Thai does not work that way. Thai puts the relationship into the grammar. Which pronoun the speaker uses for themselves, which one they use for you, and which particle ends the sentence.

That means the register is in the text. An assistant changes how close it sounds by changing what it writes, and a language model already writes the text. No audio parameter is involved, and none is needed. Below is one meaning at four degrees of closeness, in the same voice.

One meaning

Have you had dinner yet? I have been waiting.

  1. 01

    A stranger

    คุณ for you and ดิฉัน for itself. This is a receptionist. Correct, and nobody's companion.

    คุณทานข้าวเย็นแล้วหรือยังคะ ดิฉันรออยู่นะคะ

    you / me
    คุณ / ดิฉัน
    particle
    คะ
  2. 02

    Someone younger

    One word moves: คุณ becomes พี่, and ดิฉัน becomes หนู. The assistant is now the younger of the two, and the sentence is affectionate without being familiar.

    พี่ทานข้าวเย็นแล้วหรือยังคะ หนูรออยู่นะคะ

    you / me
    พี่ / หนู
    particle
    คะ
  3. 03

    A friend

    The pronouns เธอ and เรา drop the distance, and the particle softens to จ๊ะ. Same question, and now it is between equals.

    เธอกินข้าวเย็นแล้วยังจ๊ะ เรารออยู่นะ

    you / me
    เธอ / เรา
    particle
    จ๊ะ
  4. 04

    Closer than that

    The politeness particle is gone. In Thai its absence is the signal, which is why this rung reads as the closest of the four while carrying the fewest words.

    กินข้าวยังอ่ะ เรารอเธออยู่

    you / me
    เธอ / เรา
    particle
    none

Pick the rung your product should sit on, tell the model to write in it, and the voice will read it. Moving a companion from polite to close is an edit to a system prompt. The model underneath never changes.

The four rungs, read aloud

One voice, four registers. The only thing that changes between rows is the writing.

  • A stranger0:02
  • Someone younger0:02
  • A friend0:02
  • Closer than that0:02

8 voices built for close speech#

The roster carries 26 voices. These are the ones designed for someone speaking to one listener, at length: late-night registers, near-whispers, close-mic reads, and the character voices a roleplay cast draws from. A voice id is a stable public identifier. The companion a user met in January still sounds like itself in December.

The line

คืนนี้ไม่ต้องรีบนอนก็ได้ อยู่คุยกันอีกสักหน่อยนะ

One line, every voice. Names link to each voice's own page.

What the person on the other side notices#

None of the four things below are features anyone asks for by name. They are what people mean when they say a companion feels like someone, or that it stopped feeling like one.

It is still the same person in December

Someone met this character in January. Nine months of conversations later, nothing about the voice has shifted. There is no recording to lose and no sample to drift, because a voice here is an id in a catalog: ask for it again and the same person answers. A companion whose voice quietly changes is a companion someone stops trusting, and they usually cannot say why.

It stops the second you start talking

Cutting someone off mid-sentence is ordinary between people. Being talked over by something that will not stop is the moment the whole illusion collapses. Here the line stops where it is and the rest of the reply is thrown away. The person is answering a companion that was listening, and not waiting out a monologue.

It begins before it has finished thinking

A two-second pause followed by a fluent paragraph is the sound of a machine composing. Someone who starts on the first sentence while the rest is still forming is the sound of a person talking. The difference is entirely in when the audio starts, and it reads as attention.

It can be soft at eleven at night

The same sentence lands differently in a near-whisper, in a low late-night register, and in a bright daytime voice. That is a casting decision you make once per character, from a roster built with those hours in mind. It does more for how a companion feels than any setting a user would find in a menu.

The turn, and the interruption#

A voice companion is a loop, and the loop is what makes it feel alive or dead. Speech recognition transcribes the person, a model writes the reply, and speech reads it. The part most implementations get wrong is the fourth step.

  1. 01

    Open one socket for the conversation

    The live endpoint holds one WebSocket for the whole session. Configuration is sent once, and every turn after that is text frames on a connection that is already warm.

  2. 02

    Send each sentence as the model finishes it

    Do not wait for the full reply. Send a sentence the moment the model has written it, and audio starts coming back while the rest is still being written. Thai carries no sentence-ending punctuation. A Thai client flushes at the end of a clause.

  3. 03

    Play the audio as it arrives

    Binary frames carry the audio for the current turn, in delivery order. A charged receipt precedes each turn's audio. The client knows what a turn cost before it hears it.

  4. 04

    Cancel the moment the person speaks

    When the speaker talks over the reply, send a cancel frame. The sentence being spoken stops, the rest of the queued reply is discarded, and the connection stays open for the next turn. Closing the socket would also stop the audio, but it gives up the concurrency slot and costs a full reconnect before the companion can answer.

An interrupted turn keeps the charge for the sentence already synthesized, and the discarded remainder was never charged. Sending one sentence per frame is what bounds that, and it is the same shape that keeps time to first audio low.

Live streaming reference

How fast it needs to be#

Three ways to deliver a companion's speech. Which one is right follows from how the product is shaped.

What a companion costs to speak

ConversationRepliesCharactersCost
One evening202,400$0.04
One active user, one month1,200144,000$2.16
1,000 active users for a month$2,160

At 15 credits per 1,000 characters, over a 120-character reply and 40 replies a day. Speech is billed per character. A quiet user costs less, and a month nobody talks costs nothing.

Questions#

Can the voice sound happy, or sad, or flirtatious?
There is no parameter for it today. The served model has no emotion or style control, and this page does not pretend otherwise. What it has is a cast chosen for register, and a language that carries closeness in its words. The ladder above is the honest answer to this question.
Can I clone a voice, or add my own character?
No. The roster is 26 fixed voices, and a companion casts from it the way a production casts from a roster of actors. For a roleplay app with many characters, that is the current ceiling: 26 distinct voices, each of them stable forever.
How does the companion stop when the user interrupts?
A cancel frame on the live socket. The sentence being spoken stops, the queued remainder is discarded without charge, and the same connection carries the next turn. That is the whole mechanism, and it is documented in the live streaming reference.
Does it read Thai and English in the same sentence?
Yes, in one voice. Thai companions code-switch constantly. A reply that runs Thai into English and back is read as one continuous line, with no hand-off between voices. Text runs up to 5,000 characters per request.
Can I animate a face from the audio?
Yes. Ask for word, sentence, or utterance timing and the response carries spans alongside the audio, which is what an avatar's mouth reads. Timing bills at a higher rate than plain speech.

Free credits, and no card

Sign in and the free grant covers a companion's first few thousand replies. The playground speaks any line in any of the roster's voices before you write a request.