Adressen mit SSML aussprechen lassen

In dieser Anleitung wird gezeigt, wie Speech Synthesis Markup Language (SSML) zur Sprachausgabe einer Textdatei mit Adressen verwendet wird. Sie können einen Textstring mit SSML-Tags markieren, um synthetisches Audio von Text-to-Speech zu personalisieren.

Klartext SSML-Rendering von Klartext
123 Street Ln
<speak>123 Street Ln</speak>
1 Number St
<speak>1 Number St</speak>
1 Piazza del Fibonacci
<speak>1 Piazza del Fibonacci</speak>

Ziel

Sie senden eine Anfrage für synthetische Sprache an Text-to-Speech und verwenden dabei SSML und Text-to-Speech-Clientbibliotheken.

Kosten

Weitere Informationen finden Sie auf der Preisseite für Text-to-Speech.

Vorbereitung

Codebeispiele herunterladen

Klonen Sie die Google Cloud GitHub-Beispiele für die Programmiersprache, die Sie verwenden möchten, um die Codebeispiele herunterzuladen.

Java

In dieser Anleitung wird Code im Verzeichnis texttospeech/cloud-client/src/main/java/com/example/texttospeech/ des Java-Beispiel-Repositorys der Google Cloud Platform verwendet.

Führen Sie die folgenden Befehle über das Terminal aus, um den Code für diese Anleitung herunterzuladen und zu öffnen.

git clone https://github.com/GoogleCloudPlatform/java-docs-samples.git
cd java-docs-samples/texttospeech/cloud-client/src/main/java/com/example/texttospeech/

Node.js

In dieser Anleitung wird Code im Verzeichnis texttospeech des Node.js-Beispiel-Repositorys der Google Cloud Platform verwendet.

Führen Sie die folgenden Befehle über das Terminal aus, um den Code für diese Anleitung herunterzuladen und zu öffnen.

git clone https://github.com/GoogleCloudPlatform/nodejs-docs-samples.git
cd texttospeech/

Python

In dieser Anleitung wird Code im Verzeichnis texttospeech/snippets des Python-Beispiel-Repositorys der Google Cloud Platform verwendet.

Führen Sie die folgenden Befehle über das Terminal aus, um den Code für diese Anleitung herunterzuladen und zu öffnen.

git clone https://github.com/GoogleCloudPlatform/python-docs-samples.git
cd samples/snippets

Clientbibliothek installieren

In dieser Anleitung wird die Text-to-Speech-Clientbibliothek verwendet.

Java

In dieser Anleitung werden die folgenden Abhängigkeiten verwendet.

<!--  Using libraries-bom to manage versions.
See https://github.com/GoogleCloudPlatform/cloud-opensource-java/wiki/The-Google-Cloud-Platform-Libraries-BOM -->
<dependencyManagement>
  <dependencies>
    <dependency>
      <groupId>com.google.cloud</groupId>
      <artifactId>libraries-bom</artifactId>
      <version>26.32.0</version>
      <type>pom</type>
      <scope>import</scope>
    </dependency>
  </dependencies>
</dependencyManagement>

<dependencies>
  <dependency>
    <groupId>com.google.cloud</groupId>
    <artifactId>google-cloud-texttospeech</artifactId>
  </dependency>
</dependencies>

Node.js

Führen Sie im Terminal den Befehl "follow" aus.

npm install @google-cloud/text-to-speech

Python

Führen Sie im Terminal den Befehl "follow" aus.

pip install --upgrade google-cloud-texttospeech

Google Cloud Platform-Anmeldedaten einrichten

Provide authentication credentials to your application code by setting the environment variable GOOGLE_APPLICATION_CREDENTIALS. This variable applies only to your current shell session. If you want the variable to apply to future shell sessions, set the variable in your shell startup file, for example in the ~/.bashrc or ~/.profile file.

Linux oder macOS

export GOOGLE_APPLICATION_CREDENTIALS="KEY_PATH"

