- Your brand already has a voice, such as the person in your ads or the support lead your customers know by name.
- You need an accent the catalogue doesn’t have, such as Australian English.
- You want a voice that is at home in your languages: Gujarati, Tamil, Telugu, or the Hindi and English mix your customers actually speak.
Who can request one, and what it costs
Any workspace can send a request, from the console or the API. In the console, sign in with your work email first; the page stays locked while you’re only looking around. A workspace can have five requests open at a time. Requests that are ready or not accepted don’t count towards that. Custom voices come with a volume commitment on our Enterprise plan. See Billing & tiers. Sending a request doesn’t charge your wallet: our team gets in touch to agree pricing with you before training starts.Before you record
We build the voice from these recordings, so how they sound is how your agent will sound.The speaker
- One speaker only. Every file must be the same person. If someone else talks during a session, for example to prompt the speaker with questions, cut them out before you upload.
- Speak the way the agent should sound on calls: conversational, at a natural pace, as if talking to a customer. A script read in a newsreader voice gets you a newsreader.
- Use the languages, and the mix, you want the voice to speak. If the speaker talks to customers in Hinglish, record Hinglish.
The room and the microphone
- Record in a quiet room.
- Use the same microphone, at the same distance from the speaker, for every session.
- Send the audio as it was recorded: no music, no voices in the background, no heavy noise reduction and no effects. Trimming silences and false starts is fine.
How much, and in what format
- Record 30 minutes at least and 2 hours at most. We add up the length of all your recordings, and a request can’t be sent with less than 30 minutes or more than 2 hours. Trim long silences, so that the 30 minutes is the speaker talking.
- Split long sessions into several files if you like. Each file can be up to 1 GB, with 3 GB in total.
- WAV or FLAC at 44.1 kHz or higher is best. MP3 at 192 kbps or better is fine. We also accept M4A, AAC, MP4, OGG, Opus and WebM.
Consent
We only build a voice with the speaker’s permission, and every request carries it twice. First, whoever sends the request confirms that the speaker has agreed, in writing, to us building a voice from their recordings. You give your name and your relationship to the speaker: yourself, an employee, a contractor or someone else. Keep the written agreement where you can find it. Second, the speaker records a short consent statement in their own voice. The console shows the sentence to read and can record it in your browser, or you can upload a recording of them reading it. The sentence is:My name is speaker’s name. I agree to Mirai creating a synthetic version of my voice for your company. Today is today’s date.The speaker can withdraw consent at any time. Delete the request, whatever its status, and we delete its recordings and its consent clip. If we’ve already built the voice, we take it down too. We keep the request’s details, without any audio, in our records for audit. A voice is personal data. Make sure your agreement with the speaker says how the voice will be used on your calls.
Request a voice in the console
1
Start a request
Open Custom voices in the sidebar, under Workspace, and click
Request a voice clone.
2
Tell us about the voice
Give the voice a name of up to 60 characters; this is how it appears in
your list. Add the speaker’s name and the languages the voice should speak:
Hindi, English, Gujarati, Tamil or Telugu. Gender, accent (such as
Australian English) and notes for our team are optional.
3
Confirm consent
Tick the consent statement, and add your name and your relationship to the
speaker. Then have the speaker read the consent sentence, recorded in the
browser or uploaded as a file.
4
Upload the recordings
Add the recording files. You need between 30 minutes and 2 hours in total.
Until you send it, the request is a draft, so you can come back and add
more later.
5
Submit
Send the request. If something is missing, the console says what, for
example “Add at least 30 minutes of recordings. You have 24 minutes so
far.”
What each status means
There’s no fixed turnaround. Our team reviews the recordings and updates the status as the request moves along. Anything we need you to know comes as a note on the request.
When a request is ready, our team gets in touch to switch your agents to the
new voice. Its
voice_id is on the request so you can tell it apart from the
catalogue voices.
Request a voice with the API
Base URLhttps://sandbox.voice.miraiminds.co. All endpoints require
Authorization: Bearer sk_live_…, and a request belongs to the workspace of
the key that created it.
Files are large, so they go up in chunks of 16 MiB (16,777,216 bytes): you
register the file, upload its chunks, mark it complete, and submit the request
when everything is in.
1. Create a request
The response is
201 Created. attested_at is the time we recorded your
confirmation.
2. Register a recording
Tell us about the file before you send it.bytes must be the file’s exact
size. duration_seconds is its length; for a WAV file we read the length from
the file itself when you finish it, and for other formats we use the number you
send. ffprobe -v error -show_entries format=duration -of csv=p=0 session-1.mp3
prints it.
kind is sample for a recording and consent for the consent clip. The
response is 201 Created, and chunks says how many pieces to send:
3. Upload the chunks
Send chunk0 to chunks - 1 as raw bytes. Every chunk is exactly
chunk_bytes long except the last, which is whatever is left. Chunks can go in
any order, and sending one again overwrites it.
PUT answers 200 with the file, and received_chunks lists the chunks
we have so far.
4. Finish the file
status complete and its sha256. For a WAV file, duration_seconds now
comes from the file and duration_source is header. If any chunk is missing,
you get 409 incomplete naming the missing chunks; send those and call
complete again.
Repeat steps 2 to 4 for each recording. The request’s sample_seconds adds up
the length of every finished recording.
5. Add the consent clip
Upload the speaker reading the consent sentence the same way, with"kind": "consent".
A request holds one consent clip, up to 50 MB. To replace it, delete the old
one first.
6. Submit
status submitted. To submit, the request
needs consent.attested set to true, one finished consent clip, between
1,800 and 7,200 seconds of finished recordings, and no file still uploading.
If something is missing, you get 422 not_ready with a message that says what:
422 Unprocessable Entity
Resume an upload
If an upload stops partway, get the request and look at the file infiles:
received_chunks lists the chunks we already have. Send the others, then
finish the file. This Python function does both, and you can run it again
after any failure:
Follow the status
GET /v2/voice-clones/{id} returns the request with its status and our
status_note. GET /v2/voice-clones lists every request in your workspace as
{"object": "list", "data": [...]}, newest first. The status changes when our
team moves the request along, so there’s no need to check often. When it is
ready, voice_id names your new voice, and we’ll help you move your agents
onto it.
Change or delete a request
While a request isdraft or needs_changes, PATCH /v2/voice-clones/{id}
changes any of the fields from step 1; at any other status it answers
409 not_editable. Adding and removing files works in those two statuses
only. DELETE /v2/voice-clones/{id}/files/{file_id} answers
{"id": "vcf_…", "object": "voice_clone_file", "deleted": true}.
DELETE /v2/voice-clones/{id} works at any status. It deletes every recording
and the consent clip, and answers: