1. Przegląd

Interfejs Text-to-Speech API umożliwia deweloperom generowanie mowy o jakości porównywalnej do tej, którą posługuje się człowiek. Interfejs API przekształca tekst na formaty audio, takie jak WAV, MP3 lub Ogg Opus. Obsługuje też dane wejściowe w języku znaczników syntezy mowy (SSML), aby określać pauzy, liczby, formatowanie daty i godziny oraz inne instrukcje dotyczące wymowy.
W tym samouczku skupisz się na używaniu interfejsu Text-to-Speech API w języku Python.
Czego się nauczysz
- Jak skonfigurować środowisko
- Jak podać listę obsługiwanych języków
- Jak wyświetlić listę dostępnych głosów
- Jak zsyntetyzować plik audio z tekstu
Czego potrzebujesz
Ankieta
Jak zamierzasz korzystać z tego samouczka?
Jak oceniasz swoje doświadczenie z Pythonem?
Jak oceniasz korzystanie z usług Google Cloud?
2. Konfiguracja i wymagania
Samodzielne konfigurowanie środowiska
- Zaloguj się w konsoli Google Cloud i utwórz nowy projekt lub użyj istniejącego. Jeśli nie masz jeszcze konta Gmail ani Google Workspace, musisz je utworzyć.



- Nazwa projektu to wyświetlana nazwa uczestników tego projektu. Jest to ciąg znaków, który nie jest używany przez interfejsy API Google. Zawsze możesz ją zaktualizować.
- Identyfikator projektu jest unikalny we wszystkich projektach Google Cloud i nie można go zmienić po ustawieniu. Konsola Cloud automatycznie generuje unikalny ciąg znaków. Zwykle nie musisz się tym przejmować. W większości ćwiczeń z programowania musisz odwoływać się do identyfikatora projektu (zwykle oznaczanego jako
PROJECT_ID). Jeśli wygenerowany identyfikator Ci się nie podoba, możesz wygenerować inny losowy identyfikator. Możesz też spróbować własnej nazwy i sprawdzić, czy jest dostępna. Po tym kroku nie można go zmienić i pozostaje on taki przez cały czas trwania projektu. - Warto wiedzieć, że istnieje też trzecia wartość, numer projektu, której używają niektóre interfejsy API. Więcej informacji o tych 3 wartościach znajdziesz w dokumentacji.
- Następnie musisz włączyć płatności w konsoli Cloud, aby korzystać z zasobów i interfejsów API Google Cloud. Wykonanie tego laboratorium nie będzie kosztować dużo, a może nawet nic. Aby wyłączyć zasoby i uniknąć naliczania opłat po zakończeniu tego samouczka, możesz usunąć utworzone zasoby lub projekt. Nowi użytkownicy Google Cloud mogą skorzystać z bezpłatnego okresu próbnego, w którym mają do dyspozycji środki w wysokości 300 USD.
Uruchamianie Cloud Shell
Z Google Cloud można korzystać zdalnie na laptopie, ale w tym module użyjemy Cloud Shell, czyli środowiska wiersza poleceń działającego w chmurze.
Aktywowanie Cloud Shell
- W konsoli Cloud kliknij Aktywuj Cloud Shell
.

Jeśli uruchamiasz Cloud Shell po raz pierwszy, zobaczysz ekran pośredni z opisem tego środowiska. Jeśli pojawił się ekran pośredni, kliknij Dalej.

Uzyskanie dostępu do środowiska Cloud Shell i połączenie się z nim powinno zająć tylko kilka chwil.