Replace KEY_PATH with the path of the JSON file that contains your credentials.

For example:

export GOOGLE_APPLICATION_CREDENTIALS="/home/user/Downloads/service-account-file.json"

Windows

For PowerShell:

$env:GOOGLE_APPLICATION_CREDENTIALS="KEY_PATH"

Replace KEY_PATH with the path of the JSON file that contains your credentials.

For example:

$env:GOOGLE_APPLICATION_CREDENTIALS="C:\Users\username\Downloads\service-account-file.json"

For command prompt:

set GOOGLE_APPLICATION_CREDENTIALS=KEY_PATH

Replace KEY_PATH with the path of the JSON file that contains your credentials.

Bibliotheken importieren

In dieser Anleitung werden die folgenden System- und Clientbibliotheken verwendet.

Java

Informationen zum Installieren und Verwenden der Clientbibliothek für Text-to-Speech finden Sie unter Text-to-Speech-Clientbibliotheken. Weitere Informationen finden Sie in der Referenzdokumentation zur Text-to-Speech Java API.

Richten Sie zur Authentifizierung bei Text-to-Speech Standardanmeldedaten für Anwendungen ein. Weitere Informationen finden Sie unter Authentifizierung für eine lokale Entwicklungsumgebung einrichten.

// Imports the Google Cloud client library
import com.google.cloud.texttospeech.v1.AudioConfig;
import com.google.cloud.texttospeech.v1.AudioEncoding;
import com.google.cloud.texttospeech.v1.SsmlVoiceGender;
import com.google.cloud.texttospeech.v1.SynthesisInput;
import com.google.cloud.texttospeech.v1.SynthesizeSpeechResponse;
import com.google.cloud.texttospeech.v1.TextToSpeechClient;
import com.google.cloud.texttospeech.v1.VoiceSelectionParams;
import com.google.common.html.HtmlEscapers;
import com.google.protobuf.ByteString;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.nio.file.Files;
import java.nio.file.Paths;

Node.js

Informationen zum Installieren und Verwenden der Clientbibliothek für Text-to-Speech finden Sie unter Text-to-Speech-Clientbibliotheken. Weitere Informationen finden Sie in der Referenzdokumentation zur Text-to-Speech Node.js API.

Richten Sie zur Authentifizierung bei Text-to-Speech Standardanmeldedaten für Anwendungen ein. Weitere Informationen finden Sie unter Authentifizierung für eine lokale Entwicklungsumgebung einrichten.

// Imports the Google Cloud client library
const textToSpeech = require('@google-cloud/text-to-speech');

// Import other required libraries
const fs = require('fs');
//const escape = require('escape-html');
const util = require('util');

Python

Informationen zum Installieren und Verwenden der Clientbibliothek für Text-to-Speech finden Sie unter Text-to-Speech-Clientbibliotheken. Weitere Informationen finden Sie in der Referenzdokumentation zur Text-to-Speech Python API.

Richten Sie zur Authentifizierung bei Text-to-Speech Standardanmeldedaten für Anwendungen ein. Weitere Informationen finden Sie unter Authentifizierung für eine lokale Entwicklungsumgebung einrichten.

import html

from google.cloud import texttospeech

Text-to-Speech API verwenden

Die folgende Funktion verwendet einen Textstring mit SSML und dem Namen einer MP3-Datei. Die Funktion verwendet den mit SSML getaggten Text, um synthetisches Audio zu generieren. Die Funktion speichert das synthetische Audio in der MP3-Datei, deren Name als Parameter festgelegt ist.

Die gesamte SSML-Eingabe kann nur von einer einzelnen Stimme gelesen werden. Sie können die Stimme im Objekt VoiceSelectionParams festlegen.

Java

Informationen zum Installieren und Verwenden der Clientbibliothek für Text-to-Speech finden Sie unter Text-to-Speech-Clientbibliotheken. Weitere Informationen finden Sie in der Referenzdokumentation zur Text-to-Speech Java API.

