1. Panoramica

L'API Text-to-Speech consente agli sviluppatori di generare un discorso con un'intonazione simile a quella umana. L'API converte il testo in formati audio come WAV, MP3 o Ogg Opus. Supporta anche gli input SSML (Speech Synthesis Markup Language) per specificare pause, numeri, formattazione di data e ora e altre istruzioni relative alla pronuncia.
In questo tutorial ti concentrerai sull'utilizzo dell'API Text-to-Speech con Python.
Cosa imparerai a fare
- Come configurare l'ambiente
- Come elencare le lingue supportate
- Come elencare le voci disponibili
- Come sintetizzare l'audio dal testo
Che cosa ti serve
- Un progetto Google Cloud
- Un browser, ad esempio Chrome o Firefox
- Familiarità con l'utilizzo di Python
Sondaggio
Come utilizzerai questo tutorial?
Come valuteresti la tua esperienza con Python?
Come valuteresti la tua esperienza con i servizi Google Cloud?
2. Configurazione e requisiti
Configurazione dell'ambiente autonomo
- Accedi alla console Google Cloud e crea un nuovo progetto o riutilizzane uno esistente. Se non hai ancora un account Gmail o Google Workspace, devi crearne uno.



- Il nome del progetto è il nome visualizzato per i partecipanti a questo progetto. È una stringa di caratteri non utilizzata dalle API di Google. Puoi sempre aggiornarlo.
- L'ID progetto è univoco in tutti i progetti Google Cloud ed è immutabile (non può essere modificato dopo l'impostazione). La console Cloud genera automaticamente una stringa univoca, di solito non ti interessa di cosa si tratta. Nella maggior parte dei codelab, dovrai fare riferimento all'ID progetto (in genere identificato come
PROJECT_ID). Se l'ID generato non ti piace, puoi generarne un altro casuale. In alternativa, puoi provare a crearne uno e vedere se è disponibile. Non può essere modificato dopo questo passaggio e rimane per tutta la durata del progetto. - Per tua informazione, esiste un terzo valore, un numero di progetto, utilizzato da alcune API. Scopri di più su tutti e tre questi valori nella documentazione.
- Successivamente, devi abilitare la fatturazione in Cloud Console per utilizzare le risorse/API Cloud. Completare questo codelab non costa molto, se non nulla. Per arrestare le risorse ed evitare addebiti oltre a quelli previsti in questo tutorial, puoi eliminare le risorse che hai creato o il progetto. I nuovi utenti di Google Cloud possono beneficiare del programma prova senza costi di 300$.
Avvia Cloud Shell
Sebbene Google Cloud possa essere gestito da remoto dal tuo laptop, in questo codelab utilizzerai Cloud Shell, un ambiente a riga di comando in esecuzione nel cloud.
Attiva Cloud Shell
- Nella console Cloud, fai clic su Attiva Cloud Shell
.

Se è la prima volta che avvii Cloud Shell, viene visualizzata una schermata intermedia che ne descrive le funzionalità. Se è stata visualizzata una schermata intermedia, fai clic su Continua.

Bastano pochi istanti per eseguire il provisioning e connettersi a Cloud Shell.

