Облачная платформаEvolution

Озвучить текст через Realtime API

Эта статья полезна?

В инструкции описано, как с помощью Realtime API Foundation Models преобразовать текст в речь. Realtime API работает по протоколу WebSocket: устанавливает соединение с сервером, отправляет запрос на генерацию и получает аудио частями по мере синтеза.

Перед началом работы

  1. Аутентифицируйтесь в API.

  2. Сохраните сгенерированный API-ключ в переменную окружения API_KEY:

    export API_KEY="<api_key>"
  3. Установите библиотеку websocket-client:

    pip install websocket-client

Озвучить текст

  1. Создайте файл, например speech.py, и выполните в нем следующее:

    1. Импортируйте необходимые библиотеки:

      import base64
      import json
      import os
      import wave
      from websocket import create_connection
    2. Задайте параметры подключения и голос озвучки:

      api_key = os.environ["API_KEY"]
      url = "wss://foundation-models.api.cloud.ru/v1/realtime"
      voice = "<your_voice>"

      Где <your_voice> — выбранный голос озвучки. Укажите один из доступных голосов.

      Примечание

      Нельзя изменить голос сессии с помощью события session.update после получения первого аудио.

    3. Установите WebSocket-соединение:

      ws = create_connection(
      url,
      header=[f"Authorization: Bearer {api_key}"],
      suppress_origin=True,
      timeout=60,
      )
      audio = bytearray()
    4. Отправьте запрос на генерацию речи:

      try:
      ws.send(json.dumps({
      "type": "response.create",
      "model": "GigaChat/SaluteSpeech",
      "response": {
      "output_modalities": ["audio"],
      "audio": {
      "output": {
      "format": {"type": "audio/pcm", "rate": 24000},
      "voice": voice,
      "speed": 1.0
      }
      },
      "input": [
      {
      "type": "message",
      "role": "user",
      "content": [
      {"type": "input_text", "text": "<text_to_speech>"}
      ]
      }
      ]
      }
      }))

      Где <text_to_speech> — текст, который необходимо озвучить.

      При синтезе текста учитывайте следующее:

      • Длина текста для одной генерации не должна превышать 16 384 символа.

      • Общий объем накопленного диалога не должен превышать 65 536 символов.

      • Доступные языки озвучки: русский, английский.

    5. Получите аудио и сохраните результат в WAV-файл:

      while True:
      message = ws.recv()
      if not message:
      raise RuntimeError("Соединение закрыто до завершения генерации")
      event = json.loads(message)
      if event["type"] == "response.output_audio.delta":
      audio.extend(base64.b64decode(event["delta"]))
      elif event["type"] == "error":
      raise RuntimeError(event)
      elif event["type"] == "response.done":
      if event.get("response", {}).get("status") in {"failed", "cancelled", "incomplete"}:
      raise RuntimeError(event)
      break
      finally:
      ws.close()
      if not audio:
      raise RuntimeError("Сервер не вернул аудио")
      with wave.open("speech.wav", "wb") as f:
      f.setnchannels(1)
      f.setsampwidth(2)
      f.setframerate(24000)
      f.writeframes(audio)
      print("Аудио сохранено в speech.wav")
  2. Выполните команду:

    python3 speech.py

    Пример вывода:

    Аудио сохранено в speech.wav

    Файл speech.wav появится в каталоге, из которого запущен скрипт.

Доступные голоса

В запросе можно использовать один из следующих голосов:

Голос

Описание

Mer-Operator

Мужской молодой голос с высоким звонким тембром. Быстрый темп речи, ровная интонация без выраженной эмоциональной окраски.

Kaz-Lifelike

Женский голос. Быстрый темп речи, ровная интонация без выраженной эмоциональной окраски.

Tsb-Freespeech

Мужской голос. Размеренный темп речи, ровная, четкая интонация.

Tsb-Hesitating

Мужской голос. Медленный темп речи, ровная, четкая интонация.

Gli-Operator

Женский молодой голос с высоким звонким тембром. Быстрый темп речи, ровная интонация без выраженной эмоциональной окраски.

Gli-Freespeech

Женский молодой голос. Размеренный темп речи, ровная, четкая интонация.

Bab-Debate

Женский голос со средним тембром. Спокойная манера речи с выразительной интонацией.

Bab-Energetic

Женский голос со средним тембром. Уверенная манера речи.

Bab-Freespeech

Женский голос со средним тембром. Манера речи дружелюбная и выразительная: интонация живая, с заметными эмоциональными акцентами.