Richten Sie zur Authentifizierung bei Text-to-Speech Standardanmeldedaten für Anwendungen ein. Weitere Informationen finden Sie unter Authentifizierung für eine lokale Entwicklungsumgebung einrichten.

/**
 * Generates synthetic audio from a String of SSML text.
 *
 * <p>Given a string of SSML text and an output file name, this function calls the Text-to-Speech
 * API. The API returns a synthetic audio version of the text, formatted according to the SSML
 * commands. This function saves the synthetic audio to the designated output file.
 *
 * @param ssmlText String of tagged SSML text
 * @param outFile String name of file under which to save audio output
 * @throws Exception on errors while closing the client
 */
public static void ssmlToAudio(String ssmlText, String outFile) throws Exception {
  // Instantiates a client
  try (TextToSpeechClient textToSpeechClient = TextToSpeechClient.create()) {
    // Set the ssml text input to synthesize
    SynthesisInput input = SynthesisInput.newBuilder().setSsml(ssmlText).build();

    // Build the voice request, select the language code ("en-US") and
    // the ssml voice gender ("male")
    VoiceSelectionParams voice =
        VoiceSelectionParams.newBuilder()
            .setLanguageCode("en-US")
            .setSsmlGender(SsmlVoiceGender.MALE)
            .build();

    // Select the audio file type
    AudioConfig audioConfig =
        AudioConfig.newBuilder().setAudioEncoding(AudioEncoding.MP3).build();

    // Perform the text-to-speech request on the text input with the selected voice parameters and
    // audio file type
    SynthesizeSpeechResponse response =
        textToSpeechClient.synthesizeSpeech(input, voice, audioConfig);

    // Get the audio contents from the response
    ByteString audioContents = response.getAudioContent();

    // Write the response to the output file
    try (OutputStream out = new FileOutputStream(outFile)) {
      out.write(audioContents.toByteArray());
      System.out.println("Audio content written to file " + outFile);
    }
  }
}

Node.js

Informationen zum Installieren und Verwenden der Clientbibliothek für Text-to-Speech finden Sie unter Text-to-Speech-Clientbibliotheken. Weitere Informationen finden Sie in der Referenzdokumentation zur Text-to-Speech Node.js API.

Richten Sie zur Authentifizierung bei Text-to-Speech Standardanmeldedaten für Anwendungen ein. Weitere Informationen finden Sie unter Authentifizierung für eine lokale Entwicklungsumgebung einrichten.

/**
 * Generates synthetic audio from a String of SSML text.
 *
 * Given a string of SSML text and an output file name, this function
 * calls the Text-to-Speech API. The API returns a synthetic audio
 * version of the text, formatted according to the SSML commands. This
 * function saves the synthetic audio to the designated output file.
 *
 * ARGS
 * ssmlText: String of tagged SSML text
 * outfile: String name of file under which to save audio output
 * RETURNS
 * nothing
 *
 */
async function ssmlToAudio(ssmlText, outFile) {
  // Creates a client
  const client = new textToSpeech.TextToSpeechClient();

  // Constructs the request
  const request = {
    // Select the text to synthesize
    input: {ssml: ssmlText},
    // Select the language and SSML Voice Gender (optional)
    voice: {languageCode: 'en-US', ssmlGender: 'MALE'},
    // Select the type of audio encoding
    audioConfig: {audioEncoding: 'MP3'},
  };

  // Performs the Text-to-Speech request
  const [response] = await client.synthesizeSpeech(request);
  // Write the binary audio content to a local file
  const writeFile = util.promisify(fs.writeFile);
  await writeFile(outFile, response.audioContent, 'binary');
  console.log('Audio content written to file ' + outFile);
}

Python

Informationen zum Installieren und Verwenden der Clientbibliothek für Text-to-Speech finden Sie unter Text-to-Speech-Clientbibliotheken. Weitere Informationen finden Sie in der Referenzdokumentation zur Text-to-Speech Python API.

