Using the Text-to-Speech API with Python

1. Übersicht

1215f38908082356.png

Mit der Text-to-Speech API können Entwickler menschenähnliche Sprache generieren. Die API wandelt Text in Audioformate wie WAV, MP3 oder Ogg Opus um. Außerdem werden SSML-Eingaben (Speech Synthesis Markup Language) unterstützt, mit denen Sie Pausen, Zahlen, Datums- und Uhrzeitformate sowie andere Anweisungen für die Aussprache festlegen können.

In dieser Anleitung konzentrieren Sie sich auf die Verwendung der Text-to-Speech API mit Python.

Lerninhalte

  • Umgebung einrichten
  • Unterstützte Sprachen auflisten
  • Verfügbare Stimmen auflisten
  • Audioinhalte aus Text synthetisieren

Voraussetzungen

  • Ein Google Cloud-Projekt
  • Ein Browser, z. B. Chrome oder Firefox
  • Python-Vorkenntnisse

Umfrage

Wie werden Sie diese Anleitung verwenden?

Nur lesen Lesen und Übungen durchführen

Wie würden Sie Ihre Erfahrung mit Python bewerten?

Anfänger Mittelstufe Fortgeschrittene

Wie würden Sie Ihre Erfahrungen mit Google Cloud-Diensten bewerten?

Anfänger Mittelstufe Fortgeschritten

2. Einrichtung und Anforderungen

Umgebung zum selbstbestimmten Lernen einrichten

  1. Melden Sie sich in der Google Cloud Console an und erstellen Sie ein neues Projekt oder verwenden Sie ein vorhandenes. Wenn Sie noch kein Gmail- oder Google Workspace-Konto haben, müssen Sie eines erstellen.

fbef9caa1602edd0.png

a99b7ace416376c4.png

5e3ff691252acf41.png

  • Der Projektname ist der Anzeigename für die Teilnehmer dieses Projekts. Es handelt sich um einen String, der nicht von Google APIs verwendet wird. Sie können sie jederzeit aktualisieren.
  • Die Projekt-ID ist für alle Google Cloud-Projekte eindeutig und unveränderlich (kann nach dem Festlegen nicht mehr geändert werden). In der Cloud Console wird automatisch ein eindeutiger String generiert. Normalerweise ist es nicht wichtig, wie dieser String aussieht. In den meisten Codelabs müssen Sie auf Ihre Projekt-ID verweisen (in der Regel als PROJECT_ID angegeben). Wenn Ihnen die generierte ID nicht gefällt, können Sie eine andere zufällige ID generieren. Alternativ können Sie es mit einem eigenen Namen versuchen und sehen, ob er verfügbar ist. Sie kann nach diesem Schritt nicht mehr geändert werden und bleibt für die Dauer des Projekts bestehen.
  • Zur Information: Es gibt einen dritten Wert, die Projektnummer, die von einigen APIs verwendet wird. Weitere Informationen zu diesen drei Werten
  1. Als Nächstes müssen Sie die Abrechnung in der Cloud Console aktivieren, um Cloud-Ressourcen/-APIs zu verwenden. Die Durchführung dieses Codelabs kostet wenig oder gar nichts. Wenn Sie Ressourcen herunterfahren möchten, um Kosten zu vermeiden, die über diese Anleitung hinausgehen, können Sie die erstellten Ressourcen oder das Projekt löschen. Neue Google Cloud-Nutzer können am kostenlosen Testzeitraum mit einem Guthaben von 300$ teilnehmen.

Cloud Shell starten

Während Sie Google Cloud von Ihrem Laptop aus per Fernzugriff nutzen können, wird in diesem Codelab Cloud Shell verwendet, eine Befehlszeilenumgebung, die in der Cloud ausgeführt wird.

Cloud Shell aktivieren

  1. Klicken Sie in der Cloud Console auf Cloud Shell aktivieren 853e55310c205094.png.

3c1dabeca90e44e5.png

Wenn Sie die Cloud Shell zum ersten Mal starten, wird ein Fenster mit einer Beschreibung eingeblendet. Klicken Sie in diesem Fall einfach auf Weiter.

9c92662c6a846a5c.png

Das Herstellen der Verbindung mit der Cloud Shell sollte nur wenige Augenblicke dauern.

9f0e51b578fecce5.png