Ta maszyna wirtualna zawiera wszystkie potrzebne narzędzia dla programistów. Zawiera również stały katalog domowy o pojemności 5 GB i działa w Google Cloud, co znacznie zwiększa wydajność sieci i usprawnia proces uwierzytelniania. Większość zadań w tym module, a być może wszystkie, możesz wykonać w przeglądarce.
Po połączeniu z Cloud Shell zobaczysz, że uwierzytelnianie zostało już przeprowadzone, a projekt jest już ustawiony na Twój identyfikator projektu.
- Aby potwierdzić, że uwierzytelnianie zostało przeprowadzone, uruchom w Cloud Shell to polecenie:
gcloud auth list
Wynik polecenia
Credentialed Accounts
ACTIVE ACCOUNT
* <my_account>@<my_domain.com>
To set the active account, run:
$ gcloud config set account `ACCOUNT`
- Aby potwierdzić, że polecenie gcloud zna Twój projekt, uruchom w Cloud Shell to polecenie:
gcloud config list project
Wynik polecenia
[core] project = <PROJECT_ID>
Jeśli nie, możesz go ustawić za pomocą tego polecenia:
gcloud config set project <PROJECT_ID>
Wynik polecenia
Updated property [core/project].
3. Konfigurowanie środowiska
Zanim zaczniesz korzystać z interfejsu Text-to-Speech API, uruchom w Cloud Shell to polecenie, aby włączyć interfejs API:
gcloud services enable texttospeech.googleapis.com
Powinien pojawić się ekran podobny do tego:
Operation "operations/..." finished successfully.
Teraz możesz używać interfejsu Text-to-Speech API.
Przejdź do katalogu głównego:
cd ~
Utwórz środowisko wirtualne Pythona, aby odizolować zależności:
virtualenv venv-texttospeech
Aktywuj środowisko wirtualne:
source venv-texttospeech/bin/activate
Zainstaluj IPython i bibliotekę klienta Text-to-Speech API:
pip install ipython google-cloud-texttospeech
Powinien pojawić się ekran podobny do tego:
... Installing collected packages: ..., ipython, google-cloud-texttospeech Successfully installed ... google-cloud-texttospeech-2.16.3 ...
Teraz możesz używać biblioteki klienta Text-to-Speech API.
W kolejnych krokach użyjesz interaktywnego interpretera Pythona o nazwie IPython, który został zainstalowany w poprzednim kroku. Rozpocznij sesję, uruchamiając ipython w Cloud Shell:
ipython
Powinien pojawić się ekran podobny do tego:
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]:
Możesz już wysłać pierwsze żądanie i wyświetlić listę obsługiwanych języków.
4. Lista obsługiwanych języków
W tej sekcji znajdziesz listę wszystkich obsługiwanych języków.
Skopiuj ten kod do sesji 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 "")
Poświęć chwilę na zapoznanie się z kodem i zobacz, jak używa on metody biblioteki klienta list_voices do utworzenia listy obsługiwanych języków.
Wywołaj funkcję:
list_languages()
Powinna pojawić się lista podobna do tej (lub dłuższa):
---------------------- 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
Lista zawiera 58 języków i ich odmian, np.:
- chiński i tajwański mandaryński,
- angielski australijski, brytyjski, indyjski i amerykański,
- francuski z Kanady i Francji,
- portugalski z Brazylii i Portugalii.
Ta lista nie jest stała i powiększa się w miarę udostępniania nowych głosów.
Podsumowanie
Ten krok umożliwił Ci wyświetlenie listy obsługiwanych języków.
5. Wyświetlanie listy dostępnych głosów
W tej sekcji znajdziesz listę głosów dostępnych w różnych językach.
Skopiuj ten kod do sesji 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")
Poświęć chwilę na zapoznanie się z kodem i zobacz, jak używa on metody biblioteki klienta list_voices(language_code) do wyświetlania listy głosów dostępnych w danym języku.
Teraz pobierz listę dostępnych głosów w języku niemieckim:
list_voices("de")
Powinien pojawić się ekran podobny do tego:
------------------------ 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 ...
Dostępne są różne głosy żeńskie i męskie, a także głosy standardowe, WaveNet, Neural2 i Studio:
- Standardowe głosy są generowane przez algorytmy przetwarzania sygnałów.
- Głosy WaveNet, Neural2 i Studio to głosy o wyższej jakości, które są syntetyzowane przez modele uczenia maszynowego i brzmią bardziej naturalnie.
Teraz pobierz listę dostępnych głosów w języku angielskim:
list_voices("en")
Powinien pojawić się ekran podobny do tego:
------------------------ 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 ...
Oprócz wyboru wielu głosów o różnej płci i jakości dostępne są różne akcenty: australijski, brytyjski, indyjski i amerykański.
Poświęć chwilę na sporządzenie listy głosów dostępnych w preferowanych językach i ich wariantach (lub nawet we wszystkich):
list_voices("fr")
list_voices("pt")
list_voices()
Podsumowanie
Ten krok umożliwił wyświetlenie listy dostępnych głosów. Więcej informacji o obsługiwanych głosach i językach
6. Syntetyzowanie pliku audio z tekstu
Za pomocą interfejsu Text-to-Speech API możesz przekształcić ciąg znaków w dane audio. Możesz skonfigurować wyjście syntezy mowy na różne sposoby, np. wybrać unikalny głos lub dostosować wysokość głosu, głośność, szybkość mowy i częstotliwość próbkowania.
Skopiuj ten kod do sesji 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}"')
Poświęć chwilę na zapoznanie się z kodem i zobacz, jak za pomocą metody biblioteki klienta synthesize_speech generuje dane audio i zapisuje je w pliku wav.
Teraz wygeneruj zdania z kilkoma różnymi akcentami:
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 ?")
Powinien pojawić się ekran podobny do tego:
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"
Aby pobrać wszystkie wygenerowane pliki naraz, możesz użyć tego polecenia Cloud Shell w środowisku Pythona:
!cloudshell download *.wav
Sprawdź, a przeglądarka pobierze pliki:

Otwórz każdy plik i posłuchaj wyniku.
Podsumowanie
W tym kroku udało Ci się przekonwertować zdania na pliki audio wav za pomocą interfejsu Text-to-Speech API. Dowiedz się więcej o tworzeniu plików audio z głosem.
7. Gratulacje!

Wiesz już, jak używać interfejsu Text-to-Speech API w Pythonie do generowania mowy o brzmieniu zbliżonym do ludzkiego.
Czyszczenie danych
Aby wyczyścić środowisko programistyczne, w Cloud Shell:
- Jeśli nadal korzystasz z sesji IPython, wróć do powłoki:
exit - Przestań używać środowiska wirtualnego Pythona:
deactivate - Usuń folder środowiska wirtualnego:
cd ~ ; rm -rf ./venv-texttospeech
Aby usunąć projekt Google Cloud, w Cloud Shell:
- Pobierz bieżący identyfikator projektu:
PROJECT_ID=$(gcloud config get-value core/project) - Sprawdź, czy to jest projekt, który chcesz usunąć:
echo $PROJECT_ID - Usuń projekt:
gcloud projects delete $PROJECT_ID
Więcej informacji
- Wypróbuj wersję demonstracyjną w przeglądarce: https://cloud.google.com/text-to-speech
- Dokumentacja Text-to-Speech: https://cloud.google.com/text-to-speech/docs
- Python w Google Cloud: https://cloud.google.com/python
- Biblioteki klienta Google Cloud do Pythona: https://github.com/googleapis/google-cloud-python
Licencja
To zadanie jest licencjonowane na podstawie ogólnej licencji Creative Commons Attribution 2.0.