Leggi indirizzi con SSML

Questo tutorial illustra come usare il Speech Synthesis Markup Language (SSML) per pronunciare un file di testo di indirizzi. Puoi eseguire il markup di una stringa di testo con tag SSML per personalizzare l'audio sintetico da Text-to-Speech.

Testo normale Rendering SSML del testo non crittografato

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>

Scopo

Invia una richiesta di sintesi vocale a Text-to-Speech utilizzando SSML e le librerie client di Text-to-Speech.

Costi

Per informazioni sui costi, consulta la pagina Prezzi di Text-to-Speech.

Prima di iniziare

Scarica gli esempi di codice

Per scaricare gli esempi di codice, clona gli esempi GitHub di Google Cloud per il linguaggio di programmazione che intendi utilizzare.

Java

Questo tutorial utilizza il codice nella directory texttospeech/cloud-client/src/main/java/com/example/texttospeech/ del repository Java di esempio della piattaforma Google Cloud.

Per scaricare e accedere al codice di questo tutorial, esegui questi comandi dal terminale.

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

Questo tutorial utilizza il codice nella directory texttospeech del repository di esempi Node.js di Google Cloud.

Per scaricare e accedere al codice di questo tutorial, esegui questi comandi dal terminale.

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

Python

Questo tutorial utilizza il codice nella directory texttospeech/snippets del repository di esempi Python di Google Cloud Platform.

Per scaricare e accedere al codice di questo tutorial, esegui questi comandi dal terminale.

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

installa la libreria client

Questo tutorial utilizza la libreria client di Text-to-Speech.

Java

Questo tutorial utilizza le seguenti dipendenze.

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

Dal terminale, esegui il comando seguente.

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

Python

Dal terminale, esegui il comando seguente.

pip install --upgrade google-cloud-texttospeech

Configura le tue credenziali Google Cloud Platform

Fornisci le credenziali di autenticazione al codice dell'applicazione impostando la variabile di ambiente GOOGLE_APPLICATION_CREDENTIALS. Questa variabile si applica solo alla sessione di shell attuale. Se vuoi che la variabile venga applicata a future sessioni shell, impostala nel file di avvio della shell, ad esempio nel file ~/.bashrc o ~/.profile.

Linux o macOS

export GOOGLE_APPLICATION_CREDENTIALS="KEY_PATH"

Sostituisci KEY_PATH con il percorso del file JSON che contiene le tue credenziali.

Ad esempio:

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

Windows

Per PowerShell:

$env:GOOGLE_APPLICATION_CREDENTIALS="KEY_PATH"

Sostituisci KEY_PATH con il percorso del file JSON che contiene le tue credenziali.

Ad esempio:

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

Per il prompt dei comandi:

set GOOGLE_APPLICATION_CREDENTIALS=KEY_PATH

Sostituisci KEY_PATH con il percorso del file JSON che contiene le tue credenziali.

Importa librerie

Questo tutorial utilizza le seguenti librerie client e di sistema.

Java

Per scoprire come installare e utilizzare la libreria client per Text-to-Speech, consulta l'articolo Librerie client di Text-to-Speech. Per maggiori informazioni, consulta la documentazione di riferimento dell'API Text-to-Speech Java.

Per eseguire l'autenticazione in Text-to-Speech, configura le Credenziali predefinite dell'applicazione. Per maggiori informazioni, consulta Configurare l'autenticazione per un ambiente di sviluppo locale.

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

Per scoprire come installare e utilizzare la libreria client per Text-to-Speech, consulta l'articolo Librerie client di Text-to-Speech. Per maggiori informazioni, consulta la documentazione di riferimento dell'API Text-to-Speech Node.js.

Per eseguire l'autenticazione in Text-to-Speech, configura le Credenziali predefinite dell'applicazione. Per maggiori informazioni, consulta Configurare l'autenticazione per un ambiente di sviluppo locale.

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

Per scoprire come installare e utilizzare la libreria client per Text-to-Speech, consulta l'articolo Librerie client di Text-to-Speech. Per maggiori informazioni, consulta la documentazione di riferimento dell'API Text-to-Speech Python.

Per eseguire l'autenticazione in Text-to-Speech, configura le Credenziali predefinite dell'applicazione. Per maggiori informazioni, consulta Configurare l'autenticazione per un ambiente di sviluppo locale.

import html

from google.cloud import texttospeech

Utilizzare l'API Text-to-Speech

La seguente funzione prende una stringa di testo con tag SSML e il nome di un file MP3. La funzione utilizza il testo codificato con SSML per generare audio sintetico. La funzione salva l'audio sintetico nel nome file MP3 indicato come parametro.

L'intero input SSML può essere letto da una sola voce. Puoi impostare la voce nell'oggetto VoiceSelectionParams.

Java

Per scoprire come installare e utilizzare la libreria client per Text-to-Speech, consulta l'articolo Librerie client di Text-to-Speech. Per maggiori informazioni, consulta la documentazione di riferimento dell'API Text-to-Speech Java.

Per eseguire l'autenticazione in Text-to-Speech, configura le Credenziali predefinite dell'applicazione. Per maggiori informazioni, consulta Configurare l'autenticazione per un ambiente di sviluppo locale.

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

Per scoprire come installare e utilizzare la libreria client per Text-to-Speech, consulta l'articolo Librerie client di Text-to-Speech. Per maggiori informazioni, consulta la documentazione di riferimento dell'API Text-to-Speech Node.js.

