Skip to main content

OpenAI TTS

OpenAITTS is a Patter TTSProvider backed by OpenAI’s POST /v1/audio/speech endpoint. It streams 24 kHz PCM from OpenAI and resamples it to 16 kHz or 8 kHz on the fly so the telephony output path can forward bytes without an additional resample stage. No vendor SDK required.

Install

openai-tts ships in the base install — no extra needed.
On Python 3.13+ install audioop-lts for the in-process 24 kHz → 16 kHz (or 8 kHz) resampler. It’s pinned in getpatter’s base dependencies.

Usage

Use the namespaced import (getpatter.tts.openai) or the flat alias (getpatter.OpenAITTS). Both auto-resolve OPENAI_API_KEY from the environment when api_key= is omitted.
In an agent:

Models and rates

OpenAI TTS bills per 1,000 characters synthesized. Per-model rates (defaults from getpatter.pricing):
ModelRate / 1k charsNotes
tts-1 (default)$0.015Fast, telephony-friendly.
tts-1-hd$0.030Higher fidelity — heavier.
gpt-4o-mini-tts$0.012Accepts instructions for voice direction.
(gpt-4o-mini-tts is billed by tokens upstream; published per 1k chars equivalent for parity with the rest of the table. Override per-call via Patter(pricing={"openai_tts": {"models": {"tts-1": {"price": ...}}}}).)

Voices

Built-in voices accepted by all three models: alloy (default), ash, ballad, coral, echo, fable, nova, onyx, sage, shimmer, verse.

Languages

OpenAI TTS automatically follows the language of the input text — no language parameter exists. The same voice can synthesize across most of OpenAI’s supported languages (English, Spanish, French, German, Italian, Portuguese, Japanese, Chinese, …) — see the OpenAI voice guide for the full coverage matrix.

Voice direction (gpt-4o-mini-tts only)

Pass instructions= to steer tone, pacing, and accent:
tts-1 and tts-1-hd reject instructions with a 400 — the SDK silently drops the field for those models so you can swap freely.

Options

OptionDefaultNotes
api_keyNoneReads from OPENAI_API_KEY when omitted.
model"tts-1""tts-1", "tts-1-hd", "gpt-4o-mini-tts".
voice"alloy"Any of the 11 built-in voices above.
instructionsNoneVoice-direction prompt (ignored for legacy models).
speedNoneFloat in [0.25, 4.0].
target_sample_rate160008000 or 16000 Hz — chooses the resampler chain.

Low-level usage