1. Обзор

API преобразования текста в речь позволяет разработчикам генерировать речь, максимально приближенную к человеческой. API преобразует текст в аудиоформаты, такие как WAV, MP3 или Ogg Opus. Он также поддерживает ввод данных на языке разметки синтеза речи (SSML) для указания пауз, чисел, форматирования даты и времени, а также других инструкций по произношению.
В этом руководстве вы сосредоточитесь на использовании API преобразования текста в речь с помощью Python.
Что вы узнаете
- Как настроить свою среду
- Как перечислить поддерживаемые языки
- Как составить список доступных голосов
- Как синтезировать аудио из текста
Что вам понадобится
Опрос
Как вы будете использовать этот учебный материал?
Как бы вы оценили свой опыт работы с Python?
Как бы вы оценили свой опыт использования сервисов Google Cloud?
2. Настройка и требования
Настройка среды для самостоятельного обучения
- Войдите в консоль Google Cloud и создайте новый проект или используйте существующий. Если у вас еще нет учетной записи Gmail или Google Workspace, вам необходимо ее создать .



- Название проекта — это отображаемое имя участников данного проекта. Это строка символов, не используемая API Google. Вы всегда можете его изменить.
- Идентификатор проекта уникален для всех проектов Google Cloud и является неизменяемым (его нельзя изменить после установки). Консоль Cloud автоматически генерирует уникальную строку; обычно вам неважно, какая она. В большинстве практических заданий вам потребуется указать идентификатор вашего проекта (обычно обозначается как
PROJECT_ID). Если сгенерированный идентификатор вас не устраивает, вы можете сгенерировать другой случайный идентификатор. В качестве альтернативы вы можете попробовать свой собственный и посмотреть, доступен ли он. После этого шага его нельзя изменить, и он сохраняется на протяжении всего проекта. - К вашему сведению, существует третье значение — номер проекта , которое используется некоторыми API. Подробнее обо всех трех значениях можно узнать в документации .
- Далее вам потребуется включить оплату в консоли Cloud для использования ресурсов/API Cloud. Выполнение этого практического задания не потребует больших затрат, если вообще потребует. Чтобы отключить ресурсы и избежать дополнительных расходов после завершения этого урока, вы можете удалить созданные ресурсы или удалить проект. Новые пользователи Google Cloud имеют право на бесплатную пробную версию стоимостью 300 долларов США .
Запустить Cloud Shell
Хотя Google Cloud можно управлять удаленно с ноутбука, в этом практическом занятии вы будете использовать Cloud Shell — среду командной строки, работающую в облаке.
Активировать Cloud Shell
- В консоли Cloud нажмите «Активировать Cloud Shell» .
.

Если вы запускаете Cloud Shell впервые, вам будет показан промежуточный экран с описанием его возможностей. Если вам был показан промежуточный экран, нажмите «Продолжить» .

Подготовка и подключение к Cloud Shell займут всего несколько минут.

