Генерация аудио
Генерируйте аудио ответ с помощью AI-моделей через RouterAI API.
RouterAI поддерживает генерацию аудио через модели OpenAI с возможностями аудио выхода. Эти модели могут создавать речевые ответы из текстовых промптов в потоковом режиме.
Доступные модели
Для генерации аудио доступны следующие модели OpenAI:
openai/gpt-audio- GPT Audioopenai/gpt-audio-mini- GPT Audio Mini (оптимизированная версия)openai/gpt-4o-audio-preview- GPT-4o Audio Preview
Все модели поддерживают генерацию речи с различными голосами и работают только в потоковом режиме.
Доступные голоса
Модели генерации аудио поддерживают следующие голоса:
alloy- Нейтральный голосash- Выразительный голосballad- Мелодичный голосcoral- Теплый голосecho- Резонирующий голосfable- Повествовательный голосonyx- Глубокий голосnova- Энергичный голосsage- Мудрый голосshimmer- Яркий голосverse- Ритмичный голос
Использование API
Для генерации аудио необходимо отправить запрос на эндпоинт /api/v1/chat/completions с обязательными параметрами:
stream: true- генерация поддерживается только в потоковом режимеmodalities: ["text", "audio"]- указание модальностей выводаaudio- конфигурация аудио с голосом и форматом
Базовая генерация аудио
# Базовый запрос на генерацию аудио
curl -X POST "https://routerai.ru/api/v1/chat/completions" \
-H "Authorization: Bearer $ROUTERAI_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "openai/gpt-audio-mini",
"modalities": ["text", "audio"],
"messages": [
{"role": "user", "content": "Расскажи о зарождении вселенной"}
],
"audio": {
"voice": "alloy",
"format": "pcm16"
},
"stream": true
}'
Параметры конфигурации аудио
Выбор голоса
Установите voice параметр для выбора голоса генерируемого аудио. Доступны 11 различных голосов с разными характеристиками.
# Генерация аудио с конкретным голосом
curl -X POST "https://routerai.ru/api/v1/chat/completions" \
-H "Authorization: Bearer $ROUTERAI_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "openai/gpt-audio-mini",
"modalities": ["text", "audio"],
"messages": [
{"role": "user", "content": "Объясни квантовую физику простыми словами"}
],
"audio": {
"voice": "nova",
"format": "pcm16"
},
"stream": true
}'
Формат аудио
В настоящее время поддерживается формат pcm16 (PCM 16-bit, mono, 24kHz).
Формат ответа
При генерации аудио ответ приходит в виде потока Server-Sent Events (SSE). Каждое событие содержит chunk с аудио данными в формате base64:
{
"choices": [
{
"delta": {
"audio": {
"data": "base64_encoded_pcm_data..."
}
}
}
]
}
Обработка потокового ответа
Аудио данные приходят в виде base64-кодированных PCM16 chunks, которые необходимо:
- Декодировать из base64
- Накопить все chunks
- Сохранить как PCM файл
- При необходимости конвертировать в другой формат (например, MP3)
Пример: Генерация и сохранение в MP3
Полный пример на Python для генерации аудио и сохранения в MP3 формат:
import base64
import json
import subprocess
import requests
url = "https://routerai.ru/api/v1/chat/completions"
headers = {
"Authorization": "Bearer YOUR_API_KEY",
"Content-Type": "application/json"
}
payload = {
"model": "openai/gpt-audio-mini",
"modalities": ["text", "audio"],
"messages": [
{
"role": "system",
"content": "Ты математик, говори на русском языке, пользователь будет задавать вопрос, а ты отвечай очень кратко, 1-2 слова и без лишних рассуждений."
},
{
"role": "user",
"content": "сколько будет один в квадрате?"
}
],
"audio": {
"voice": "alloy",
"format": "pcm16"
},
"stream": True
}
# Накопление PCM chunks
pcm_chunks = bytearray()
with requests.post(url, headers=headers, json=payload, stream=True) as r:
r.raise_for_status()
for raw_line in r.iter_lines(decode_unicode=True):
if not raw_line:
continue
# SSE: каждая строка вида "data: {...}" или "data: [DONE]"
if not raw_line.startswith("data: "):
continue
data = raw_line[6:]
if data == "[DONE]":
break
try:
chunk = json.loads(data)
except json.JSONDecodeError:
continue
# Извлекаем audio.data из delta
choices = chunk.get("choices", [])
if not choices:
continue
delta = choices[0].get("delta", {})
audio = delta.get("audio", {})
audio_b64 = audio.get("data")
if audio_b64:
# Декодируем base64 в байты PCM16
pcm_chunks += base64.b64decode(audio_b64)
# Сохраняем сырой PCM
pcm_path = "output.pcm"
with open(pcm_path, "wb") as f:
f.write(pcm_chunks)
# Конвертация в MP3 через ffmpeg
# PCM16: 16-bit, mono, 24kHz
mp3_path = "output.mp3"
subprocess.run([
"ffmpeg", "-y",
"-f", "s16le", # PCM16 little-endian
"-ar", "24000", # sample rate 24kHz
"-ac", "1", # mono
"-i", pcm_path,
"-codec:a", "libmp3lame",
"-q:a", "4",
mp3_path
], check=True)
print(f"Saved: {mp3_path}")
Конвертация PCM в другие форматы
После получения PCM файла вы можете конвертировать его в различные форматы с помощью ffmpeg:
# Конвертация в MP3
ffmpeg -y -f s16le -ar 24000 -ac 1 -i output.pcm -codec:a libmp3lame -q:a 4 output.mp3
# Конвертация в WAV
ffmpeg -y -f s16le -ar 24000 -ac 1 -i output.pcm output.wav
# Конвертация в OGG
ffmpeg -y -f s16le -ar 24000 -ac 1 -i output.pcm -codec:a libvorbis output.ogg
Важные требования
При работе с генерацией аудио необходимо соблюдать следующие требования:
- Потоковый режим обязателен: Установите
"stream": trueв запросе - Указание модальностей: Обязательно укажите
"modalities": ["text", "audio"] - Конфигурация аудио: Необходимо указать объект
audioс параметрамиvoiceиformat - Обработка потока: Реализуйте корректную обработку SSE событий
Лучшие практики
- Выбор модели: Используйте
openai/gpt-audio-miniдля быстрой генерации,openai/gpt-audioдля более качественного результата - Выбор голоса: Тестируйте разные голоса для вашего use case - каждый голос имеет свои характеристики
- Обработка ошибок: Проверяйте статус ответа и корректность JSON в SSE событиях
- Хранение: Конвертируйте PCM в сжатые форматы (MP3, OGG) для экономии места
- Системные промпты: Используйте системные промпты для управления стилем и длиной ответа
- Буферизация: Накапливайте все chunks перед сохранением для получения полного аудио
Устранение неполадок
Нет аудио данных в ответе?
- Убедитесь, что установлен
"stream": true - Проверьте наличие
"modalities": ["text", "audio"]в запросе - Убедитесь, что объект
audioс параметрамиvoiceиformatуказан корректно
Ошибка при обработке потока?
- Проверьте корректность парсинга SSE формата (строки начинаются с
"data: ") - Убедитесь, что обрабатываете событие
"data: [DONE]"для завершения потока - Проверьте корректность декодирования base64 данных
Проблемы с воспроизведением аудио?
- Убедитесь, что используете правильные параметры для PCM16: 16-bit, mono, 24kHz
- Проверьте, что все chunks были корректно декодированы и объединены
- Используйте ffmpeg для конвертации в стандартные форматы (MP3, WAV)
Совместимость моделей
Генерация аудио доступна только для моделей OpenAI с поддержкой аудио выхода:
Для работы с аудио входными данными см. руководство Аудио входные данные.