Richten Sie zur Authentifizierung bei Text-to-Speech Standardanmeldedaten für Anwendungen ein. Weitere Informationen finden Sie unter Authentifizierung für eine lokale Entwicklungsumgebung einrichten.

def ssml_to_audio(ssml_text, outfile):
    # Generates SSML text from plaintext.
    #
    # Given a string of SSML text and an output file name, this function
    # calls the Text-to-Speech API. The API returns a synthetic audio
    # version of the text, formatted according to the SSML commands. This
    # function saves the synthetic audio to the designated output file.
    #
    # Args:
    # ssml_text: string of SSML text
    # outfile: string name of file under which to save audio output
    #
    # Returns:
    # nothing

    # Instantiates a client
    client = texttospeech.TextToSpeechClient()

    # Sets the text input to be synthesized
    synthesis_input = texttospeech.SynthesisInput(ssml=ssml_text)

    # Builds the voice request, selects the language code ("en-US") and
    # the SSML voice gender ("MALE")
    voice = texttospeech.VoiceSelectionParams(
        language_code="en-US", ssml_gender=texttospeech.SsmlVoiceGender.MALE
    )

    # Selects the type of audio file to return
    audio_config = texttospeech.AudioConfig(
        audio_encoding=texttospeech.AudioEncoding.MP3
    )

    # Performs the text-to-speech request on the text input with the selected
    # voice parameters and audio file type
    response = client.synthesize_speech(
        input=synthesis_input, voice=voice, audio_config=audio_config
    )

    # Writes the synthetic audio to the output file.
    with open(outfile, "wb") as out:
        out.write(response.audio_content)
        print("Audio content written to file " + outfile)

Synthetisches Audio personalisieren

Die folgende Funktion übernimmt den Namen einer Textdatei und wandelt den Inhalt der Datei in einen mit SSML getaggten Textstring um.

Java

Informationen zum Installieren und Verwenden der Clientbibliothek für Text-to-Speech finden Sie unter Text-to-Speech-Clientbibliotheken. Weitere Informationen finden Sie in der Referenzdokumentation zur Text-to-Speech Java API.

Richten Sie zur Authentifizierung bei Text-to-Speech Standardanmeldedaten für Anwendungen ein. Weitere Informationen finden Sie unter Authentifizierung für eine lokale Entwicklungsumgebung einrichten.

/**
 * Generates SSML text from plaintext.
 *
 * <p>Given an input filename, this function converts the contents of the input text file into a
 * String of tagged SSML text. This function formats the SSML String so that, when synthesized,
 * the synthetic audio will pause for two seconds between each line of the text file. This
 * function also handles special text characters which might interfere with SSML commands.
 *
 * @param inputFile String name of plaintext file
 * @return a String of SSML text based on plaintext input.
 * @throws IOException on files that don't exist
 */
public static String textToSsml(String inputFile) throws Exception {

  // Read lines of input file
  String rawLines = new String(Files.readAllBytes(Paths.get(inputFile)));

  // Replace special characters with HTML Ampersand Character Codes
  // These codes prevent the API from confusing text with SSML tags
  // For example, '<' --> '&lt;' and '&' --> '&amp;'
  String escapedLines = HtmlEscapers.htmlEscaper().escape(rawLines);

  // Convert plaintext to SSML
  // Tag SSML so that there is a 2 second pause between each address
  String expandedNewline = escapedLines.replaceAll("\\n", "\n<break time='2s'/>");
  String ssml = "<speak>" + expandedNewline + "</speak>";

  // Return the concatenated String of SSML
  return ssml;
}

Node.js

Informationen zum Installieren und Verwenden der Clientbibliothek für Text-to-Speech finden Sie unter Text-to-Speech-Clientbibliotheken. Weitere Informationen finden Sie in der Referenzdokumentation zur Text-to-Speech Node.js API.

Richten Sie zur Authentifizierung bei Text-to-Speech Standardanmeldedaten für Anwendungen ein. Weitere Informationen finden Sie unter Authentifizierung für eine lokale Entwicklungsumgebung einrichten.

