API429 / Text to speech

Gemini 3.1 Flash TTS API: голоса, WAV и пример Python

Превратите текст в речь через POST /v1/audio/speech с точным ID gemini-3.1-flash-tts-preview. В API429 эта модель опубликована как preview; для голоса используется фиксированное имя, например Kore. Ответ — готовый WAV, который приложение проверяет и сохраняет целиком.

Микрофон, наушники и картотека голосов на столе
Редакционная фотоиллюстрация к Gemini 3.1 Flash TTS: выбор голоса и подготовка текста к озвучке.По теме: Синтез речи через API · Fish Audio Pro API · Модели Google · Справочник API

Проверка клиентского контракта: . Точный ID: gemini-3.1-flash-tts-preview. Версия опубликована как preview.

Что именно подключается

Это инструкция по клиентскому контракту API429 для одной версии модели. Она подходит для первого запроса из серверного приложения: озвучки короткого объяснения, реплики интерфейса или подготовленного дикторского текста. Название семейства не заменяет точный ID: сохраните его рядом с настройками голоса и исходным текстом.

В документации Google этот ID отмечен как legacy preview; для новых производственных нагрузок Google рекомендует семейство Gemini 3.8 TTS. Эти семейства также опубликованы в каталоге API429. Их точные ID, доступ вашего ключа и параметры запроса проверяйте отдельно: поддержка этой preview-версии не означает одинаковые возможности всех версий.

Перед запуском проверьте GET /v1/models с тем же ключом, которым будете синтезировать речь. Публичный каталог описывает опубликованное предложение, а ответ с авторизацией — доступ вашей учётной записи. Не отправляйте платный запрос, если нужный ID отсутствует, и не подменяйте его похожим текстовым Gemini.

Выбор голоса и подготовка текста

Для Gemini используется имя из списка ниже, с сохранением написания и регистра. Начните с Kore, а затем сравните несколько вариантов на одном и том же небольшом тексте. Так легче оценить разборчивость чисел, ударения в названиях и подходящий характер подачи, не смешивая изменения голоса с изменением сценария.

Каталог GET /v1/audio/voices с параметром модели Fish здесь не нужен: у Gemini в этом контракте фиксированные имена. Не переносите идентификатор клонированного голоса или настройки другого сервиса в поле voice. Документация Google о собственных API также не подтверждает поддержку каждого параметра через API429.

Подготовьте текст так, как его должен услышать человек: раскройте неоднозначные сокращения, проверьте даты и единицы измерения. Сначала прослушайте короткий характерный фрагмент. Сам список голосов описывает допустимые имена и не доказывает качество конкретной озвучки, язык записанного примера или выполнение запроса под вашим ключом.

Ответ WAV: сохраняйте полный файл

Клиентский ответ этой модели — WAV с PCM16, одним каналом и частотой 24 кГц. Поле response_format игнорируется, поэтому расширение mp3 или попытка прочитать ответ как JSON не превращают данные в другой формат. В примере ниже это поле намеренно не передаётся.

Приложение должно дождаться полного тела успешного ответа, проверить сигнатуры RIFF и WAVE, параметры аудио и согласованность длины файла. Только после этого сохраняйте результат с расширением .wav. Повреждённые или неполные данные нельзя выдавать пользователю как готовую дорожку, даже если HTTP-ответ начался успешно.

Если продукту нужен другой формат, выполняйте преобразование полученного файла отдельным инструментом после проверки. Самостоятельно проверьте параметры преобразования и совместимость с проигрывателем вашего приложения. Этот пример не описывает потоковую выдачу: не воспроизводите первые байты как законченный WAV и не обещайте измеренную задержку.

Как читать тариф и планировать расход

Для этой модели отдельно показываются опубликованные ставки входных токенов и символов TTS. Не складывайте числовые значения без учёта единиц и объёма: сначала определите, какие компоненты применяются к вашему запросу, затем проверьте фактический расход в учётной записи. Отсутствующая ставка остаётся неизвестной.

Ниже выводится только свежая однозначная запись публичного каталога API429. При устаревании данных, повторяющемся ID или неподтверждённых единицах числовые ставки скрываются. Это помогает избежать обещания цены по старому снимку, но не заменяет проверку условий перед запуском большой партии.

Продолжительность записи зависит от текста и подачи, поэтому здесь нет универсальной цены минуты и пересчёта в аудиотокены Google. Не переносите тариф прямого Google API на этот контракт. Для бюджета серии задайте собственное ограничение числа запросов и проверьте списание на небольшом представительном примере.

Первый запуск и разбор ошибки

Пример Python использует стандартную библиотеку, читает ключ из окружения сервера и делает проверку доступа перед одной платной попыткой. Не помещайте ключ в исходный код, адрес страницы или скриншот.

При ошибке авторизации проверьте ключ и адрес API. Если модель не найдена, снова сопоставьте точный ID с GET /v1/models. После таймаута сначала выясните результат предыдущей попытки в доступных средствах учёта; автоматический повтор может создать ещё одну генерацию и отдельный расход.

