Creare file audio vocali

Text-to-Speech consente di convertire parole e frasi in dati audio codificati in Base64 del linguaggio umano naturale. Puoi quindi convertire i dati audio in un file audio riproducibile come un MP3 decodificando i dati base64. L'API Text-to-Speech accetta l'input come testo non elaborato o Speech Synthesis Markup Language (SSML).

Questo documento descrive come creare un file audio a partire da testo o input SSML utilizzando Text-to-Speech. Puoi anche consultare l'articolo Nozioni di base su Text-to-Speech se non hai dimestichezza con concetti come la sintesi vocale o SSML.

Questi esempi richiedono che tu abbia installato e inizializzato Google Cloud CLI. Per informazioni sulla configurazione di gcloud CLI, consulta Autenticazione in TTS.

Converti il testo in audio vocale sintetico

I seguenti esempi di codice mostrano come convertire una stringa in dati audio.

Puoi configurare l'output della sintesi vocale in diversi modi, ad esempio selezionando una voce univoca o modulando l'output in tono, volume, velocità del parlato e frequenza di campionamento.

Protocollo

Per informazioni dettagliate, fai riferimento all'endpoint API di text:synthesize.

Per sintetizzare l'audio dal testo, effettua una richiesta POST HTTP all'endpoint text:synthesize. Nel corpo della richiesta POST, specifica il tipo di voce da sintetizzare nella sezione di configurazione voice, specifica il testo da sintetizzare nel campo text della sezione input e specifica il tipo di audio da creare nella sezione audioConfig.

Lo snippet di codice riportato di seguito invia una richiesta di sintesi all'endpoint text:synthesize e salva i risultati in un file denominato synthesize-text.txt. Sostituisci PROJECT_ID con l'ID progetto.

curl -H "Authorization: Bearer $(gcloud auth print-access-token)" \
  -H "x-goog-user-project: <var>PROJECT_ID</var>" \
  -H "Content-Type: application/json; charset=utf-8" \
  --data "{
    'input':{
      'text':'Android is a mobile operating system developed by Google,
         based on the Linux kernel and designed primarily for
         touchscreen mobile devices such as smartphones and tablets.'
    },
    'voice':{
      'languageCode':'en-gb',
      'name':'en-GB-Standard-A',
      'ssmlGender':'FEMALE'
    },
    'audioConfig':{
      'audioEncoding':'MP3'
    }
  }" "https://texttospeech.googleapis.com/v1/text:synthesize" > synthesize-text.txt

L'API Text-to-Speech restituisce l'audio sintetizzato come dati codificati in Base64 contenuti nell'output JSON. L'output JSON nel file synthesize-text.txt è simile al seguente snippet di codice.

{
  "audioContent": "//NExAASCCIIAAhEAGAAEMW4kAYPnwwIKw/BBTpwTvB+IAxIfghUfW.."
}

Per decodificare i risultati dell'API Text-to-Speech come file audio MP3, esegui il seguente comando dalla stessa directory del file synthesize-text.txt.

cat synthesize-text.txt | grep 'audioContent' | \
sed 's|audioContent| |' | tr -d '\n ":{},' > tmp.txt && \
base64 tmp.txt --decode > synthesize-text-audio.mp3 && \
rm tmp.txt

Go

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

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.


// SynthesizeText synthesizes plain text and saves the output to outputFile.
func SynthesizeText(w io.Writer, text, outputFile string) error {
	ctx := context.Background()

	client, err := texttospeech.NewClient(ctx)
	if err != nil {
		return err
	}
	defer client.Close()

	req := texttospeechpb.SynthesizeSpeechRequest{
		Input: &texttospeechpb.SynthesisInput{
			InputSource: &texttospeechpb.SynthesisInput_Text{Text: text},
		},
		// Note: the voice can also be specified by name.
		// Names of voices can be retrieved with client.ListVoices().
		Voice: &texttospeechpb.VoiceSelectionParams{
			LanguageCode: "en-US",
			SsmlGender:   texttospeechpb.SsmlVoiceGender_FEMALE,
		},
		AudioConfig: &texttospeechpb.AudioConfig{
			AudioEncoding: texttospeechpb.AudioEncoding_MP3,
		},
	}

	resp, err := client.SynthesizeSpeech(ctx, &req)
	if err != nil {
		return err
	}

	err = ioutil.WriteFile(outputFile, resp.AudioContent, 0644)
	if err != nil {
		return err
	}
	fmt.Fprintf(w, "Audio content written to file: %v\n", outputFile)
	return nil
}

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.

