Usa perfiles de dispositivos para el audio generado

En esta página, se describe cómo seleccionar un perfil de dispositivo para el audio que se creó con Text-to-Speech.

Puedes optimizar la voz sintética producida por Text-to-Speech para reproducirla en diferentes tipos de hardware. Por ejemplo, si tu app se ejecuta principalmente en dispositivos más pequeños y “wearables”, puedes crear desde la API de Text-to-Speech voces sintéticas optimizadas específicamente para bocinas más pequeñas.

También puedes aplicar varios perfiles de dispositivo a la misma voz sintética. La API de Text-to-Speech aplica perfiles de dispositivo al audio en el orden proporcionado en la solicitud del extremo text:synthesize. Evita especificar el mismo perfil más de una vez, dado que puedes generar resultados indeseados.

El uso de perfiles de audio es opcional. Si eliges usar uno (o más), Text-to-Speech aplica los perfiles a los resultados de voz luego de sintetizados. Si eliges no usar un perfil de audio, recibirás los resultados de voz sin ninguna modificación posterior a la síntesis.

Para escuchar la diferencia entre el audio generado con diferentes perfiles, compara los dos clips siguientes.


Ejemplo 1. Audio generado con el perfil handset-class-device


Ejemplo 2. Audio generado con el perfil telephony-class-application

Nota: Cada perfil de audio se optimizó para un dispositivo específico mediante el ajuste de diversos efectos de audio. Sin embargo, la marca y el modelo del dispositivo que se usó para ajustar el perfil pueden no coincidir exactamente con los dispositivos de reproducción de los usuarios. Es posible que debas experimentar con distintos perfiles a fin de encontrar el mejor sonido para tu aplicación.

Perfiles de audio disponibles

En la siguiente tabla, se proporcionan los ID y ejemplos de los perfiles de dispositivo disponibles para que los utilice la API de Text-to-Speech.

ID de perfil de audio Optimizado para
wearable-class-device Relojes inteligentes y otros wearables, como Apple Watch, reloj Wear OS
handset-class-device Smartphones, como Google Pixel, Samsung Galaxy, Apple iPhone
headphone-class-device Auriculares para reproducción de audio, como los de la marca Sennheiser
small-bluetooth-speaker-class-device Bocinas pequeñas para el hogar, como Google Home Mini
medium-bluetooth-speaker-class-device Bocinas inteligentes para el hogar, como Google Home
large-home-entertainment-class-device Sistemas de entretenimiento para el hogar o televisores inteligentes, como Google Home Max, LG TV
large-automotive-class-device Bocinas para automóviles
telephony-class-application Sistemas de respuesta de voz interactiva (IVR)

Especifica un perfil de audio para usar

A fin de especificar un perfil de audio para usar, establece el campo effectsProfileId de la solicitud de síntesis de voz.

Protocolo

Para generar un archivo de audio, realiza una solicitud POST y proporciona el cuerpo de la solicitud correspondiente. A continuación, se muestra un ejemplo de una solicitud POST con curl. En el ejemplo, se usa el token de acceso de una cuenta de servicio configurada para el proyecto con el SDK de Cloud de Google Cloud Platform. Si deseas obtener instrucciones para instalar el SDK de Cloud, configurar un proyecto con una cuenta de servicio y conseguir un token de acceso, consulta las guías de inicio rápido.

En el siguiente ejemplo, se muestra cómo enviar una solicitud al extremo 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

Si la solicitud es exitosa, la API de Text-to-Speech muestra el audio sintetizado como datos codificados en Base64 en un resultado de JSON. El resultado de JSON en el archivo audio-profiles.txt es similar a lo siguiente:

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

Para decodificar los resultados de la API de Cloud Text-to-Speech como un archivo de audio MP3, ejecuta el siguiente comando desde el mismo directorio que el archivo 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

Comienza a usarlo


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

	"context"

	texttospeech "cloud.google.com/go/texttospeech/apiv1"
	texttospeechpb "google.golang.org/genproto/googleapis/cloud/texttospeech/v1"
)

// 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: %v", 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: %v", 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

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


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

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)

Idiomas adicionales

C#: Sigue las instrucciones de configuración de C# en la página de bibliotecas cliente y, luego, visita la documentación de referencia de Text-to-Speech para .NET

PHP: Sigue las instrucciones de configuración de PHP en la página de bibliotecas cliente y, luego, visita la documentación de referencia de Text-to-Speech para PHP.

Ruby : Sigue lasInstrucciones de configuración de Ruby en la página Bibliotecas cliente y, luego, visitaDocumentación de referencia de Text-to-Speech para Ruby.