Yandex Cloud
Поиск
Связаться с намиПодключиться
  • Документация
  • Блог
  • Все сервисы
  • Статус работы сервисов
    • Популярные
    • Инфраструктура и сеть
    • Платформа данных
    • Контейнеры
    • Инструменты разработчика
    • Бессерверные вычисления
    • Безопасность
    • Мониторинг и управление ресурсами
    • Машинное обучение
    • Бизнес-инструменты
  • Все решения
    • По отраслям
    • По типу задач
    • Экономика платформы
    • Безопасность
    • Техническая поддержка
    • Каталог партнёров
    • Обучение и сертификация
    • Облако для стартапов
    • Облако для крупного бизнеса
    • Центр технологий для общества
    • Облако для интеграторов
    • Поддержка IT-бизнеса
    • Облако для фрилансеров
    • Обучение и сертификация
    • Блог
    • Документация
    • Контент-программа
    • Мероприятия и вебинары
    • Контакты, чаты и сообщества
    • Идеи
    • Истории успеха
    • Тарифы Yandex Cloud
    • Промоакции и free tier
    • Правила тарификации
  • Документация
  • Блог
Проект Яндекса
© 2025 ООО «Яндекс.Облако»
Yandex SpeechKit
  • Обзор технологий SpeechKit
    • Распознавание речи с помощью Playground
    • Синтез речи с помощью Playground
      • Синтез речи в API v3
      • Синтез речи в REST API v3
      • Синтез речи по шаблонам
      • Синтез речи по шаблонам Brand Voice Call Center
      • Синтез речи в формате WAV — API v1
      • Синтез речи в формате OggOpus — API v1
      • Синтез речи из текста SSML — API v1
  • Поддерживаемые форматы аудио
  • Интеграция телефонии
  • Квоты и лимиты
  • Управление доступом
  • Правила тарификации
  1. Пошаговые инструкции
  2. Синтез
  3. Синтез речи в API v3

Синтез речи в API v3

Статья создана
Yandex Cloud
Улучшена
Обновлена 7 марта 2025 г.

С помощью SpeechKit API v3 можно синтезировать речь из текста в TTS-разметке в файл формата WAV.

В примере заданы следующие параметры синтеза:

  • формат синтезированного аудиофайла — LPCM с частотой дискретизации 22 050 Гц, контейнер WAV (значение по умолчанию);
  • нормализация громкости — LUFS (значение по умолчанию).

Преобразование и запись результата выполняются с помощью пакетов grpcio-tools и pydub и утилиты FFmpeg.

Аутентификация происходит от имени сервисного аккаунта с помощью API-ключа или IAM-токена. Подробнее об аутентификации в API SpeechKit см. Аутентификация в API SpeechKit.

