Usare i profili del dispositivo per l'audio generato

In questa pagina viene descritto come selezionare un profilo del dispositivo per l'audio creato da Text-to-Speech.

Puoi ottimizzare la lingua sintetica prodotta da Text-to-Speech per la riproduzione su diversi tipi di hardware. Ad esempio, se la tua app viene eseguita principalmente su tipi di dispositivi "indossabili" di piccole dimensioni, puoi creare voce sintetica dall'API Text-to-Speech ottimizzata specificamente per altoparlanti di piccole dimensioni.

Puoi anche applicare più profili del dispositivo allo stesso voce sintetico. L'API Text-to-Speech applica i profili del dispositivo all'audio nell'ordine fornito nella richiesta all'endpoint text:synthesize. Evita di specificare lo stesso profilo più di una volta, in quanto potresti ottenere risultati indesiderati applicando lo stesso profilo più volte.

L'utilizzo dei profili audio è facoltativo. Se scegli di utilizzarne uno o più, Text-to-Speech applica i profili ai risultati vocali post-sintetizzati. Se scegli di non utilizzare un profilo audio, riceverai i risultati vocali senza modifiche post-sintesi.

Per sentire la differenza tra l'audio generato da profili diversi, confronta i due clip qui sotto.


Esempio 1. Audio generato con il profilo handset-class-device


Esempio 2. Audio generato con il profilo telephony-class-application

Nota: ogni profilo audio è stato ottimizzato per un dispositivo specifico regolando una serie di effetti audio. Tuttavia, la marca e il modello del dispositivo utilizzato per ottimizzare il profilo potrebbero non corrispondere esattamente ai dispositivi di riproduzione degli utenti. Potresti dover sperimentare diversi profili per trovare l'output audio migliore per la tua applicazione.

Profili audio disponibili

La seguente tabella fornisce gli ID e gli esempi dei profili dei dispositivi disponibili per l'utilizzo da parte dell'API Text-to-Speech.

ID profilo audio Ottimizzato per
wearable-class-device Smartwatch e altri dispositivi indossabili, come Apple Watch e Wear OS
handset-class-device Smartphone, come Google Pixel, Samsung Galaxy, Apple iPhone
headphone-class-device Auricolari o cuffie per la riproduzione audio, come le cuffie Sennheiser
small-bluetooth-speaker-class-device Piccoli speaker per la casa, come Google Home Mini
medium-bluetooth-speaker-class-device Speaker per la smart home, come Google Home
large-home-entertainment-class-device Sistemi di intrattenimento per la casa o smart TV, come Google Home Max, LG TV
large-automotive-class-device Altoparlanti auto
telephony-class-application Sistemi di Risposta Vocale Interattiva (IVR)

Specifica un profilo audio da utilizzare

Per specificare un profilo audio da utilizzare, imposta il campo effectsProfileId per la richiesta di sintesi vocale.

Protocollo

Per generare un file audio, effettua una richiesta POST e fornisci il corpo della richiesta appropriato. Di seguito è riportato un esempio di richiesta POST che utilizza curl. L'esempio utilizza Google Cloud CLI per recuperare un token di accesso per la richiesta. Per istruzioni sull'installazione di gcloud CLI, consulta Autenticazione in Text-to-Speech.

L'esempio seguente mostra come inviare una richiesta all'endpoint text:synthesize.

curl \
  -H "Authorization: Bearer "$(gcloud auth print-access-token) \
  -H "Content-Type: application/json; charset=utf-8" \
  --data "{
    'input':{
      'text':'This is a sentence that helps test how audio profiles can change the way Cloud Text-to-Speech sounds.'
    },
    'voice':{
      'languageCode':'en-us',
    },
    'audioConfig':{
      'audioEncoding':'LINEAR16',
      'effectsProfileId': ['telephony-class-application']
    }
  }" "https://texttospeech.googleapis.com/v1beta1/text:synthesize" > audio-profile.txt