Auf dieser virtuellen Maschine sind alle erforderlichen Entwicklungstools installiert. Sie bietet ein Basisverzeichnis mit 5 GB nichtflüchtigem Speicher und läuft in Google Cloud, was die Netzwerkleistung und Authentifizierung erheblich verbessert. Die meisten, wenn nicht sogar alle Aufgaben in diesem Codelab können mit einem Browser erledigt werden.

Sobald die Verbindung mit der Cloud Shell hergestellt ist, sehen Sie, dass Sie authentifiziert sind und für das Projekt Ihre Projekt-ID eingestellt ist.

  1. Führen Sie in der Cloud Shell den folgenden Befehl aus, um zu prüfen, ob Sie authentifiziert sind:
gcloud auth list

Befehlsausgabe

 Credentialed Accounts
ACTIVE  ACCOUNT
*       <my_account>@<my_domain.com>

To set the active account, run:
    $ gcloud config set account `ACCOUNT`
  1. Führen Sie den folgenden Befehl in Cloud Shell aus, um zu bestätigen, dass der gcloud-Befehl Ihr Projekt kennt:
gcloud config list project

Befehlsausgabe

[core]
project = <PROJECT_ID>

Ist dies nicht der Fall, können Sie die Einstellung mit diesem Befehl vornehmen:

gcloud config set project <PROJECT_ID>

Befehlsausgabe

Updated property [core/project].

3. Umgebung einrichten

Bevor Sie die Text-to-Speech API verwenden können, müssen Sie die API in Cloud Shell aktivieren. Führen Sie dazu den folgenden Befehl aus:

gcloud services enable texttospeech.googleapis.com

Auf dem Bildschirm sollte Folgendes zu sehen sein:

Operation "operations/..." finished successfully.

Jetzt können Sie die Text-to-Speech API verwenden.

Wechseln Sie zu Ihrem Basisverzeichnis:

cd ~

Erstellen Sie eine virtuelle Python-Umgebung, um die Abhängigkeiten zu isolieren:

virtualenv venv-texttospeech

Aktivieren Sie die virtuelle Umgebung:

source venv-texttospeech/bin/activate

Installieren Sie IPython und die Text-to-Speech API-Clientbibliothek:

pip install ipython google-cloud-texttospeech

Auf dem Bildschirm sollte Folgendes zu sehen sein:

...
Installing collected packages: ..., ipython, google-cloud-texttospeech
Successfully installed ... google-cloud-texttospeech-2.16.3 ...

Jetzt können Sie die Text-to-Speech API-Clientbibliothek verwenden.

In den nächsten Schritten verwenden Sie einen interaktiven Python-Interpreter namens IPython, den Sie im vorherigen Schritt installiert haben. Starten Sie eine Sitzung, indem Sie ipython in Cloud Shell ausführen:

ipython

Auf dem Bildschirm sollte Folgendes zu sehen sein:

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]:

Sie können jetzt Ihre erste Anfrage stellen und die unterstützten Sprachen auflisten…

4. Unterstützte Sprachen auflisten

In diesem Abschnitt finden Sie eine Liste aller unterstützten Sprachen.

Kopieren Sie den folgenden Code in Ihre IPython-Sitzung:

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 "")
        

Sehen Sie sich den Code an und achten Sie darauf, wie mit der Clientbibliotheksmethode list_voices die Liste der unterstützten Sprachen erstellt wird.

Funktion aufrufen:

list_languages()

Sie sollten die folgende (oder eine längere) Liste erhalten:

---------------------- 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

Die Liste enthält 58 Sprachen und Varianten, darunter:

  • Chinesisch und Taiwanesisches Mandarin
  • Australisches, britisches, indisches und amerikanisches Englisch
  • Französisch aus Kanada und Frankreich,
  • Portugiesisch aus Brasilien und Portugal.

Diese Liste ist nicht statisch und wird erweitert, sobald neue Stimmen verfügbar sind.

Zusammenfassung

In diesem Schritt konnten Sie die unterstützten Sprachen auflisten.

5. Verfügbare Stimmen auflisten

In diesem Abschnitt finden Sie eine Liste der in verschiedenen Sprachen verfügbaren Stimmen.

Kopieren Sie den folgenden Code in Ihre IPython-Sitzung:

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")
        