Эта виртуальная машина оснащена всеми необходимыми инструментами разработки. Она предоставляет постоянный домашний каталог объемом 5 ГБ и работает в облаке Google, что значительно повышает производительность сети и аутентификацию. Большая часть, если не вся, ваша работа в этом практическом задании может быть выполнена с помощью браузера.
После подключения к Cloud Shell вы увидите, что прошли аутентификацию и что проект настроен на ваш идентификатор проекта.
- Выполните следующую команду в Cloud Shell, чтобы подтвердить свою аутентификацию:
gcloud auth list
вывод команды
Credentialed Accounts
ACTIVE ACCOUNT
* <my_account>@<my_domain.com>
To set the active account, run:
$ gcloud config set account `ACCOUNT`
- Выполните следующую команду в Cloud Shell, чтобы убедиться, что команда gcloud знает о вашем проекте:
gcloud config list project
вывод команды
[core] project = <PROJECT_ID>
Если это не так, вы можете установить это с помощью следующей команды:
gcloud config set project <PROJECT_ID>
вывод команды
Updated property [core/project].
3. Настройка среды
Прежде чем начать использовать API преобразования текста в речь, выполните следующую команду в Cloud Shell, чтобы включить API:
gcloud services enable texttospeech.googleapis.com
Вы должны увидеть что-то подобное:
Operation "operations/..." finished successfully.
Теперь вы можете использовать API преобразования текста в речь!
Перейдите в свою домашнюю директорию:
cd ~
Создайте виртуальное окружение Python для изоляции зависимостей:
virtualenv venv-texttospeech
Активируйте виртуальную среду:
source venv-texttospeech/bin/activate
Установите IPython и клиентскую библиотеку Text-to-Speech API:
pip install ipython google-cloud-texttospeech
Вы должны увидеть что-то подобное:
... Installing collected packages: ..., ipython, google-cloud-texttospeech Successfully installed ... google-cloud-texttospeech-2.16.3 ...
Теперь вы готовы использовать клиентскую библиотеку API преобразования текста в речь!
На следующих шагах вы будете использовать интерактивный интерпретатор Python под названием IPython , который вы установили на предыдущем шаге. Чтобы начать сессию, запустите ipython в Cloud Shell:
ipython
Вы должны увидеть что-то подобное:
Python 3.9.2 (default, Feb 28 2021, 17:03:44) Type 'copyright', 'credits' or 'license' for more information IPython 8.18.1 -- An enhanced Interactive Python. Type '?' for help. In [1]:
Вы готовы отправить свой первый запрос и перечислить поддерживаемые языки...
4. Перечислите поддерживаемые языки.
В этом разделе вы найдете список всех поддерживаемых языков.
Скопируйте следующий код в свою сессию IPython:
from typing import Sequence
import google.cloud.texttospeech as tts
def unique_languages_from_voices(voices: Sequence[tts.Voice]):
language_set = set()
for voice in voices:
for language_code in voice.language_codes:
language_set.add(language_code)
return language_set
def list_languages():
client = tts.TextToSpeechClient()
response = client.list_voices()
languages = unique_languages_from_voices(response.voices)
print(f" Languages: {len(languages)} ".center(60, "-"))
for i, language in enumerate(sorted(languages)):
print(f"{language:>10}", end="\n" if i % 5 == 4 else "")
Уделите немного времени изучению кода и посмотрите, как он использует метод клиентской библиотеки list_voices для создания списка поддерживаемых языков.
Вызовите функцию:
list_languages()
В результате вы должны получить следующий (или более обширный) список:
---------------------- Languages: 58 -----------------------
af-ZA am-ET ar-XA bg-BG bn-IN
ca-ES cmn-CN cmn-TW cs-CZ da-DK
de-DE el-GR en-AU en-GB en-IN
en-US es-ES es-US eu-ES fi-FI
fil-PH fr-CA fr-FR gl-ES gu-IN
he-IL hi-IN hu-HU id-ID is-IS
it-IT ja-JP kn-IN ko-KR lt-LT
lv-LV ml-IN mr-IN ms-MY nb-NO
nl-BE nl-NL pa-IN pl-PL pt-BR
pt-PT ro-RO ru-RU sk-SK sr-RS
sv-SE ta-IN te-IN th-TH tr-TR
uk-UA vi-VN yue-HK
В списке представлены 58 языков и их варианты, такие как:
- Китайский и тайваньский мандаринский диалект.
- Австралийский, британский, индийский и американский английский.
- Французы из Канады и Франции.
- Португальцы из Бразилии и Португалии.
Этот список не является окончательным и пополняется по мере появления новых голосов.
Краткое содержание
Этот шаг позволил вам составить список поддерживаемых языков.
5. Перечислите доступные голоса.
В этом разделе вы найдете список голосов, доступных на разных языках.
Скопируйте следующий код в свою сессию IPython:
import google.cloud.texttospeech as tts
def list_voices(language_code=None):
client = tts.TextToSpeechClient()
response = client.list_voices(language_code=language_code)
voices = sorted(response.voices, key=lambda voice: voice.name)
print(f" Voices: {len(voices)} ".center(60, "-"))
for voice in voices:
languages = ", ".join(voice.language_codes)
name = voice.name
gender = tts.SsmlVoiceGender(voice.ssml_gender).name
rate = voice.natural_sample_rate_hertz
print(f"{languages:<8} | {name:<24} | {gender:<8} | {rate:,} Hz")
Уделите немного времени изучению кода и посмотрите, как он использует метод клиентской библиотеки list_voices(language_code) для вывода списка голосов, доступных для заданного языка.
Теперь получите список доступных немецких голосов:
list_voices("de")
Вы должны увидеть что-то подобное:
------------------------ Voices: 20 ------------------------ de-DE | de-DE-Neural2-A | FEMALE | 24,000 Hz de-DE | de-DE-Neural2-B | MALE | 24,000 Hz ... de-DE | de-DE-Standard-A | FEMALE | 24,000 Hz de-DE | de-DE-Standard-B | MALE | 24,000 Hz ... de-DE | de-DE-Studio-B | MALE | 24,000 Hz de-DE | de-DE-Studio-C | FEMALE | 24,000 Hz de-DE | de-DE-Wavenet-A | FEMALE | 24,000 Hz de-DE | de-DE-Wavenet-B | MALE | 24,000 Hz ...
Доступны различные женские и мужские голоса, а также стандартные голоса, голоса WaveNet, Neural2 и Studio:
- Стандартные голоса генерируются алгоритмами обработки сигналов.
- Голоса WaveNet, Neural2 и Studio — это голоса более высокого качества, синтезированные с помощью моделей машинного обучения и звучащие более естественно.
Теперь получите список доступных англоязычных голосов:
list_voices("en")
В итоге у вас должно получиться что-то подобное:
------------------------ Voices: 90 ------------------------ en-AU | en-AU-Neural2-A | FEMALE | 24,000 Hz ... en-AU | en-AU-Wavenet-A | FEMALE | 24,000 Hz ... en-GB | en-GB-Neural2-A | FEMALE | 24,000 Hz ... en-GB | en-GB-Wavenet-A | FEMALE | 24,000 Hz ... en-IN | en-IN-Standard-A | FEMALE | 24,000 Hz ... en-IN | en-IN-Wavenet-A | FEMALE | 24,000 Hz ... en-US | en-US-Neural2-A | MALE | 24,000 Hz ... en-US | en-US-News-K | FEMALE | 24,000 Hz ... en-US | en-US-Standard-A | MALE | 24,000 Hz ... en-US | en-US-Studio-M | MALE | 24,000 Hz ... en-US | en-US-Wavenet-A | MALE | 24,000 Hz ...
Помимо выбора нескольких голосов разного пола и качества, доступны различные акценты: австралийский, британский, индийский и американский английский.
Уделите немного времени, чтобы перечислить доступные голоса для предпочитаемых вами языков и вариантов (или даже для всех):
list_voices("fr")
list_voices("pt")
list_voices()
Краткое содержание
На этом шаге вы могли просмотреть список доступных голосов. Подробнее о поддерживаемых голосах и языках можно узнать здесь.
6. Синтез аудио из текста.
Вы можете использовать API преобразования текста в речь для преобразования строки в аудиоданные. Вы можете настроить выходные данные синтеза речи различными способами, включая выбор уникального голоса или модуляцию выходного сигнала по высоте тона, громкости, скорости речи и частоте дискретизации .
Скопируйте следующий код в свою сессию IPython:
import google.cloud.texttospeech as tts
def text_to_wav(voice_name: str, text: str):
language_code = "-".join(voice_name.split("-")[:2])
text_input = tts.SynthesisInput(text=text)
voice_params = tts.VoiceSelectionParams(
language_code=language_code, name=voice_name
)
audio_config = tts.AudioConfig(audio_encoding=tts.AudioEncoding.LINEAR16)
client = tts.TextToSpeechClient()
response = client.synthesize_speech(
input=text_input,
voice=voice_params,
audio_config=audio_config,
)
filename = f"{voice_name}.wav"
with open(filename, "wb") as out:
out.write(response.audio_content)
print(f'Generated speech saved to "{filename}"')
Уделите немного времени изучению кода и посмотрите, как он использует метод клиентской библиотеки synthesize_speech для генерации аудиоданных и сохранения их в виде файла wav .
Теперь составьте предложения с несколькими разными акцентами:
text_to_wav("en-AU-Neural2-A", "What is the temperature in Sydney?")
text_to_wav("en-GB-Neural2-B", "What is the temperature in London?")
text_to_wav("en-IN-Wavenet-C", "What is the temperature in Delhi?")
text_to_wav("en-US-Studio-O", "What is the temperature in New York?")
text_to_wav("fr-FR-Neural2-A", "Quelle est la température à Paris ?")
text_to_wav("fr-CA-Neural2-B", "Quelle est la température à Montréal ?")
Вы должны увидеть что-то подобное:
Generated speech saved to "en-AU-Neural2-A.wav" Generated speech saved to "en-GB-Neural2-B.wav" Generated speech saved to "en-IN-Wavenet-C.wav" Generated speech saved to "en-US-Studio-O.wav" Generated speech saved to "fr-FR-Neural2-A.wav" Generated speech saved to "fr-CA-Neural2-B.wav"
Чтобы загрузить все сгенерированные файлы одновременно, вы можете использовать следующую команду Cloud Shell из вашей среды Python:
!cloudshell download *.wav
Подтвердите действие, и ваш браузер загрузит файлы:


