Usar perfis de dispositivos para áudio gerado

Esta página descreve como selecionar um perfil de dispositivo para áudio criado pelo Text-to-Speech.

Otimize a fala sintética produzida pelo Text-to-Speech para reprodução em diferentes tipos de hardware. Por exemplo, caso seu app seja executado principalmente em dispositivos menores e do tipo wearable, você poderá criar uma fala sintética a partir da API Text-to-Speech, otimizada especificamente para alto-falantes menores.

Você também pode aplicar vários perfis de dispositivo à mesma fala sintética. A API 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 Text-to-Speech 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 IDs e exemplos dos perfis de dispositivo disponíveis para uso pela API 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 CLI gcloud, consulte Autenticar na Text-to-Speech.

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 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 Text-to-Speech, consulte Bibliotecas de cliente da Text-to-Speech. Para mais informações, consulte a documentação de referência da API Go Text-to-Speech.

Para autenticar na Text-to-Speech, configure o Application Default Credentials. Para mais informações, consulte Configurar a autenticação para um ambiente de desenvolvimento local.


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

Para saber como instalar e usar a biblioteca de cliente da Text-to-Speech, consulte Bibliotecas de cliente da Text-to-Speech. Para mais informações, consulte a documentação de referência da API Java Text-to-Speech.

Para autenticar na Text-to-Speech, configure o Application Default Credentials. Para 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 Text-to-Speech, consulte Bibliotecas de cliente da Text-to-Speech. Para mais informações, consulte a documentação de referência da API Node.js Text-to-Speech.

Para autenticar na Text-to-Speech, configure o Application Default Credentials. Para 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 Text-to-Speech, consulte Bibliotecas de cliente da Text-to-Speech. Para mais informações, consulte a documentação de referência da API Python Text-to-Speech.

Para autenticar na Text-to-Speech, configure o Application Default Credentials. Para mais informações, consulte Configurar a autenticação para um ambiente de desenvolvimento local.

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)

Outras linguagens

C# Siga estas instruções:Instruções de configuração do C# na página das bibliotecas de cliente e, em seguida, visite oDocumentação de referência do Text-to-Speech para .NET.

PHP Siga estas instruções:Instruções de configuração do PHP na página das bibliotecas de cliente e, em seguida, visite oDocumentação de referência do Text-to-Speech para PHP.

Ruby Siga estas instruções:Instruções de configuração do Ruby na página das bibliotecas de cliente e, em seguida, visite oDocumentação de referência do Text-to-Speech para Ruby.