Voice design
Synthesize a voice from a written description, and write descriptions the model actually responds to.
Overview
Send instructions with no voice to chorus-design, and the model
synthesizes a speaker to match the description. The voice belongs to no real
person, so unlike cloning there is no consent
question to answer.
The chorus alias does not cover this model. An instructions-only request sent
to chorus routes to the cloning model instead and speaks its default voice,
dominic, with nothing in the response to say design never ran. Set model to
chorus-design on every design request.
Design request
curl https://api.sprag.ai/v1/audio/speech \
-H "Content-Type: application/json" \
-H "Authorization: Bearer $SPRAG_API_KEY" \
-d '{
"model": "chorus-design",
"input": "Welcome back. Let me pull up your account.",
"instructions": "Calm middle-aged British woman, warm and unhurried, slight vocal fry",
"response_format": "mp3"
}' \
--output designed.mp3instructions does different work on each model. On a preset model it adjusts
delivery; on chorus-design it defines the speaker.
Write a description
Name age, gender, accent, and timbre. Descriptions that name all four are far more repeatable than adjectives alone. Compare "friendly" against "friendly, bright American man in his twenties, slightly clipped".
These four are close to the length and specificity the model responds to:
A weathered old sea captain, seventy years old, thick gravelly rasp, heavy West Country accent. Slow, salt-worn, every sentence sounds like a warning.
A film-noir private detective narrating in voiceover. Male, forties, low and smoky, close to the microphone, world-weary and dry. Almost a whisper, no theatricality.
An old monk chanting in a stone monastery. Male, eighty years old. Extremely low, slow and resonant, the voice worn smooth by decades of repetition.
A colossal ancient genie made of starlight, newly released after a thousand years. Enormous booming male voice, vast and echoing, amused and grandly theatrical, unhurried.
Describe a person and a situation rather than listing traits. The model responds to a coherent target better than to a set of independent dials.
Description behavior
Pacing
Tempo words in the description do not change the output. "Extremely fast" and "slow and measured" read at the same pace as a neutral description.
Pace responds to the input text instead. Ellipses and sentence fragments
produce roughly a 50% slowdown, so write slow text when you need a slow
delivery:
{
"model": "chorus-design",
"input": "We do not sail past the point tonight... The water out there remembers every ship that tried.",
"instructions": "A weathered old sea captain, seventy years old, thick gravelly rasp, heavy West Country accent."
}Conflicting registers
Keep each description pointed at one register. A description holding two at once returns the mean of them: "Shrill and high-pitched, but cracked with age" produces neither, and is the least reproducible output the model gives.
Corrections
If a voice comes back wrong, rewrite rather than patch. Prefixing a correction to an existing description barely moves the result; rewriting the whole description in the target register moves it a long way.
Known gaps
An aged female voice is not reachable from an English description on this model. Descriptions asking for one return something younger.
Reproducibility
Each request synthesizes a fresh voice, and this model varies noticeably between identical requests. Generating twice from the same description does not guarantee the same speaker.
A designed voice is not stored and has no id.
GET /v1/audio/voices?model=chorus-design returns an empty list, so there is
nothing to pin a voice to across requests. When a single identity has to hold
across a product, render the lines you need once and keep the audio, or use a
preset, which is the same speaker on every request.