/**
 * Demonstrates using the Text to Speech client to synthesize text or ssml.
 *
 * @param text the raw text to be synthesized. (e.g., "Hello there!")
 * @throws Exception on TextToSpeechClient Errors.
 */
public static ByteString synthesizeText(String text) throws Exception {
  // Instantiates a client
  try (TextToSpeechClient textToSpeechClient = TextToSpeechClient.create()) {
    // Set the text input to be synthesized
    SynthesisInput input = SynthesisInput.newBuilder().setText(text).build();

    // Build the voice request
    VoiceSelectionParams voice =
        VoiceSelectionParams.newBuilder()
            .setLanguageCode("en-US") // languageCode = "en_us"
            .setSsmlGender(SsmlVoiceGender.FEMALE) // ssmlVoiceGender = SsmlVoiceGender.FEMALE
            .build();

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

    // Perform the text-to-speech request
    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("output.mp3")) {
      out.write(audioContents.toByteArray());
      System.out.println("Audio content written to file \"output.mp3\"");
      return audioContents;
    }
  }
}

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.

const textToSpeech = require('@google-cloud/text-to-speech');
const fs = require('fs');
const util = require('util');

const client = new textToSpeech.TextToSpeechClient();

/**
 * TODO(developer): Uncomment the following lines before running the sample.
 */
// const text = 'Text to synthesize, eg. hello';
// const outputFile = 'Local path to save audio file to, e.g. output.mp3';

const request = {
  input: {text: text},
  voice: {languageCode: 'en-US', ssmlGender: 'FEMALE'},
  audioConfig: {audioEncoding: 'MP3'},
};
const [response] = await client.synthesizeSpeech(request);
const writeFile = util.promisify(fs.writeFile);
await writeFile(outputFile, response.audioContent, 'binary');
console.log(`Audio content written to file: ${outputFile}`);

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 synthesize_text(text):
    """Synthesizes speech from the input string of text."""
    from google.cloud import texttospeech

    client = texttospeech.TextToSpeechClient()

    input_text = texttospeech.SynthesisInput(text=text)

    # Note: the voice can also be specified by name.
    # Names of voices can be retrieved with client.list_voices().
    voice = texttospeech.VoiceSelectionParams(
        language_code="en-US",
        name="en-US-Standard-C",
        ssml_gender=texttospeech.SsmlVoiceGender.FEMALE,
    )

    audio_config = texttospeech.AudioConfig(
        audio_encoding=texttospeech.AudioEncoding.MP3
    )

    response = client.synthesize_speech(
        request={"input": input_text, "voice": voice, "audio_config": audio_config}
    )

    # The response's audio_content is binary.
    with open("output.mp3", "wb") as out:
        out.write(response.audio_content)
        print('Audio content written to file "output.mp3"')

Linguaggi aggiuntivi

C#: segui le istruzioni di configurazione di C# nella pagina delle librerie client e poi consulta la documentazione di riferimento di Text-to-Speech per .NET.

PHP: segui le istruzioni per la configurazione dei file PHP nella pagina delle librerie client e poi consulta la documentazione di riferimento di Text-to-Speech per PHP.

Ruby: segui le istruzioni per la configurazione di Ruby nella pagina delle librerie client e poi consulta la documentazione di riferimento di Text-to-Speech per Ruby.

Converti SSML in audio vocale sintetico