Questa macchina virtuale è caricata con tutti gli strumenti di sviluppo necessari. Offre una home directory permanente da 5 GB e viene eseguita in Google Cloud, migliorando notevolmente le prestazioni e l'autenticazione della rete. Gran parte del lavoro per questo codelab, se non tutto, può essere svolto con un browser.
Una volta eseguita la connessione a Cloud Shell, dovresti vedere che il tuo account è autenticato e il progetto è impostato sul tuo ID progetto.
- Esegui questo comando in Cloud Shell per verificare che l'account sia autenticato:
gcloud auth list
Output comando
Credentialed Accounts
ACTIVE ACCOUNT
* <my_account>@<my_domain.com>
To set the active account, run:
$ gcloud config set account `ACCOUNT`
- Esegui questo comando in Cloud Shell per verificare che il comando gcloud conosca il tuo progetto:
gcloud config list project
Output comando
[core] project = <PROJECT_ID>
In caso contrario, puoi impostarlo con questo comando:
gcloud config set project <PROJECT_ID>
Output comando
Updated property [core/project].
3. Configurazione dell'ambiente
Prima di poter iniziare a utilizzare l'API Text-to-Speech, esegui il comando seguente in Cloud Shell per abilitare l'API:
gcloud services enable texttospeech.googleapis.com
Il risultato dovrebbe essere simile a questo:
Operation "operations/..." finished successfully.
Ora puoi utilizzare l'API Text-to-Speech.
Vai alla home directory:
cd ~
Crea un ambiente virtuale Python per isolare le dipendenze:
virtualenv venv-texttospeech
Attiva l'ambiente virtuale:
source venv-texttospeech/bin/activate
Installa IPython e la libreria client API Text-to-Speech:
pip install ipython google-cloud-texttospeech
Il risultato dovrebbe essere simile a questo:
... Installing collected packages: ..., ipython, google-cloud-texttospeech Successfully installed ... google-cloud-texttospeech-2.16.3 ...
Ora puoi utilizzare la libreria client dell'API Text-to-Speech.
Nei passaggi successivi, utilizzerai un interprete Python interattivo chiamato IPython, che hai installato nel passaggio precedente. Avvia una sessione eseguendo ipython in Cloud Shell:
ipython
Il risultato dovrebbe essere simile a questo:
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]:
Ora puoi effettuare la tua prima richiesta ed elencare le lingue supportate…
4. Elenca le lingue supportate
In questa sezione troverai l'elenco di tutte le lingue supportate.
Copia il seguente codice nella sessione 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 "")
Prenditi un momento per studiare il codice e vedere come utilizza il metodo della libreria client list_voices per creare l'elenco dei linguaggi supportati.
Chiama la funzione:
list_languages()
Dovresti visualizzare il seguente elenco (o uno più lungo):
---------------------- 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
L'elenco mostra 58 lingue e varianti, ad esempio:
- cinese e mandarino taiwanese,
- Inglese australiano, britannico, indiano e americano.
- Francese di Canada e Francia,
- Portoghese del Brasile e del Portogallo.
Questo elenco non è fisso e cresce man mano che vengono rese disponibili nuove voci.
Riepilogo
Questo passaggio ti ha permesso di elencare le lingue supportate.
5. Elenco voci disponibili
In questa sezione troverai l'elenco delle voci disponibili in diverse lingue.
Copia il seguente codice nella sessione 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")
Dedica un momento a studiare il codice e a vedere come utilizza il metodo della libreria client list_voices(language_code) per elencare le voci disponibili per una determinata lingua.
Ora, visualizza l'elenco delle voci tedesche disponibili:
list_voices("de")
Il risultato dovrebbe essere simile a questo:
------------------------ 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 ...
Sono disponibili più voci femminili e maschili, nonché voci standard, WaveNet, Neural2 e Studio:
- Le voci standard vengono generate da algoritmi di elaborazione del segnale.
- Le voci WaveNet, Neural2 e Studio sono voci di qualità superiore sintetizzate da modelli di machine learning e dal suono più naturale.
Ora, ottieni l'elenco delle voci in inglese disponibili:
list_voices("en")
Dovresti ottenere un risultato simile a questo:
------------------------ 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 ...
Oltre a una selezione di più voci di generi e qualità diversi, sono disponibili più accenti: inglese australiano, britannico, indiano e americano.
Prenditi un momento per elencare le voci disponibili per le tue lingue e varianti preferite (o anche tutte):
list_voices("fr")
list_voices("pt")
list_voices()
Riepilogo
Questo passaggio ti ha consentito di elencare le voci disponibili. Puoi scoprire di più sulle voci e sulle lingue supportate.
6. Sintetizza audio dal testo
Puoi utilizzare l'API Text-to-Speech per convertire una stringa in dati audio. Puoi configurare l'output della sintesi vocale in vari modi, ad esempio selezionando una voce unica o modulando l'output in base a tono, volume, velocità del parlato e frequenza di campionamento.
Copia il seguente codice nella sessione 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}"')
Prenditi un momento per studiare il codice e vedere come utilizza il metodo della libreria client synthesize_speech per generare i dati audio e salvarli come file wav.
Ora genera frasi con accenti diversi:
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 ?")
Il risultato dovrebbe essere simile a questo:
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"
Per scaricare tutti i file generati contemporaneamente, puoi utilizzare questo comando Cloud Shell dal tuo ambiente Python:
!cloudshell download *.wav
Convalida e il browser scaricherà i file:

Apri ogni file e ascolta il risultato.
Riepilogo
In questo passaggio, hai potuto utilizzare l'API Text-to-Speech per convertire le frasi in file audio wav. Scopri di più sulla creazione di file audio vocali.
7. Complimenti!

Hai imparato a utilizzare l'API Text-to-Speech utilizzando Python per generare un discorso con un'intonazione simile a quella umana.
Esegui la pulizia
Per pulire l'ambiente di sviluppo, da Cloud Shell:
- Se sei ancora nella sessione IPython, torna alla shell:
exit - Interrompi l'utilizzo dell'ambiente virtuale Python:
deactivate - Elimina la cartella dell'ambiente virtuale:
cd ~ ; rm -rf ./venv-texttospeech
Per eliminare il progetto Google Cloud, da Cloud Shell:
- Recupera l'ID progetto corrente:
PROJECT_ID=$(gcloud config get-value core/project) - Assicurati che sia il progetto che vuoi eliminare:
echo $PROJECT_ID - Elimina il progetto:
gcloud projects delete $PROJECT_ID
Scopri di più
- Prova la demo nel browser: https://cloud.google.com/text-to-speech
- Documentazione di Text-to-Speech: https://cloud.google.com/text-to-speech/docs
- Python su Google Cloud: https://cloud.google.com/python
- Librerie client di Cloud per Python: https://github.com/googleapis/google-cloud-python
Licenza
Questo lavoro è concesso in licenza ai sensi di una licenza Creative Commons Attribution 2.0 Generic.