Use perfis de dispositivos para áudio gerado

Esta página descreve como selecionar um perfil de dispositivo para o áudio criado pela conversão de texto em voz.

Pode otimizar a voz sintética produzida pela conversão de texto em voz para reprodução em diferentes tipos de hardware. Por exemplo, se a sua app for executada principalmente em dispositivos mais pequenos do tipo "vestível", pode criar voz sintética a partir da API Text-to-Speech otimizada especificamente para altifalantes mais pequenos.

Também pode aplicar vários perfis de dispositivos à mesma voz sintética. A API Text-to-Speech aplica perfis de dispositivos ao áudio na ordem fornecida no pedido ao ponto final text:synthesize. Evite especificar o mesmo perfil mais do que uma vez, uma vez que pode ter resultados indesejáveis se aplicar o mesmo perfil várias vezes.

A utilização de perfis de áudio é opcional. Se optar por usar um (ou mais), a conversão de texto em voz aplica os perfis aos resultados de voz pós-síntese. Se optar por não usar um perfil de áudio, recebe os resultados de voz sem modificações pós-síntese.

Para ouvir a diferença entre o áudio gerado a partir de diferentes perfis, 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

Nota: cada perfil de áudio foi otimizado para um dispositivo específico através do ajuste de uma série de efeitos de áudio. No entanto, a marca e o modelo do dispositivo usado para otimizar o perfil podem não corresponder exatamente aos dispositivos de reprodução dos utilizadores. Pode ter de experimentar diferentes perfis para encontrar a melhor saída de som para a sua aplicação.

Perfis de áudio disponíveis

A tabela seguinte apresenta os IDs e exemplos dos perfis de dispositivos disponíveis para utilização pela API Text-to-Speech.

ID do perfil de áudio Otimizado para
wearable-class-device Smartwatches e outros dispositivos de vestir, como o Apple Watch e o relógio Wear OS
handset-class-device Smartphones, como o Google Pixel, o Samsung Galaxy e o Apple iPhone
headphone-class-device Auriculares ou auscultadores para a reprodução de áudio, como os auscultadores Sennheiser
small-bluetooth-speaker-class-device Altifalantes domésticos pequenos, como o Google Home Mini
medium-bluetooth-speaker-class-device Altifalantes de casa inteligente, como o Google Home
large-home-entertainment-class-device Sistemas de entretenimento doméstico ou smart TVs, como o Google Home Max ou a TV LG
large-automotive-class-device Altifalantes do carro
telephony-class-application Sistemas de Resposta de voz interativa (IVR)

Especifique um perfil de áudio a usar

Para especificar um perfil de áudio a usar, defina o campo effectsProfileId para o pedido de conversão de texto em voz.

Protocolo

Para gerar um ficheiro de áudio, faça um pedido POST e forneça o corpo do pedido adequado. O exemplo seguinte mostra um pedido POST com curl. O exemplo usa a CLI Google Cloud para obter um token de acesso para o pedido. Para ver instruções sobre como instalar a CLI gcloud, consulte o artigo Autentique-se na API Text-to-Speech.

O exemplo seguinte mostra como enviar um pedido para o ponto final 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 o pedido for bem-sucedido, a API Text-to-Speech devolve o áudio sintetizado como dados codificados em base64 contidos na saída JSON. O resultado JSON no ficheiro audio-profiles.txt tem o seguinte aspeto:

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

Para descodificar os resultados da API Cloud Text-to-Speech como um ficheiro de áudio MP3, execute o seguinte comando a partir do mesmo diretório que o ficheiro 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 cliente para a API Text-to-Speech, consulte o artigo Bibliotecas cliente da API Text-to-Speech. Para mais informações, consulte a documentação de referência da API GoText-to-Speech.

Para se autenticar na API Text-to-Speech, configure as Credenciais padrão da aplicação. Para mais informações, consulte o artigo Configure 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 cliente para a API Text-to-Speech, consulte o artigo Bibliotecas cliente da API Text-to-Speech. Para mais informações, consulte a documentação de referência da API JavaText-to-Speech.

Para se autenticar na API Text-to-Speech, configure as Credenciais padrão da aplicação. Para mais informações, consulte o artigo Configure 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 cliente para a API Text-to-Speech, consulte o artigo Bibliotecas cliente da API Text-to-Speech. Para mais informações, consulte a documentação de referência da API Node.jsText-to-Speech.

Para se autenticar na API Text-to-Speech, configure as Credenciais padrão da aplicação. Para mais informações, consulte o artigo Configure 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 cliente para a API Text-to-Speech, consulte o artigo Bibliotecas cliente da API Text-to-Speech. Para mais informações, consulte a documentação de referência da API PythonText-to-Speech.

Para se autenticar na API Text-to-Speech, configure as Credenciais padrão da aplicação. Para mais informações, consulte o artigo Configure 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)

Idiomas adicionais

C#: Siga as instruções de configuração do C# na página das bibliotecas cliente e, em seguida, visite a documentação de referência de conversão de texto em voz para .NET.

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

Ruby: Siga as instruções de configuração do Ruby na página das bibliotecas cliente e, em seguida, visite a documentação de referência da conversão de texto em voz para Ruby.