Чтобы реализовать пример:

  1. Создайте сервисный аккаунт для работы с API SpeechKit.

  2. Назначьте сервисному аккаунту роль ai.speechkit-tts.user или выше на каталог, в котором он был создан.

  3. Получите API-ключ или IAM-токен для сервисного аккаунта.

  4. Создайте клиентское приложение:

    Python 3
    Java
    1. Склонируйте репозиторий Yandex Cloud API:

      git clone https://github.com/yandex-cloud/cloudapi
      
    2. Установите пакеты grpcio-tools и pydub с помощью менеджера пакетов pip:

      pip install grpcio-tools && \
      pip install pydub
      

      Пакет grpcio-tools нужен для генерации кода интерфейса клиента API v3 синтеза. Пакет pydub нужен для обработки полученных аудиофайлов.

    3. Скачайте утилиту FFmpeg для корректной работы пакета pydub. Добавьте путь к папке, в которой находится исполняемый файл, в переменную PATH. Для этого выполните команду:

      export PATH=$PATH:<путь_к_папке_с_исполняемым_файлом_FFmpeg>
      
    4. Перейдите в папку со склонированным репозиторием Yandex Cloud API, создайте папку output и сгенерируйте в ней код интерфейса клиента:

      cd <путь_к_папке_cloudapi>
      mkdir output
      python3 -m grpc_tools.protoc -I . -I third_party/googleapis \
        --python_out=output \
        --grpc_python_out=output \
        google/api/http.proto \
        google/api/annotations.proto \
        yandex/cloud/api/operation.proto \
        google/rpc/status.proto \
        yandex/cloud/operation/operation.proto \
        yandex/cloud/validation.proto \
        yandex/cloud/ai/tts/v3/tts_service.proto \
        yandex/cloud/ai/tts/v3/tts.proto
      

      В результате в папке output будут созданы файлы с интерфейсом клиента: tts_pb2.py, tts_pb2_grpc.py, tts_service_pb2.py, tts_service_pb2_grpc.py и файлы зависимостей.

    5. Создайте файл в корне папки output, например test.py, и добавьте в него следующий код:

      import io
      import grpc
      import pydub
      import argparse
      
      import yandex.cloud.ai.tts.v3.tts_pb2 as tts_pb2
      import yandex.cloud.ai.tts.v3.tts_service_pb2_grpc as tts_service_pb2_grpc
      
      # Задайте настройки синтеза.
      # Вместо iam_token передавайте api_key при аутентификации с API-ключом
      #def synthesize(api_key, text) -> pydub.AudioSegment:
      def synthesize(iam_token, text) -> pydub.AudioSegment:
          request = tts_pb2.UtteranceSynthesisRequest(
              text=text,
              output_audio_spec=tts_pb2.AudioFormatOptions(
                  container_audio=tts_pb2.ContainerAudio(
                      container_audio_type=tts_pb2.ContainerAudio.WAV
                  )
              ),
              # Параметры синтеза
              hints=[
                tts_pb2.Hints(voice= 'alexander'), # (Опционально) Задайте голос. Значение по умолчанию marina
                tts_pb2.Hints(role = 'good'), # (Опционально) Укажите амплуа, только если голос их имеет
                tts_pb2.Hints(speed=1.1), # (Опционально) Задайте скорость синтеза
              ],
      
              loudness_normalization_type=tts_pb2.UtteranceSynthesisRequest.LUFS
          )
      
          # Установите соединение с сервером.
          cred = grpc.ssl_channel_credentials()
          channel = grpc.secure_channel('tts.api.cloud.yandex.net:443', cred)
          stub = tts_service_pb2_grpc.SynthesizerStub(channel)
      
          # Отправьте данные для синтеза.
          it = stub.UtteranceSynthesis(request, metadata=(
      
          # Параметры для аутентификации с IAM-токеном
              ('authorization', f'Bearer {iam_token}'),
          # Параметры для аутентификации с API-ключом от имени сервисного аккаунта
          #   ('authorization', f'Api-Key {api_key}'),
          ))
      
          # Соберите аудиозапись по порциям.
          try:
              audio = io.BytesIO()
              for response in it:
                  audio.write(response.audio_chunk.data)
              audio.seek(0)
              return pydub.AudioSegment.from_wav(audio)
          except grpc._channel._Rendezvous as err:
              print(f'Error code {err._state.code}, message: {err._state.details}')
              raise err
      
      
      if __name__ == '__main__':
          parser = argparse.ArgumentParser()
          parser.add_argument('--token', required=True, help='IAM token or API key')
          parser.add_argument('--text', required=True, help='Text for synthesis')
          parser.add_argument('--output', required=True, help='Output file')
          args = parser.parse_args()
      
          audio = synthesize(args.token, args.text)
          with open(args.output, 'wb') as fp:
              audio.export(fp, format='wav')
      
    6. Выполните созданный в предыдущем пункте файл:

      export IAM_TOKEN=<IAM-токен_сервисного_аккаунта>
      export TEXT='Я Яндекс Спичк+ит. Я могу превратить любой текст в речь. Теперь и в+ы — можете!'
      python3 output/test.py \
        --token ${IAM_TOKEN} \
        --output speech.wav \
        --text ${TEXT}
      

      Где:

      • IAM_TOKEN — IAM-токен сервисного аккаунта. Если для аутентификации от имени сервисного аккаунта вы используйте API-ключ, измените код Python-скрипта и вызов программы.
      • TEXT — текст в TTS-разметке, который нужно синтезировать.
      • --output — имя файла для записи аудио.

      В результате в папке cloudapi будет создан файл speech.wav с синтезированной речью.

    1. Установите зависимости:

      sudo apt update && sudo apt install --yes default-jdk maven
      
    2. Склонируйте репозиторий с конфигурацией для приложения на Java:

      git clone https://github.com/yandex-cloud-examples/yc-speechkit-tts-java
      
    3. Перейдите в папку репозитория:

      cd yc-speechkit-tts-java
      
    4. Скомпилируйте проект в этой папке:

      mvn clean install
      
    5. Перейдите в созданную папку target:

      cd target
      
    6. Задайте API-ключ сервисного аккаунта и текст, который надо синтезировать:

      export API_KEY=<API-ключ> && \
      export TEXT='Я Яндекс Спичк+ит. Я могу превратить любой текст в речь. Теперь и в+ы — можете!'
      
    7. Запустите Java-скрипт для синтеза речи:

      java -cp speechkit_examples-1.0-SNAPSHOT.jar yandex.cloud.speechkit.examples.TtsV3Client ${TEXT}
      

      В результате в папке target появится аудиофайл result.wav. В него записана речь из переменной окружения TEXT.

См. такжеСм. также

  • Подробнее про API v3
  • Аутентификация в API SpeechKit
  • Синтез речи с помощью Python SDK

Была ли статья полезна?

Предыдущая
Регулярное асинхронное распознавание аудиофайлов — API v2
Следующая
Синтез речи в REST API v3
Проект Яндекса
© 2025 ООО «Яндекс.Облако»