Откройте каждый файл и послушайте результат.
Краткое содержание
На этом этапе вы смогли использовать API преобразования текста в речь для конвертации предложений в аудиофайлы формата wav . Подробнее о создании голосовых аудиофайлов читайте здесь.
7. Поздравляем!

Вы научились использовать API преобразования текста в речь на языке Python для генерации речи, максимально приближенной к человеческой!
Уборка
Для очистки среды разработки используйте Cloud Shell:
- Если вы всё ещё находитесь в сессии IPython, вернитесь в командную оболочку:
exit - Прекратите использование виртуальной среды Python:
deactivate - Удалите папку виртуального окружения:
cd ~ ; rm -rf ./venv-texttospeech
Чтобы удалить свой проект Google Cloud, используйте Cloud Shell:
- Получите текущий идентификатор проекта:
PROJECT_ID=$(gcloud config get-value core/project) - Убедитесь, что это именно тот проект, который вы хотите удалить:
echo $PROJECT_ID - Удалите проект:
gcloud projects delete $PROJECT_ID
Узнать больше
- Протестируйте демоверсию в своем браузере: https://cloud.google.com/text-to-speech
- Документация по преобразованию текста в речь: https://cloud.google.com/text-to-speech/docs
- Python в Google Cloud: https://cloud.google.com/python
- Клиентские библиотеки для облачных сервисов на Python: https://github.com/googleapis/google-cloud-python
Лицензия
Данная работа распространяется под лицензией Creative Commons Attribution 2.0 Generic.