OpenAI TTS: как озвучить текст через API

В этой статье

Если коротко: OpenAI TTS превращает переданный текст в речь через Audio API. Вы указываете модель и голос, а API возвращает аудиоданные, которые можно сохранить, например, в speech.mp3. Это отдельный программный маршрут, а не кнопка «прочитать ответ» в ChatGPT.

Что именно делает OpenAI TTS

Представьте две ситуации.

— Вот готовый ответ. Нажмите значок динамика.

— Возьмите этот текст из базы знаний, озвучьте его и сохраните файл для приложения.

Первая относится к Read aloud в ChatGPT: сервис читает уже сформированный ответ; этот сценарий описан в FAQ ChatGPT для Android. Вторая — к TTS API: вы сами передаёте input, выбираете параметры и получаете аудиовывод. Voice в ChatGPT предназначен для голосового разговора, а Dictation, наоборот, превращает речь пользователя в текст. Названия похожи, но задачи разные.

Если нужно получить файл из собственного текста, используйте endpoint POST /v1/audio/speech в OpenAI Audio API. В запросе задаются model, input и voice; дополнительные параметры уточняют результат — например, формат или скорость.

Если же нужно только слушать ответы ChatGPT, отдельный TTS-запрос может оказаться лишним. Для первого знакомства с API пригодится пример первого запроса к GPT API на Python, а получение ключа разобрано в инструкции про API-ключ OpenAI.

Минимальный запрос через curl

Сначала положите ключ в переменную окружения. В PowerShell:

$env:OPENAI_API_KEY = "ваш_ключ_только_в_локальной_сессии"

В Linux или macOS:

export OPENAI_API_KEY="ваш_ключ_только_в_локальной_сессии"

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

Для первого прогона возьмите короткую тестовую фразу:

curl https://api.openai.com/v1/audio/speech \
  -H "Authorization: Bearer $OPENAI_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "gpt-4o-mini-tts",
    "voice": "alloy",
    "input": "Встреча начинается в десять утра у главного входа",
    "response_format": "mp3"
  }' \
  --output speech.mp3

В Windows PowerShell передайте JSON как байты UTF-8:

$ttsPayload = @{
  model = 'gpt-4o-mini-tts'
  voice = 'alloy'
  input = 'Встреча начинается в десять утра у главного входа'
  response_format = 'mp3'
} | ConvertTo-Json
$ttsBytes = [System.Text.Encoding]::UTF8.GetBytes($ttsPayload)
Invoke-RestMethod -Method Post -Uri 'https://api.openai.com/v1/audio/speech' `
  -Headers @{ Authorization = "Bearer $env:OPENAI_API_KEY" } `
  -ContentType 'application/json; charset=utf-8' -Body $ttsBytes -OutFile 'speech.mp3'

После выполнения в текущем каталоге должен появиться speech.mp3. Откройте его обычным проигрывателем и сравните услышанное с исходной строкой: действительно ли сказано «в десять утра» и упомянут «главный вход». Затем повторите проверку с реальным текстом приложения.

Это не измерение качества модели и не доказательство, что конкретный голос одинаково хорошо произносит русский язык. Это быстрый способ услышать результат и поймать ошибку в имени, числе или термине до интеграции.

Как выбрать модель и голос

В актуальном маршруте документации для управляемого синтеза показана gpt-4o-mini-tts: инструкциями можно задавать акцент, интонацию, темп и тон. В материалах Audio API также встречаются tts-1, ориентированная на меньшую задержку, и tts-1-hd, рассчитанная на более высокое качество относительно tts-1. Перед запуском сверяйте руководство Text to speech: доступность моделей, параметров и голосов может меняться.

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

Если важен темп, параметр speed в Audio API поддерживает диапазон от 0.25 до 4.0. Но «быстрее» не всегда означает «понятнее»: для инструкции с адресами и цифрами разумно проверить несколько вариантов на одном и том же тексте. Описание полей и форматов смотрите в справочнике Create speech.

Python и Node.js: тот же маршрут из приложения

Через Python логика не меняется: прочитать OPENAI_API_KEY из окружения, вызвать синтез и записать ответ в файл.

import os
from openai import OpenAI

client = OpenAI(api_key=os.environ["OPENAI_API_KEY"])

with client.audio.speech.with_streaming_response.create(
    model="gpt-4o-mini-tts",
    voice="alloy",
    input="Встреча начинается в десять утра у главного входа",
    response_format="mp3",
) as response:
    response.stream_to_file("speech.mp3")

В Node.js SDK шаги те же: создать клиент с ключом из process.env.OPENAI_API_KEY, вызвать client.audio.speech.create({ model, voice, input, response_format: "mp3" }), получить бинарный ответ и сохранить его через файловую систему. Для первого прототипа достаточно curl; SDK удобнее подключать, когда появляются обработка ошибок, очередь текстов и правила именования файлов.

Формат, длина текста и проверка результата

По умолчанию API возвращает MP3. В справочнике также указаны opus, aac, flac, wav и pcm — выбирайте формат по тому, что принимает ваш проигрыватель или следующий сервис.

Для одного значения input действует ограничение в 4096 символов. Длинную статью разделите на логические фрагменты, озвучьте отдельно и продумайте склейку. На границах частей проверьте паузы и произношение заголовков, чтобы аудио не звучало как оборванная реплика.

После запроса проверьте:

  1. Файл действительно создался и имеет ненулевой размер.
  2. Проигрыватель открывает выбранный формат.
  3. Время, даты, числа, имена и специальные термины звучат так, как нужно пользователю.
  4. Длина и скорость подходят для интерфейса.
  5. При ошибке API приложение показывает текст ошибки, а ключ не попадает в логи и клиентский код.

На публичной странице или в приложении нужно ясно сообщить слушателю, что голос сгенерирован ИИ и не является человеческим. Это часть сценария использования, а не подпись, добавленная после факта.

Нужна ли для TTS подписка ChatGPT

Нет, это разные вещи. Для вызова POST /v1/audio/speech нужен отдельный доступ к OpenAI API и его биллинг. Подписка ChatGPT не превращается автоматически в API-баланс, а каталог цифровых сервисов не заменяет API-ключ.

Если вы смешали эти сценарии и параллельно ищете подписку для доступа к ChatGPT, каталог Amber Market поможет посмотреть актуальные цифровые товары и условия заказа. Для заказа из России доступна оплата через СБП; наличие и условия нужно проверить перед покупкой. Это относится именно к заказу в магазине и не оплачивает прямые вызовы OpenAI Audio API.

Итак, маршрут TTS прямой: храните ключ в окружении, отправляйте model, voice и input на /v1/audio/speech, сохраняйте ответ в нужном формате и прослушивайте короткий тест на реальных именах и числах. Затем встраивайте генерацию в приложение с учётом лимита текста, обработки ошибок и понятного уведомления об ИИ-голосе.

Источники

Есть следующая задача?Ещё по теме «Голосовой режим» →