Se la richiesta ha esito positivo, l'API Text-to-Speech restituisce l'audio sintetizzato come dati codificati in base64 contenuti nell'output JSON. L'output JSON nel file audio-profiles.txt è simile al seguente:

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

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

sed 's|audioContent| |' < audio-profile.txt > tmp-output.txt && \
tr -d '\n ":{}' < tmp-output.txt > tmp-output-2.txt && \
base64 tmp-output-2.txt --decode > audio-profile.wav && \
rm tmp-output*.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.


import (
	"fmt"
	"io"
	"io/ioutil"

	"context"

	texttospeech "cloud.google.com/go/texttospeech/apiv1"
	"cloud.google.com/go/texttospeech/apiv1/texttospeechpb"
)

// audioProfile generates audio from text using a custom synthesizer like a telephone call.
func audioProfile(w io.Writer, text string, outputFile string) error {
	// text := "hello"
	// outputFile := "out.mp3"

	ctx := context.Background()

	client, err := texttospeech.NewClient(ctx)
	if err != nil {
		return fmt.Errorf("NewClient: %w", err)
	}
	defer client.Close()

	req := &texttospeechpb.SynthesizeSpeechRequest{
		Input: &texttospeechpb.SynthesisInput{
			InputSource: &texttospeechpb.SynthesisInput_Text{Text: text},
		},
		Voice: &texttospeechpb.VoiceSelectionParams{LanguageCode: "en-US"},
		AudioConfig: &texttospeechpb.AudioConfig{
			AudioEncoding:    texttospeechpb.AudioEncoding_MP3,
			EffectsProfileId: []string{"telephony-class-application"},
		},
	}

	resp, err := client.SynthesizeSpeech(ctx, req)
	if err != nil {
		return fmt.Errorf("SynthesizeSpeech: %w", err)
	}

	if err = ioutil.WriteFile(outputFile, resp.AudioContent, 0644); 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 with audio profiles to synthesize text or ssml
 *
 * @param text the raw text to be synthesized. (e.g., "Hello there!")
 * @param effectsProfile audio profile to be used for synthesis. (e.g.,
 *     "telephony-class-application")
 * @throws Exception on TextToSpeechClient Errors.
 */
public static void synthesizeTextWithAudioProfile(String text, String effectsProfile)
    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 and the audio profile
    AudioConfig audioConfig =
        AudioConfig.newBuilder()
            .setAudioEncoding(AudioEncoding.MP3) // MP3 audio.
            .addEffectsProfileId(effectsProfile) // audio profile
            .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\"");
    }
  }
}

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.


/**
 * TODO(developer): Uncomment these variables before running the sample.
 */
// const text = 'Text you want to vocalize';
// const outputFile = 'YOUR_OUTPUT_FILE_LOCAtION;
// const languageCode = 'LANGUAGE_CODE_FOR_OUTPUT';
// const ssmlGender = 'SSML_GENDER_OF_SPEAKER';

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

// Creates a client
const client = new speech.TextToSpeechClient();

async function synthesizeWithEffectsProfile() {
  // Add one or more effects profiles to array.
  // Refer to documentation for more details:
  // https://cloud.google.com/text-to-speech/docs/audio-profiles
  const effectsProfileId = ['telephony-class-application'];

  const request = {
    input: {text: text},
    voice: {languageCode: languageCode, ssmlGender: ssmlGender},
    audioConfig: {audioEncoding: 'MP3', effectsProfileId: effectsProfileId},
  };

  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_with_audio_profile(text, output, effects_profile_id):
    """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")

    # Note: you can pass in multiple effects_profile_id. They will be applied
    # in the same order they are provided.
    audio_config = texttospeech.AudioConfig(
        audio_encoding=texttospeech.AudioEncoding.MP3,
        effects_profile_id=[effects_profile_id],
    )

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

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

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.