×

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

 
С помощью SpeechKit Hybrid  можно синтезировать речь из текста.
 
  • Получите в Cloupard:
    - логин и пароль для доступа на стенд,
    - ссылку на метод распознавания аудио.
     
2. На основе логина и пароля сгенеририруйте токен доступа
(пример https://www.debugbear.com/basic-auth-header-generator).
 
3. Склонируйте репозиторий SpeechKit Hybrid:
4. Установите пакеты grpcio-tools и pydub с помощью менеджера пакетов pip:
pip install grpcio-tools && \
pip install pydub
Пакет grpcio-tools нужен для генерации кода интерфейса клиента синтеза. Пакет pydub нужен для обработки полученных аудиофайлов.
 
5. Перейдите в папку со склонированным репозиторием SpeechKit Hybrid, создайте папку 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.pytts_pb2_grpc.pytts_service_pb2.pytts_service_pb2_grpc.py и файлы зависимостей.
 
6. Создайте файл в корне папки output, например , скрипт speechkit_hybrid_tts.ру.
#pip install grpcio grpcio-tools для установки grpc
#pip install yandex-speechkit
#https://yandex.cloud/ru/docs/speechkit/tts/api/tts-examples-v3 установка описана здесь
 
import base64
import io
import grpc
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
 
TOKEN = '{{TOKEN}}'
TARGET = '{{TARGET}}'
TEXT_BASE64 = '{{TEXT}}'
RESULT_FILE_NAME= r'{{RESULT_FILE_NAME}}'
VOICE = '{{VOICE}}'
ROLE = '{{ROLE}}'
AUDIO_TYPE = '{{AUDIO_TYPE}}'
 
TEXT = base64.b64decode(TEXT_BASE64).decode('utf-8')
 
request = tts_pb2.UtteranceSynthesisRequest(
    text=TEXT,
    output_audio_spec=tts_pb2.AudioFormatOptions(
        container_audio=tts_pb2.ContainerAudio(
            container_audio_type=tts_pb2.ContainerAudio.OGG_OPUS if AUDIO_TYPE == 'OGG_OPUS' else tts_pb2.ContainerAudio.WAV if AUDIO_TYPE == 'WAV' else tts_pb2.ContainerAudio.MP3
        )
    ),
    # Параметры синтеза
    hints=[
        tts_pb2.Hints(voice= VOICE), # (Опционально) Задайте голос. Значение по умолчанию marina
        tts_pb2.Hints(role = ROLE), # (Опционально) Укажите амплуа, только если голос их имеет
        tts_pb2.Hints(speed=1.1), # (Опционально) Задайте скорость синтеза
    ],
 
    loudness_normalization_type=tts_pb2.UtteranceSynthesisRequest.LUFS
)
 
# Установите соединение с сервером.
cred = grpc.ssl_channel_credentials()
channel = grpc.secure_channel(TARGET, cred)
stub = tts_service_pb2_grpc.SynthesizerStub(channel)
 
# Отправьте данные для синтеза.
it = stub.UtteranceSynthesis(request, metadata=[('authorization', f'Basic {TOKEN}')], timeout=100000)
 
# Соберите аудиозапись по порциям.
 
errorText = None
 
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:
    errorText = f'Error code {err._state.code}, message: {err._state.details}'
   
if errorText is not None and errorText != "":
    print(f"ERROR: {errorText}")
else:
    with open(RESULT_FILE_NAME, 'wb') as fp:
        fp.write(audio.getvalue())
    print(f"RESULT: OK")
 
В этом скрипте:
  • параметр {{TOKEN}} - его нужно сгенерировать на основе полученного логина и пароля
  • параметр {{TARGET}} - имя метода TTS 
  • параметр {{TEXT}} - текст для синтеза аудио в формате Base64  в кодировке UTF-8
  • параметр {{RESULT_FILE_NAME}} - это полное имя результирующего файла (в него будет помещен результат синтеза)
  • параметр {{VOICE}} - выбранный голос диктора (например alexander)
  • параметр {{ROLE}} - выбранная роль диктора (например good)
  • параметр {{AUDIO_TYPE}} - выбранный тип аудио файла (WAV, OGG_OPUS или MP3)
 
_____
7. Выполните созданный в предыдущем пункте файл.
 
python3 output/speechkit_hybrid_tts.ру
 
В случае успеха результат синтеза будет помещен в файл с именем {{RESULT_FILE_NAME}} и в консоли будет "RESULT: OK".
В случае ошибки - "ERROR: <текст ошибки>"