L'utilizzo di SSML nella richiesta di sintesi audio può produrre un audio più simile al parlato umano naturale. Nello specifico, SSML offre un controllo più granulare sul modo in cui l'output audio rappresenta le pause nel parlato o su come l'audio pronuncia date, orari, acronimi e abbreviazioni.

Per maggiori dettagli sugli elementi SSML supportati dall'API Text-to-Speech, consulta la documentazione di riferimento SSML.

Protocollo

Per informazioni dettagliate, fai riferimento all'endpoint API di text:synthesize.

Per sintetizzare l'audio da SSML, effettua una richiesta POST HTTP all'endpoint text:synthesize. Nel corpo della richiesta POST, specifica il tipo di voce da sintetizzare nella sezione di configurazione voice, specifica il codice SSML da sintetizzare nel campo ssml della sezione input e specifica il tipo di audio da creare nella sezione audioConfig.

Lo snippet di codice riportato di seguito invia una richiesta di sintesi all'endpoint text:synthesize e salva i risultati in un file denominato synthesize-ssml.txt. Sostituisci PROJECT_ID con l'ID progetto.

curl -H "Authorization: Bearer $(gcloud auth print-access-token)" \
  -H "x-goog-user-project: <var>PROJECT_ID</var>" \
  -H "Content-Type: application/json; charset=utf-8" --data "{
    'input':{
     'ssml':'<speak>The <say-as interpret-as=\"characters\">SSML</say-as> standard
          is defined by the <sub alias=\"World Wide Web Consortium\">W3C</sub>.</speak>'
    },
    'voice':{
      'languageCode':'en-us',
      'name':'en-US-Standard-B',
      'ssmlGender':'MALE'
    },
    'audioConfig':{
      'audioEncoding':'MP3'
    }
  }" "https://texttospeech.googleapis.com/v1/text:synthesize" > synthesize-ssml.txt

L'API Text-to-Speech restituisce l'audio sintetizzato come dati codificati in Base64 contenuti nell'output JSON. L'output JSON nel file synthesize-ssml.txt è simile al seguente snippet di codice.

{
  "audioContent": "//NExAASCCIIAAhEAGAAEMW4kAYPnwwIKw/BBTpwTvB+IAxIfghUfW.."
}

Per decodificare i risultati dell'API Text-to-Speech come file audio MP3, esegui il seguente comando dalla stessa directory del file synthesize-ssml.txt.

cat synthesize-ssml.txt | grep 'audioContent' | \
sed 's|audioContent| |' | tr -d '\n ":{},' > tmp.txt && \
base64 tmp.txt --decode > synthesize-ssml-audio.mp3 && \
rm tmp.txt

Go

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

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.


// SynthesizeSSML synthesizes ssml and saves the output to outputFile.
//
// ssml must be well-formed according to:
//
//	https://www.w3.org/TR/speech-synthesis/
//
// Example: <speak>Hello there.</speak>
func SynthesizeSSML(w io.Writer, ssml, outputFile string) error {
	ctx := context.Background()

	client, err := texttospeech.NewClient(ctx)
	if err != nil {
		return err
	}
	defer client.Close()

	req := texttospeechpb.SynthesizeSpeechRequest{
		Input: &texttospeechpb.SynthesisInput{
			InputSource: &texttospeechpb.SynthesisInput_Ssml{Ssml: ssml},
		},
		// Note: the voice can also be specified by name.
		// Names of voices can be retrieved with client.ListVoices().
		Voice: &texttospeechpb.VoiceSelectionParams{
			LanguageCode: "en-US",
			SsmlGender:   texttospeechpb.SsmlVoiceGender_FEMALE,
		},
		AudioConfig: &texttospeechpb.AudioConfig{
			AudioEncoding: texttospeechpb.AudioEncoding_MP3,
		},
	}

	resp, err := client.SynthesizeSpeech(ctx, &req)
	if err != nil {
		return err
	}

	err = ioutil.WriteFile(outputFile, resp.AudioContent, 0644)
	if err != nil {
		return err
	}
	fmt.Fprintf(w, "Audio content written to file: %v\n", outputFile)
	return nil
}

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.

