Usar perfis de dispositivos para áudio gerado

Nesta página, descrevemos como selecionar um perfil de dispositivo para áudio criado pela Cloud Text-to-Speech.

Otimize a fala sintética produzida pelo Cloud Text-to-Speech para reprodução em diferentes tipos de hardware. Por exemplo, se o app é executado basicamente em dispositivos menores e "wearable", você pode criar uma fala sintética da API Cloud Text-to-Speech que é otimizada especificamente para alto-falantes menores.

Você também pode aplicar vários perfis de dispositivo à mesma fala sintética. A API Cloud Text-to-Speech aplica perfis de dispositivo ao áudio na ordem fornecida na solicitação para o endpoint text:synthesize. Evite especificar o mesmo perfil mais de uma vez porque você pode ter resultados indesejados.

O uso de perfis de áudio é opcional. Se você optar por usar um ou mais, o Cloud Text-to-Speech vai aplicar os perfis aos resultados de fala pós-sintetizados. Se optar por não usar um perfil de áudio, você receberá os resultados da fala sem modificações pós-síntese.

Para ouvir a diferença entre o áudio gerado de perfis diferentes, compare os dois clipes abaixo.


Exemplo 1. Áudio gerado com o perfil handset-class-device


Exemplo 2. Áudio gerado com o perfil telephony-class-application

Observação: cada perfil de áudio foi otimizado para um dispositivo específico, com o ajuste de uma gama de efeitos. No entanto, a marca e o modelo do dispositivo usado para ajustar o perfil podem não corresponder exatamente aos dispositivos de reprodução dos usuários. Talvez seja necessário experimentar diferentes perfis para encontrar a melhor saída de som para seu aplicativo.

Perfis de áudio disponíveis

A tabela a seguir fornece os códigos e exemplos dos perfis de dispositivos disponíveis para uso pela API Cloud Text-to-Speech.

Código do perfil de áudio Otimizado para
wearable-class-device Smartwatches e outros wearables, como Apple Watch e Wear OS
handset-class-device Smartphones, como Google Pixel, Samsung Galaxy e Apple iPhone
headphone-class-device Fones de ouvido para reprodução de áudio, como os fones de ouvido Sennheiser
small-bluetooth-speaker-class-device Alto-falantes domésticos pequenos, como o Google Home Mini
medium-bluetooth-speaker-class-device Alto-falantes domésticos inteligentes, como o Google Home
large-home-entertainment-class-device Sistemas de entretenimento doméstico ou smart TVs, como Google Home Max e LG TV
large-automotive-class-device Alto-falantes para carro
telephony-class-application Sistemas de resposta de voz interativa (IVR, na sigla em inglês)

Especificar um perfil de áudio para usar

Para especificar um perfil de áudio a ser usado, defina o campo effectsProfileId para a solicitação de sintetização de fala.

Protocolo

Para gerar um arquivo de áudio, faça uma solicitação POST e forneça o corpo da solicitação apropriada. Veja a seguir um exemplo de uma solicitação POST usando curl. O exemplo usa a CLI do Google Cloud para recuperar um token de acesso para a solicitação. Para instruções sobre como instalar a gcloud CLI, consulte Autenticar no Cloud TTS.

O exemplo a seguir mostra como enviar uma solicitação para o 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 a solicitação for bem-sucedida, a API Cloud Text-to-Speech retornará o áudio sintetizado como dados codificados em base64 contidos na saída JSON. A saída JSON no arquivo audio-profiles.txt tem esta aparência:

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

Para decodificar os resultados da API Cloud Text-to-Speech como um arquivo de áudio MP3, execute o seguinte comando no mesmo diretório do arquivo 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

Para saber como instalar e usar a biblioteca de cliente da Cloud TTS, consulte Bibliotecas de cliente da Cloud TTS. Saiba mais na documentação de referência da API Cloud TTS para Go.

Para se autenticar na Cloud TTS, configure o Application Default Credentials. Se quiser mais informações, consulte Configurar a autenticação para um ambiente de desenvolvimento local.


import (
	"fmt"
	"io"
	"os"

	"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 = os.WriteFile(outputFile, resp.AudioContent, 0644); err != nil {
		return err
	}

	fmt.Fprintf(w, "Audio content written to file: %v\n", outputFile)

	return nil
}

Java

Para saber como instalar e usar a biblioteca de cliente da Cloud TTS, consulte Bibliotecas de cliente da Cloud TTS. Saiba mais na documentação de referência da API Cloud TTS para Java.

Para se autenticar na Cloud TTS, configure o Application Default Credentials. Se quiser mais informações, consulte Configurar a autenticação para um ambiente de desenvolvimento local.

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

Para saber como instalar e usar a biblioteca de cliente da Cloud TTS, consulte Bibliotecas de cliente da Cloud TTS. Saiba mais na documentação de referência da API Cloud TTS para Node.js.

Para se autenticar na Cloud TTS, configure o Application Default Credentials. Se quiser mais informações, consulte Configurar a autenticação para um ambiente de desenvolvimento local.


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

Para saber como instalar e usar a biblioteca de cliente da Cloud TTS, consulte Bibliotecas de cliente da Cloud TTS. Saiba mais na documentação de referência da API Cloud TTS para Python.

Para se autenticar na Cloud TTS, configure o Application Default Credentials. Se quiser mais informações, consulte Configurar a autenticação para um ambiente de desenvolvimento local.

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)

Linguagens adicionais

C#: siga as instruções de configuração do C# na página das bibliotecas de cliente e acesse a documentação de referência da Cloud TTS para .NET.

PHP: siga as instruções de configuração do PHP na página das bibliotecas de cliente e acesse a documentação de referência da Cloud TTS para PHP.

Ruby: siga as Instruções de configuração do Ruby na página das bibliotecas de cliente e acesse a Documentação de referência da Cloud TTS para Ruby.