Per eseguire l'autenticazione in Text-to-Speech, configura le Credenziali predefinite dell'applicazione. Per maggiori informazioni, consulta Configurare l'autenticazione per un ambiente di sviluppo locale.

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

Per scoprire come installare e utilizzare la libreria client per Text-to-Speech, consulta l'articolo Librerie client di Text-to-Speech. Per maggiori informazioni, consulta la documentazione di riferimento dell'API Text-to-Speech Python.

Per eseguire l'autenticazione in Text-to-Speech, configura le Credenziali predefinite dell'applicazione. Per maggiori informazioni, consulta Configurare l'autenticazione per un ambiente di sviluppo locale.

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)

Personalizza l'audio sintetico

La seguente funzione prende il nome di un file di testo e lo converte in una stringa di testo codificata con SSML.

Java

Per scoprire come installare e utilizzare la libreria client per Text-to-Speech, consulta l'articolo Librerie client di Text-to-Speech. Per maggiori informazioni, consulta la documentazione di riferimento dell'API Text-to-Speech Java.

Per eseguire l'autenticazione in Text-to-Speech, configura le Credenziali predefinite dell'applicazione. Per maggiori informazioni, consulta Configurare l'autenticazione per un ambiente di sviluppo locale.

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

Per scoprire come installare e utilizzare la libreria client per Text-to-Speech, consulta l'articolo Librerie client di Text-to-Speech. Per maggiori informazioni, consulta la documentazione di riferimento dell'API Text-to-Speech Node.js.

Per eseguire l'autenticazione in Text-to-Speech, configura le Credenziali predefinite dell'applicazione. Per maggiori informazioni, consulta Configurare l'autenticazione per un ambiente di sviluppo locale.

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

Per scoprire come installare e utilizzare la libreria client per Text-to-Speech, consulta l'articolo Librerie client di Text-to-Speech. Per maggiori informazioni, consulta la documentazione di riferimento dell'API Text-to-Speech Python.

Per eseguire l'autenticazione in Text-to-Speech, configura le Credenziali predefinite dell'applicazione. Per maggiori informazioni, consulta Configurare l'autenticazione per un ambiente di sviluppo locale.

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

Organizzazione dei risultati in corso...

Questo programma utilizza il seguente input.

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

Il passaggio del testo sopra indicato a text_to_ssml() genera il seguente testo taggato.

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

Esegui il codice

Per generare un file audio di sintesi vocale, esegui il codice seguente dalla riga di comando.

Java

Linux o MacOS

Dalla directory java-docs-samples/texttospeech/cloud-client/, esegui questo comando sulla riga di comando.

$ mvn clean package

Windows

Dalla directory java-docs-samples/texttospeech/cloud-client/, esegui questo comando sulla riga di comando.

$ mvn clean package

Node.js

Linux o MacOS

Nel file hybridGlossaries.js, rimuovi il commento dalle variabili rilasciate TODO (developer).

Nel comando seguente, sostituisci projectId con il tuo ID progetto Google Cloud. Dalla directory nodejs-docs-samples/texttospeech, esegui questo comando sulla riga di comando.

$ node ssmlAddresses.js projectId

Windows

Nel file hybridGlossaries.js, rimuovi il commento dalle variabili rilasciate TODO (developer).

Nel comando seguente, sostituisci projectId con il tuo ID progetto Google Cloud. Dalla directory nodejs-docs-samples/texttospeech, esegui questo comando sulla riga di comando.

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

Python

Linux o MacOS

Dalla directory python-docs-samples/texttospeech/snippets, esegui questo comando sulla riga di comando.

$ python ssml_addresses.py

Windows

Dalla directory python-docs-samples/texttospeech/snippets, esegui questo comando sulla riga di comando.

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

Controlla l'output

Questo programma genera un file audio example.mp3 di sintesi vocale.

Java

Vai alla directory java-docs-samples/texttospeech/cloud-client/resources/.

Controlla se nella directory resources è presente un file example.mp3.

Node.js

Vai alla directory nodejs-docs-samples/texttospeech/resources/.

Controlla se nella directory resources è presente un file example.mp3.

Python

Accedi a python-docs-samples/texttospeech/snippets/resources.

Controlla se nella directory resources è presente un file example.mp3.

Ascolta il seguente clip audio per verificare che il file example.mp3 abbia lo stesso suono.


Risolvere i problemi

  • Se dimentichi di impostare la variabile di ambiente GOOGLE_APPLICATION_CREDENTIALS nella riga di comando, viene generato un messaggio di errore:

    The Application Default Credentials are not available.

  • Passando a text_to_ssml() il nome di un file inesistente, viene generato il messaggio di errore:

    IOError: [Errno 2] No such file or directory
    

  • Il passaggio a ssml_to_audio() di un parametro ssml_text contenente None genera il messaggio di errore:

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

  • Assicurati di eseguire il codice dalla directory corretta.

Passaggi successivi

Esegui la pulizia

Per evitare che al tuo account Google Cloud Platform vengano addebitati costi relativi alle risorse utilizzate in questo tutorial, usa la console Google Cloud per eliminare il progetto se non ti serve.

Elimina il progetto

  1. Nella console Google Cloud, vai alla pagina Progetti.
  2. Nell'elenco dei progetti, seleziona quello che vuoi eliminare e fai clic su Elimina.
  3. Nella finestra di dialogo, digita l'ID progetto e fai clic su Arresta per eliminare il progetto.