/**
 * Demonstrates using the Text to Speech client to synthesize text or ssml.
 *
 * <p>Note: ssml must be well-formed according to: (https://www.w3.org/TR/speech-synthesis/
 * Example: <speak>Hello there.</speak>
 *
 * @param ssml the ssml document to be synthesized. (e.g., "<?xml...")
 * @throws Exception on TextToSpeechClient Errors.
 */
public static ByteString synthesizeSsml(String ssml) throws Exception {
  // Instantiates a client
  try (TextToSpeechClient textToSpeechClient = TextToSpeechClient.create()) {
    // Set the ssml input to be synthesized
    SynthesisInput input = SynthesisInput.newBuilder().setSsml(ssml).build();

    // Build the voice request
    VoiceSelectionParams voice =
        VoiceSelectionParams.newBuilder()
            .setLanguageCode("en-US") // languageCode = "en_us"
            .setSsmlGender(SsmlVoiceGender.FEMALE) // ssmlVoiceGender = SsmlVoiceGender.FEMALE
            .build();

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

    // Perform the text-to-speech request
    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("output.mp3")) {
      out.write(audioContents.toByteArray());
      System.out.println("Audio content written to file \"output.mp3\"");
      return audioContents;
    }
  }
}

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.

const textToSpeech = require('@google-cloud/text-to-speech');
const fs = require('fs');
const util = require('util');

const client = new textToSpeech.TextToSpeechClient();

/**
 * TODO(developer): Uncomment the following lines before running the sample.
 */
// const ssml = '<speak>Hello there.</speak>';
// const outputFile = 'Local path to save audio file to, e.g. output.mp3';

const request = {
  input: {ssml: ssml},
  voice: {languageCode: 'en-US', ssmlGender: 'FEMALE'},
  audioConfig: {audioEncoding: 'MP3'},
};

const [response] = await client.synthesizeSpeech(request);
const writeFile = util.promisify(fs.writeFile);
await writeFile(outputFile, response.audioContent, 'binary');
console.log(`Audio content written to file: ${outputFile}`);

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 synthesize_ssml(ssml):
    """Synthesizes speech from the input string of ssml.

    Note: ssml must be well-formed according to:
        https://www.w3.org/TR/speech-synthesis/

    Example: <speak>Hello there.</speak>
    """
    from google.cloud import texttospeech

    client = texttospeech.TextToSpeechClient()

    input_text = texttospeech.SynthesisInput(ssml=ssml)

    # Note: the voice can also be specified by name.
    # Names of voices can be retrieved with client.list_voices().
    voice = texttospeech.VoiceSelectionParams(
        language_code="en-US",
        name="en-US-Standard-C",
        ssml_gender=texttospeech.SsmlVoiceGender.FEMALE,
    )

    audio_config = texttospeech.AudioConfig(
        audio_encoding=texttospeech.AudioEncoding.MP3
    )

    response = client.synthesize_speech(
        input=input_text, voice=voice, audio_config=audio_config
    )

    # The response's audio_content is binary.
    with open("output.mp3", "wb") as out:
        out.write(response.audio_content)
        print('Audio content written to file "output.mp3"')

Linguaggi aggiuntivi

C#: segui le istruzioni di configurazione di C# nella pagina delle librerie client e poi consulta la documentazione di riferimento di Text-to-Speech per .NET.

PHP: segui le istruzioni per la configurazione dei file PHP nella pagina delle librerie client e poi consulta la documentazione di riferimento di Text-to-Speech per PHP.

Ruby: segui le istruzioni per la configurazione di Ruby nella pagina delle librerie client e poi consulta la documentazione di riferimento di Text-to-Speech per Ruby.

Provalo

Se non hai mai utilizzato Google Cloud, crea un account per valutare le prestazioni di Text-to-Speech in scenari reali. I nuovi clienti ricevono anche 300 $ di crediti gratuiti per l'esecuzione, il test e il deployment dei carichi di lavoro.

Prova Text-to-Speech senza costi