Для рабочего приложения храните версию текста, имя голоса, ID модели и состояние своей задачи. Не сохраняйте секреты вместе с пользовательским результатом и не публикуйте полный ответ с личными данными. После проверки файла прослушайте запись: технически корректный WAV ещё не гарантирует правильное произношение.

30 фиксированных голосов Gemini TTS

Передавайте имя в поле voice. Список относится к описанному контракту; он не подтверждает собственные клонированные голоса или функции нативного Google API.

Аудио ниже — существующие MP3-превью из публичной клиентской библиотеки API429. Модель, которой они были созданы, независимо не проверена; это не результаты нового запроса и не обещание качества конкретной версии. Формат этих записей не меняет WAV-контракт метода Gemini.

Текущие ставки API429

USD, стандартный публичный тариф. Каждая строка сохраняет свою единицу; входные токены и символы TTS нельзя складывать как одинаковые величины.

  • $0.300000000000 / 1 000 000 входящих токенов
  • $0.011100000000 / 1 000 символов TTS

Дата каталога: . Свежая публикация не гарантирует доступ конкретного ключа.

Пример запроса на Python: одна попытка и проверка WAV

Запускайте на сервере с Python 3.10+ и стандартной библиотекой. Установите API429_API_KEY через защищённое окружение. Выполнение сначала проверяет доступ через GET /v1/models, затем отправляет один платный POST /v1/audio/speech. Автоматических повторов нет.

import io, json, os, re, struct, urllib.request, wave
from pathlib import Path

BASE = "https://gateway.api429.com/v1"
MODEL = "gemini-3.1-flash-tts-preview"
KEY = os.environ["API429_API_KEY"]
VOICE = "Kore"
headers = {"Authorization": "Bearer " + KEY}

# Verify access with the same key before one paid speech request.
request = urllib.request.Request(BASE + "/models", headers=headers)
with urllib.request.urlopen(request, timeout=30) as response:
    models = json.load(response)
if not isinstance(models, dict) or not isinstance(models.get("data"), list):
    raise ValueError("Invalid models response")
if not any(isinstance(m, dict) and m.get("id") == MODEL for m in models["data"]):
    raise ValueError("Requested model is not available to this key")

payload = {"model": MODEL, "input": "Здравствуйте! Это пример текста для озвучки.", "voice": VOICE}
request = urllib.request.Request(
    BASE + "/audio/speech", data=json.dumps(payload).encode("utf-8"),
    headers={**headers, "Content-Type": "application/json"}, method="POST",
)
# Running this file again creates another paid attempt; no automatic retries.
with urllib.request.urlopen(request, timeout=180) as response:
    audio = response.read()
if len(audio) < 44 or audio[:4] != b"RIFF" or audio[8:12] != b"WAVE":
    raise ValueError("Expected complete WAV response")
if struct.unpack_from("<I", audio, 4)[0] + 8 != len(audio):
    raise ValueError("Incomplete RIFF body")
with wave.open(io.BytesIO(audio), "rb") as wav:
    if wav.getcomptype() != "NONE" or wav.getnframes() <= 0:
        raise ValueError("Expected non-empty PCM WAV")
    if (wav.getnchannels(), wav.getsampwidth(), wav.getframerate()) != (1, 2, 24000):
        raise ValueError("Expected mono PCM16 WAV at 24 kHz")
    frames = wav.readframes(wav.getnframes())
    if len(frames) != wav.getnframes() * wav.getnchannels() * wav.getsampwidth():
        raise ValueError("Incomplete WAV audio data")
Path("speech.wav").write_bytes(audio)
print("Saved speech.wav")

Оплата и тест $10

  • Карта российского банка. Пополнение баланса в личном кабинете.
  • Счёт для юрлиц. Безналичная оплата с закрывающими документами.
  • USDT и TON. Пополнение криптовалютой.

Тест $10. Подпишитесь на наш Telegram-канал через бота — получите $10 на баланс для первых запросов. Получить $10 в боте

Частые вопросы

Какой ID передавать в model?

Точный ID gemini-3.1-flash-tts-preview. Перед платным запросом убедитесь, что он есть в GET /v1/models для вашего ключа.

Можно получить MP3 через response_format?

Для этой модели поле игнорируется: клиентский ответ — WAV PCM16, mono, 24 кГц. Другой формат требует отдельного преобразования после проверки WAV.

Откуда взять голос?

Используйте одно из 30 фиксированных имён, например Kore. Fish-каталог /v1/audio/voices не является списком голосов Gemini.

Почему скрыта цена?

Числовые ставки выводятся только из свежей однозначной записи каталога с проверенными единицами. Проверьте текущие условия в каталоге и учётной записи.

Продолжить подключение

Источники и границы проверки

Параметры API429 берутся из клиентской документации. Каталог определяет опубликованные ID и единицы тарификации. Материалы производителей дают контекст моделей и голосов, но не доказывают поддержку всех их возможностей через API429 или доступ вашего ключа.

Telegram