pinecall voices
The voices to choose from, and hearing one.
pinecall voices [--tts <vendor>] [--language es] [--country ES]
pinecall voices play <voice> ["the words"] [--tts <vendor>] [--model <model>] [--language es] [--save file.wav]
$ pinecall voices --language es --country ES
a7beff01-8f8b-4809-bfe6-e2166e57e0c2 Iria - Thoughtful Communicator feminine ES castilian
de38f545-c574-44e8-9b54-a7d6fec1c6b1 Marta - Friendly Guide feminine ES castilian
35b2cfc1-e6fb-4d69-a598-c1780612be4a Darío - Steady Operator masculine ES castilian
$ pinecall voices --tts rime
rime lists no voices: its voice is the vendor's own id, set as it is — these list theirs: cartesia, elevenlabs, inworld, nvidia, speechify (--tts <vendor>)
$ pinecall voices play de38f545-c574-44e8-9b54-a7d6fec1c6b1 "Hi, this is Clínica Norte's assistant." --language en
de38f545-c574-44e8-9b54-a7d6fec1c6b1 · first audio 578 ms · whole sentence 915 ms · afplay
With nothing after it: the vendor's voices in that language, one per line — the id the agent's
voice setting takes, then the name and, where the vendor says them, the gender and where the
accent is from. The country is the column that matters for Spanish: ES is Spain and MX is
Mexico, and a language code does not tell them apart; --country keeps one. The vendor is --tts,
or the platform's own voice when none is named — defaults.tts of GET /v1/providers, what an
agent that names no vendor speaks with. A vendor lists its voices when its livekit plugin does —
ElevenLabs, Inworld, NVIDIA and Speechify — or when the platform's providers row lists them for it, as
data (listed, by vendor and language: on cloud.pinecall.io, Cartesia's in Spanish and English);
voices_listed in the same catalogue says which, and it is what the console's picker reads too. A
vendor listed by neither takes its voice as the id the vendor gives it: voices says so, names the
vendors that list theirs, and exits 1 without asking for a list. Any id plays, listed or not.
play says the words in that voice through the vendor's own plugin, exactly as a call would build
it (POST /v1/voices/sample, the wire's VoiceSample), and plays the WAV on this machine with
whichever of afplay, ffplay, play, aplay or pw-play it finds — a player that fails is
said so, with the file kept and named, and exit 1. With no words the gateway reads one line in the
language, so every client hears the same one. Beside it are the vendor's two numbers: how long
until the first audio — the wait a caller hears after they stop talking — and the whole sentence;
a dash when the gateway sent none. --save file.wav keeps the WAV there and plays it from there.
It runs on the org's own key for the vendor when it brought one, and on the platform's otherwise; both
endpoints ask for pipeline, the scope that may change the voice. The gateway refuses in one sentence
what the settings endpoint would refuse — a typo in the voice, a vendor this build has no row for, a
model it does not vouch for, more than 400 characters (422) — and says 429 past thirty samples
a minute on one key, 503 when nobody has a key for the vendor, 409 when the vendor refused
that key, 502 when it did not answer. The voice it plays is set with pinecall agent set --tts cartesia --tts-model sonic-3 --voice <id>: a model tried with --model is kept only when
--tts-model names it too.