Sehen Sie sich den Code an und achten Sie darauf, wie mit der Clientbibliotheksmethode list_voices(language_code) die für eine bestimmte Sprache verfügbaren Stimmen aufgelistet werden.

Rufen Sie nun die Liste der verfügbaren deutschen Stimmen ab:

list_voices("de")

Auf dem Bildschirm sollte Folgendes zu sehen sein:

------------------------ 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
...

Es sind mehrere weibliche und männliche Stimmen sowie Standard-, WaveNet-, Neural2- und Studio-Stimmen verfügbar:

  • Standardstimmen werden durch Signalverarbeitungsalgorithmen generiert.
  • WaveNet-, Neural2- und Studio-Stimmen sind hochwertigere Stimmen, die von Modellen für maschinelles Lernen synthetisiert werden und natürlicher klingen.

Rufen Sie nun die Liste der verfügbaren englischen Stimmen ab:

list_voices("en")

Die Ausgabe sollte etwa so aussehen:

------------------------ 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
...

Neben einer Auswahl von mehreren Stimmen mit unterschiedlichem Geschlecht und unterschiedlicher Qualität sind auch mehrere Akzente verfügbar: australisches, britisches, indisches und amerikanisches Englisch.

Nehmen Sie sich einen Moment Zeit, um die für Ihre bevorzugten Sprachen und Varianten (oder sogar alle) verfügbaren Stimmen aufzulisten:

list_voices("fr")
list_voices("pt")
list_voices()

Zusammenfassung

In diesem Schritt konnten Sie die verfügbaren Stimmen auflisten. Weitere Informationen zu den unterstützten Stimmen und Sprachen

6. Audioinhalte aus Text synthetisieren

Mit der Text-to-Speech API können Sie einen String in Audiodaten umwandeln. Die Ausgabe der Sprachsynthese ist auf verschiedene Weise konfigurierbar. Sie können beispielsweise eine bestimmte Stimme auswählen oder die Ausgabe hinsichtlich Tonhöhe, Lautstärke, Sprechgeschwindigkeit und Abtastrate anpassen.

Kopieren Sie den folgenden Code in Ihre IPython-Sitzung:

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}"')
        

Sehen Sie sich den Code an und achten Sie darauf, wie mit der Clientbibliotheksmethode synthesize_speech die Audiodaten generiert und als wav-Datei gespeichert werden.

Generieren Sie nun Sätze mit verschiedenen Akzenten:

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 ?")

Auf dem Bildschirm sollte Folgendes zu sehen sein:

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"

Wenn Sie alle generierten Dateien gleichzeitig herunterladen möchten, können Sie diesen Cloud Shell-Befehl in Ihrer Python-Umgebung verwenden:

!cloudshell download *.wav

Wenn Sie die Dateien validieren, werden sie in Ihrem Browser heruntergeladen:

44382e3b7a3314b0.png 4dbccf007cd73b91.png

Öffnen Sie jede Datei und hören Sie sich das Ergebnis an.

Zusammenfassung

In diesem Schritt haben Sie die Text-to-Speech API verwendet, um Sätze in wav-Audiodateien zu konvertieren. Weitere Informationen zum Erstellen von Sprachaudiodateien

7. Glückwunsch!

1215f38908082356.png

Sie haben gelernt, wie Sie mit der Text-to-Speech API und Python menschenähnliche Sprache erzeugen.

Bereinigen

So bereinigen Sie Ihre Entwicklungsumgebung über Cloud Shell:

  • Wenn Sie sich noch in Ihrer IPython-Sitzung befinden, kehren Sie zur Shell zurück: exit
  • Beenden Sie die Verwendung der virtuellen Python-Umgebung: deactivate
  • Löschen Sie den Ordner für die virtuelle Umgebung: cd ~ ; rm -rf ./venv-texttospeech

So löschen Sie Ihr Google Cloud-Projekt über Cloud Shell:

  • Rufen Sie Ihre aktuelle Projekt-ID ab: PROJECT_ID=$(gcloud config get-value core/project)
  • Prüfen Sie, ob dies das Projekt ist, das Sie löschen möchten: echo $PROJECT_ID
  • Projekt löschen: gcloud projects delete $PROJECT_ID

Weitere Informationen

Lizenz

Dieser Text ist mit einer Creative Commons Attribution 2.0 Generic License lizenziert.