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 Eingaben in der Speech Synthesis Markup Language (SSML) unterstützt, mit denen Pausen, Zahlen, Formatierungen von Datum und Uhrzeit sowie andere Anweisungen zur Aussprache angegeben werden können.

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

Aufgaben in diesem Lab

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

Voraussetzungen

  • Ein Google Cloud-Projekt
  • Ein Browser wie Chrome oder Firefox
  • Vertrautheit bei der Verwendung von Python

Umfrage

Wie möchten Sie diese Anleitung nutzen?

<ph type="x-smartling-placeholder"></ph> Nur bis zum Ende lesen Lies sie dir durch und absolviere die Übungen

Wie würden Sie Ihre Erfahrung mit Python bewerten?

<ph type="x-smartling-placeholder"></ph> Neuling Mittel Kompetent

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

<ph type="x-smartling-placeholder"></ph> Neuling Mittel Kompetent

2. Einrichtung und Anforderungen

Umgebung für das selbstbestimmte Lernen einrichten

  1. Melden Sie sich in der Google Cloud Console an und erstellen Sie ein neues Projekt oder verwenden Sie ein vorhandenes Projekt. 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 Projektteilnehmer. Es handelt sich um eine Zeichenfolge, die von Google APIs nicht verwendet wird. Sie können sie jederzeit aktualisieren.
  • Die Projekt-ID ist für alle Google Cloud-Projekte eindeutig und unveränderlich. Sie kann nach dem Festlegen nicht mehr geändert werden. Die Cloud Console generiert automatisch einen eindeutigen String. ist Ihnen meist egal, was es ist. In den meisten Codelabs musst du auf deine Projekt-ID verweisen, die üblicherweise als PROJECT_ID bezeichnet wird. Wenn Ihnen die generierte ID nicht gefällt, können Sie eine weitere zufällige ID generieren. Alternativ können Sie einen eigenen verwenden und nachsehen, ob er verfügbar ist. Sie kann nach diesem Schritt nicht mehr geändert werden und bleibt für die Dauer des Projekts erhalten.
  • Zur Information gibt es noch einen dritten Wert, die Projektnummer, die von manchen APIs verwendet wird. Weitere Informationen zu allen drei Werten finden Sie in der Dokumentation.
  1. Als Nächstes müssen Sie in der Cloud Console die Abrechnung aktivieren, um Cloud-Ressourcen/APIs verwenden zu können. Dieses Codelab ist kostengünstig. Sie können die von Ihnen erstellten Ressourcen oder das Projekt löschen, um Ressourcen herunterzufahren, um zu vermeiden, dass über diese Anleitung hinaus Kosten anfallen. Neue Google Cloud-Nutzer haben Anspruch auf das kostenlose Testprogramm mit 300$Guthaben.

Cloud Shell starten

Sie können Google Cloud zwar von Ihrem Laptop aus der Ferne bedienen, in diesem Codelab verwenden Sie jedoch Cloud Shell, 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.

5c1dabeca90e44e5.png

Wenn Sie Cloud Shell zum ersten Mal starten, wird ein Zwischenbildschirm mit einer Beschreibung der Funktion angezeigt. Wenn ein Zwischenbildschirm angezeigt wird, klicken Sie auf Weiter.

9c92662c6a846a5c.png

Die Bereitstellung und Verbindung mit Cloud Shell dauert nur einen Moment.

9f0e51b578fecce5.png

Diese virtuelle Maschine verfügt über alle erforderlichen Entwicklertools. Es bietet ein Basisverzeichnis mit 5 GB nichtflüchtigem Speicher und wird in Google Cloud ausgeführt. Dadurch werden die Netzwerkleistung und die Authentifizierung erheblich verbessert. Viele, wenn nicht sogar alle Arbeiten in diesem Codelab können mit einem Browser erledigt werden.

Sobald Sie mit Cloud Shell verbunden sind, sollten Sie sehen, dass Sie authentifiziert sind und das Projekt auf Ihre Projekt-ID eingestellt ist.

  1. Führen Sie in 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 in Cloud Shell den folgenden Befehl aus, um zu prüfen, ob 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

Führen Sie den folgenden Befehl in Cloud Shell aus, um die Text-to-Speech API zu aktivieren:

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

Nehmen Sie sich einen Moment Zeit, um sich den Code anzusehen und zu sehen, wie mit der list_voices-Clientbibliotheksmethode die Liste der unterstützten Sprachen erstellt wird.

Rufen Sie die folgende Funktion auf:

list_languages()

Sie sollten die folgende (oder eine größere) Liste sehen:

---------------------- 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 festgelegt und wächst, wenn neue Stimmen verfügbar sind.

Zusammenfassung

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

Nehmen Sie sich einen Moment Zeit, um sich den Code anzusehen und zu sehen, wie er mit der Clientbibliotheksmethode list_voices(language_code) die verfügbaren Stimmen für eine bestimmte Sprache auflisten kann.

Rufen Sie jetzt 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 Standardstimmen, WaveNet-, Neural2- und Studio-Stimmen verfügbar:

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

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

list_voices("en")

Die Ausgabe sollte in 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
...

Zusätzlich zu einer Auswahl an Stimmen in verschiedenen Geschlechter und Qualitäten stehen mehrere Akzente zur Verfügung: australisches, britisches, indisches und amerikanisches Englisch.

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

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

Zusammenfassung

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

6. Audioinhalte aus Text synthetisieren

Mit der Text-to-Speech API können Sie einen String in Audiodaten umwandeln. Sie können die Ausgabe der Sprachsynthese auf verschiedene Arten konfigurieren, z. B. durch die Auswahl einer bestimmten Stimme oder die Modulation der Ausgabe hinsichtlich Tonhöhe, Lautstärke, Sprechgeschwindigkeit und Abtastrate.

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

Nehmen Sie sich einen Moment Zeit, um sich den Code anzusehen und zu sehen, wie die synthesize_speech-Clientbibliotheksmethode verwendet wird, um die Audiodaten zu generieren und als wav-Datei zu speichern.

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 auf einmal herunterladen möchten, können Sie diesen Cloud Shell-Befehl in Ihrer Python-Umgebung verwenden:

!cloudshell download *.wav

Validieren Sie, dass die Dateien über Ihren Browser heruntergeladen werden:

44382e3b7a3314b0.png 4dbccf007cd73b91.png

Öffnen Sie die einzelnen Dateien und hören Sie sich das Ergebnis an.

Zusammenfassung

In diesem Schritt konnten Sie mithilfe der Text-to-Speech API Sätze in Audiodateien wav konvertieren. Weitere Informationen zum Erstellen von Sprach-Audiodateien

7. Glückwunsch!

1215f38908082356.png

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

Bereinigen

So bereinigen Sie die Entwicklungsumgebung in Cloud Shell:

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

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

  • Rufen Sie Ihre aktuelle Projekt-ID ab: PROJECT_ID=$(gcloud config get-value core/project)
  • Achten Sie darauf, dass 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.