Загрузка...

Генерация аудио

Генерируйте аудио ответ с помощью AI-моделей через RouterAI API.

RouterAI поддерживает генерацию аудио через модели OpenAI с возможностями аудио выхода. Эти модели могут создавать речевые ответы из текстовых промптов в потоковом режиме.

Доступные модели

Для генерации аудио доступны следующие модели OpenAI:

  • openai/gpt-audio - GPT Audio
  • openai/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, которые необходимо:

  1. Декодировать из base64
  2. Накопить все chunks
  3. Сохранить как PCM файл
  4. При необходимости конвертировать в другой формат (например, 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

Важные требования

При работе с генерацией аудио необходимо соблюдать следующие требования:

  1. Потоковый режим обязателен: Установите "stream": true в запросе
  2. Указание модальностей: Обязательно укажите "modalities": ["text", "audio"]
  3. Конфигурация аудио: Необходимо указать объект audio с параметрами voice и format
  4. Обработка потока: Реализуйте корректную обработку 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 с поддержкой аудио выхода:

Для работы с аудио входными данными см. руководство Аудио входные данные.