API
Озвучка текста
Текст в речь через POST /audio/speech. Совместимо с OpenAI SDK — подмените base_url. Ответ — сырой аудиопоток, не JSON.
POST https://api.aitunnel.ru/v1/audio/speech принимает JSON. В OpenAI SDK укажите base_url https://api.aitunnel.ru/v1/.
Поддерживаемые модели
Актуальный список, голоса, форматы и цены — публичный каталог:
curl https://api.aitunnel.ru/public/aitunnel/models/speechНа сайте: страница моделей.
| Поле | Описание |
|---|---|
voices | Идентификаторы голосов для поля voice |
supported_formats | Значения response_format. Первый — если параметр не указать |
symbols_cost | Цена за 1 млн символов в рублях |
prompt_cost / completion_cost | Цена за 1 млн токенов, если модель тарифицируется по токенам |
russian_supported | Надёжно ли озвучивает русский |
Имя в запросе — без префикса провайдера: gpt-4o-mini-tts, не openai/gpt-4o-mini-tts. Префикс provider/model обходит каталог — см. OpenRouter.
Базовое использование
curl https://api.aitunnel.ru/v1/audio/speech \
-H "Authorization: Bearer sk-aitunnel-xxx" \
-H "Content-Type: application/json" \
-d '{
"model": "gpt-4o-mini-tts",
"voice": "alloy",
"input": "Привет! Это пример озвучки текста через AITUNNEL.",
"response_format": "mp3"
}' \
--output output.mp3Параметры запроса
| Параметр | Тип | Обязательный | Описание |
|---|---|---|---|
model | string | да | Имя из каталога или provider/model |
input | string | да | Текст для озвучки |
voice | string | да | Голос из voices модели |
response_format | string | нет | Формат аудио. Если не указать — первый из supported_formats (обычно mp3) |
speed | number | нет | Скорость речи, 0.25–4.0. Есть у моделей OpenAI, у остальных может игнорироваться |
instructions | string | нет | Стиль речи. Есть у gpt-4o-mini-tts |
input_references | array | нет | Сэмпл голоса для клонирования — ниже |
Gemini — только pcm
mp3 и pcm — у большинства моделей. opus, aac, flac, wav — у tts-1 и tts-1-hd. У gemini-3.1-flash-tts-preview только pcm: mp3 вернёт 400.
Формат ответа
Тело — бинарное аудио. Стоимость и баланс — в заголовках:
| Заголовок | Описание |
|---|---|
Content-Type | audio/mpeg для mp3, audio/pcm для pcm |
cost-rub | Стоимость запроса в рублях |
balance | Остаток баланса после списания |
Ошибка приходит JSON-ом, не аудио: сначала проверьте статус ответа.
Клонирование голоса
У части моделей можно передать короткий сэмпл в input_references — отдельный «загрузить голос» шаг не нужен. Нужен один input_audio (base64 или data-URI) и по желанию text с расшифровкой сэмпла:
{
"model": "voxtral-mini-tts-2603",
"input": "Hello from my cloned voice!",
"response_format": "mp3",
"input_references": [
{
"type": "input_audio",
"input_audio": { "data": "data:audio/wav;base64,UklGRuQXDAB..." }
},
{ "type": "text", "text": "This is the transcript of the reference audio." }
]
}Не все модели это умеют. Слишком большой сэмпл провайдер отклонит.
Примеры
gpt-4o-mini-tts с инструкциями по стилю
response = client.audio.speech.create(
model="gpt-4o-mini-tts",
voice="nova",
input="Добро пожаловать! Сегодня у нас отличные скидки.",
instructions="Говори с энтузиазмом, как диктор рекламы.",
)
response.stream_to_file("promo.mp3")Grok Voice TTS 1.0
response = client.audio.speech.create(
model="grok-voice-tts-1.0",
voice="eve",
input="Hello! This is a test of Grok Voice TTS.",
response_format="mp3",
)
response.stream_to_file("grok.mp3")Gemini 3.1 Flash TTS с эмоциональными тегами
Только pcm:
response = client.audio.speech.create(
model="gemini-3.1-flash-tts-preview",
voice="Kore",
input="[excited] Невероятно! [whispers] Это работает.",
response_format="pcm",
)
response.stream_to_file("gemini.pcm")Voxtral Mini TTS
response = client.audio.speech.create(
model="voxtral-mini-tts-2603",
voice="en_paul_neutral",
input="Welcome to our service. How can I help you today?",
response_format="mp3",
)
response.stream_to_file("voxtral.mp3")Несколько голосов в подкасте
segments = [
("nova", "Добрый день! Вы слушаете еженедельный подкаст о технологиях."),
("onyx", "Сегодня мы обсудим последние новости в мире ИИ."),
("nova", "Начнём с обзора новых моделей этой недели."),
]
for i, (voice, text) in enumerate(segments):
response = client.audio.speech.create(
model="tts-1-hd",
voice=voice,
input=text,
response_format="mp3",
)
response.stream_to_file(f"segment_{i}.mp3")Лучшие практики
- Модель:
gpt-4o-mini-tts— стиль черезinstructions;tts-1— быстрее;grok-voice-tts-1.0— много языков;gemini-3.1-flash-tts-preview— 70+ языков и теги эмоций. - Формат:
mp3для хранения и плеера;pcmдля пайплайнов с низкой задержкой. Не сохраняйтеpcmкак.mp3. - Длинный текст режьте на фрагменты и склеивайте аудио.
- Кэшируйте готовые файлы — повтор того же текста оплачивается снова.
Устранение неполадок
Пустой или битый файл?
response_formatдолжен совпадать с расширением. У Gemini — толькоpcm.- Не-200 ответ — JSON с ошибкой, не аудио.
400 на формат?
- Смотрите
supported_formatsмодели.
Модель не найдена?
- Имя без префикса провайдера (
gpt-4o-mini-tts, неopenai/gpt-4o-mini-tts). - Список:
GET https://api.aitunnel.ru/public/aitunnel/models/speech.
Голос не принят?
- Берите идентификатор из
voicesэтой модели в каталоге. Наборы у моделей разные.
Смотрите также
- Аудио — аудио в чате
- Распознавание речи — аудио в текст
- Список моделей
- Ошибки и отладка