/**
 * Generates SSML text from plaintext.
 *
 * Given an input filename, this function converts the contents of the input text file
 * into a String of tagged SSML text. This function formats the SSML String so that,
 * when synthesized, the synthetic audio will pause for two seconds between each line
 * of the text file. This function also handles special text characters which might
 * interfere with SSML commands.
 *
 * ARGS
 * inputfile: String name of plaintext file
 * RETURNS
 * a String of SSML text based on plaintext input
 *
 */
function textToSsml(inputFile) {
  let rawLines = '';
  // Read input file
  try {
    rawLines = fs.readFileSync(inputFile, 'utf8');
  } catch (e) {
    console.log('Error:', e.stack);
    return;
  }

  // Replace special characters with HTML Ampersand Character Codes
  // These codes prevent the API from confusing text with SSML tags
  // For example, '<' --> '&lt;' and '&' --> '&amp;'
  let escapedLines = rawLines;
  escapedLines = escapedLines.replace(/&/g, '&amp;');
  escapedLines = escapedLines.replace(/"/g, '&quot;');
  escapedLines = escapedLines.replace(/</g, '&lt;');
  escapedLines = escapedLines.replace(/>/g, '&gt;');

  // Convert plaintext to SSML
  // Tag SSML so that there is a 2 second pause between each address
  const expandedNewline = escapedLines.replace(/\n/g, '\n<break time="2s"/>');
  const ssml = '<speak>' + expandedNewline + '</speak>';

  // Return the concatenated String of SSML
  return ssml;
}

Python

Informationen zum Installieren und Verwenden der Clientbibliothek für Text-to-Speech finden Sie unter Text-to-Speech-Clientbibliotheken. Weitere Informationen finden Sie in der Referenzdokumentation zur Text-to-Speech Python API.

Richten Sie zur Authentifizierung bei Text-to-Speech Standardanmeldedaten für Anwendungen ein. Weitere Informationen finden Sie unter Authentifizierung für eine lokale Entwicklungsumgebung einrichten.

def text_to_ssml(inputfile):
    # Generates SSML text from plaintext.
    # Given an input filename, this function converts the contents of the text
    # file into a string of formatted SSML text. This function formats the SSML
    # string so that, when synthesized, the synthetic audio will pause for two
    # seconds between each line of the text file. This function also handles
    # special text characters which might interfere with SSML commands.
    #
    # Args:
    # inputfile: string name of plaintext file
    #
    # Returns:
    # A string of SSML text based on plaintext input

    # Parses lines of input file
    with open(inputfile) as f:
        raw_lines = f.read()

    # Replace special characters with HTML Ampersand Character Codes
    # These Codes prevent the API from confusing text with
    # SSML commands
    # For example, '<' --> '&lt;' and '&' --> '&amp;'

    escaped_lines = html.escape(raw_lines)

    # Convert plaintext to SSML
    # Wait two seconds between each address
    ssml = "<speak>{}</speak>".format(
        escaped_lines.replace("\n", '\n<break time="2s"/>')
    )

    # Return the concatenated string of ssml script
    return ssml

Zusammenfassung

Dieses Programm verwendet die folgende Eingabe.

123 Street Ln, Small Town, IL 12345 USA
1 Jenny St & Number St, Tutone City, CA 86753
1 Piazza del Fibonacci, 12358 Pisa, Italy

Wenn Sie den obigen Text an text_to_ssml() übergeben, wird der folgende getaggte Text generiert.

<speak>123 Street Ln, Small Town, IL 12345 USA
<break time="2s"/>1 Jenny St &amp; Number St, Tutone City, CA 86753
<break time="2s"/>1 Piazza del Fibonacci, 12358 Pisa, Italy
<break time="2s"/></speak>

Code ausführen

Führen Sie den folgenden Code über die Befehlszeile aus, um eine Audiodatei mit synthetischer Sprache zu generieren.

Java

Linux oder MacOS

Führen Sie im Verzeichnis java-docs-samples/texttospeech/cloud-client/ den folgenden Befehl in der Befehlszeile aus.

$ mvn clean package

Windows

Führen Sie im Verzeichnis java-docs-samples/texttospeech/cloud-client/ den folgenden Befehl in der Befehlszeile aus.

$ mvn clean package

Node.js

Linux oder MacOS

Entfernen Sie in der Datei hybridGlossaries.js das Kommentarzeichen für die TODO (developer) auskommentierten Variablen.

Ersetzen Sie im folgenden Befehl projectId durch die ID Ihres Google Cloud-Projekts. Führen Sie im Verzeichnis nodejs-docs-samples/texttospeech den folgenden Befehl in der Befehlszeile aus.

$ node ssmlAddresses.js projectId

Windows

Entfernen Sie in der Datei hybridGlossaries.js das Kommentarzeichen für die TODO (developer) auskommentierten Variablen.

Ersetzen Sie im folgenden Befehl projectId durch die ID Ihres Google Cloud-Projekts. Führen Sie im Verzeichnis nodejs-docs-samples/texttospeech den folgenden Befehl in der Befehlszeile aus.

$env: C:/Node.js/node.exe C: ssmlAddresses.js projectId

Python

Linux oder MacOS

Führen Sie im Verzeichnis python-docs-samples/texttospeech/snippets den folgenden Befehl in der Befehlszeile aus.

$ python ssml_addresses.py

Windows

Führen Sie im Verzeichnis python-docs-samples/texttospeech/snippets den folgenden Befehl in der Befehlszeile aus.

$env: C:/Python3/python.exe C: ssml_addresses.py

Ausgabe testen

Dieses Programm gibt eine example.mp3-Audiodatei mit synthetischer Sprache aus.

Java

Rufen Sie das Verzeichnis java-docs-samples/texttospeech/cloud-client/resources/ auf.

Suchen Sie im Verzeichnis resources nach einer example.mp3-Datei.

Node.js

Rufen Sie das Verzeichnis nodejs-docs-samples/texttospeech/resources/ auf.

Suchen Sie im Verzeichnis resources nach einer example.mp3-Datei.

Python

Rufen Sie python-docs-samples/texttospeech/snippets/resources auf.

Suchen Sie im Verzeichnis resources nach einer example.mp3-Datei.

Hören Sie sich den folgenden Audioclip an, um zu überprüfen, ob die Datei example.mp3 gleich klingt.


Fehlerbehebung

  • Wenn Sie vergessen, die Umgebungsvariable GOOGLE_APPLICATION_CREDENTIALS in der Befehlszeile festzulegen, wird folgende Fehlermeldung angezeigt:

    The Application Default Credentials are not available.

  • Wenn Sie text_to_ssml() den Namen einer nicht vorhandenen Datei übergeben, wird diese Fehlermeldung ausgegeben:

    IOError: [Errno 2] No such file or directory
    

  • Wenn Sie ssml_to_audio() an einen ssml_text-Parameter übergeben, der None enthält, wird diese Fehlermeldung ausgegeben:

    InvalidArgument: 400 Invalid input type. Type has to be text or SSML
    

  • Achten Sie darauf, dass der Code im richtigen Verzeichnis ausgeführt wird.

Nächste Schritte

Bereinigen

Löschen Sie das Projekt mit der Google Cloud Console, wenn Sie es nicht mehr benötigen, damit Ihrem Google Cloud Platform-Konto keine in dieser Anleitung verwendeten Ressourcen in Rechnung gestellt werden.

Projekt löschen

  1. Öffnen Sie in der Google Cloud Console die Seite "Projekte".
  2. Wählen Sie in der Projektliste das Projekt aus, das Sie löschen möchten, und klicken Sie auf Löschen.
  3. Geben Sie im Dialogfeld die Projekt-ID ein und klicken Sie auf Herunterfahren, um das Projekt zu löschen.