Utilizzare i profili dispositivo per l'audio generato

Questa pagina descrive come selezionare un profilo del dispositivo per l'audio creato da Text-to-Speech.

Puoi ottimizzare il linguaggio sintetico prodotto da Text-to-Speech per la riproduzione su diversi tipi di hardware. Ad esempio, se la tua app viene eseguita principalmente su dispositivi più piccoli e "wearable", puoi creare un parlato sintetico dall'API Text-to-Speech ottimizzato specificamente per altoparlanti più piccoli.

Puoi anche applicare più profili dispositivo alla stessa voce sintetica. L'API Text-to-Speech applica i profili dei dispositivi 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-sintesi. Se scegli di non utilizzare un profilo audio, riceverai i risultati di sintesi vocale senza alcuna modifica post-sintesi.

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


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 con profili diversi per trovare l'output audio migliore per la tua applicazione.

Profili audio disponibili

La tabella seguente riporta gli ID e gli esempi dei profili del dispositivo disponibili per l'utilizzo dall'API Text-to-Speech.

ID profilo audio Ottimizzato per
wearable-class-device Smartwatch e altri dispositivi indossabili, come Apple Watch, smartwatch Wear OS
handset-class-device Smartphone, come Google Pixel, Samsung Galaxy, Apple iPhone
headphone-class-device Auricolari o cuffie per la riproduzione audio, ad esempio 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 domestico o smart TV, come Google Home Max, TV LG
large-automotive-class-device Altoparlanti per 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 mediante curl. L'esempio utilizza Google Cloud CLI per recuperare un token di accesso per la richiesta. Per istruzioni sull'installazione di gcloud CLI, consulta Eseguire l'autenticazione per la sintesi vocale.

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 riesce, 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 è il seguente:

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

Per decodificare i risultati dell'API Cloud Text-to-Speech come file audio MP3, esegui il seguente comando 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 Librerie client Text-to-Speech. Per ulteriori informazioni, consulta la documentazione di riferimento dell'API Text-to-Speech Go.

Per autenticarti a 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 Librerie client Text-to-Speech. Per ulteriori informazioni, consulta la documentazione di riferimento dell'API Text-to-Speech Java.

Per autenticarti a 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 Librerie client Text-to-Speech. Per ulteriori informazioni, consulta la documentazione di riferimento dell'API Text-to-Speech Node.js.

Per autenticarti a 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 Librerie client Text-to-Speech. Per ulteriori informazioni, consulta la documentazione di riferimento dell'API Text-to-Speech Python.

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

    text = "hello"
    output = "output.mp3"
    effects_profile_id = "telephony-class-application"
    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 per C# nella pagina delle librerie client e poi consulta la documentazione di riferimento di Text-to-Speech per .NET.

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

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