Criar arquivos de áudio de voz

A Text-to-Speech permite converter palavras e sentenças em dados de áudio codificados em Base64 de fala humana natural. Depois é possível converter os dados em um arquivo de áudio que pode ser tocado como um MP3 por meio da decodificação dos dados em Base64. A API Text-to-Speech aceita entradas como textos brutos ou linguagem de marcação de síntese de fala (SSML).

Este documento descreve como criar um arquivo de áudio com base em uma entrada de texto ou SSML usando a Text-to-Speech. Você também pode consultar os princípios básicos da Text-to-Speech para aprender sobre conceitos como síntese de fala ou SSML.

Para lidar com essas amostras, você precisa instalar e inicializar a CLI do Google Cloud. Para saber como configurar a gcloud CLI, consulte Autenticar-se na TTS.

Converter textos em áudios de voz sintética

Com os exemplos de código a seguir, demonstramos como converter uma string em dados de áudio.

É possível configurar a saída da síntese de fala de várias maneiras, incluindo a seleção de uma voz exclusiva ou a modulação do tom, do volume, da taxa de fala e da taxa de amostragem da saída.

Protocolo

Consulte o endpoint da API text:synthesize para saber todos os detalhes.

Para sintetizar um áudio com base em um texto, faça uma solicitação POST HTTP para o endpoint text:synthesize. No corpo da solicitação POST, especifique o tipo de voz que será sintetizado na seção de configuração voice. Especifique também o texto que será sintetizado no campo text da seção input e, por fim, especifique o tipo de áudio que será criado na seção audioConfig.

O snippet de código a seguir envia uma solicitação de síntese ao endpoint text:synthesize e salva os resultados em um arquivo synthesize-text.txt. Substitua PROJECT_ID pelo ID do projeto.

curl -H "Authorization: Bearer $(gcloud auth print-access-token)" \
  -H "x-goog-user-project: <var>PROJECT_ID</var>" \
  -H "Content-Type: application/json; charset=utf-8" \
  --data "{
    'input':{
      'text':'Android is a mobile operating system developed by Google,
         based on the Linux kernel and designed primarily for
         touchscreen mobile devices such as smartphones and tablets.'
    },
    'voice':{
      'languageCode':'en-gb',
      'name':'en-GB-Standard-A',
      'ssmlGender':'FEMALE'
    },
    'audioConfig':{
      'audioEncoding':'MP3'
    }
  }" "https://texttospeech.googleapis.com/v1/text:synthesize" > synthesize-text.txt

A API Text-to-Speech retorna o áudio sintetizado como dados codificados em Base64 contidos na saída JSON. A saída JSON no arquivo synthesize-text.txt é semelhante ao seguinte snippet de código.

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

Para decodificar os resultados da API Text-to-Speech como um arquivo de áudio MP3, execute o comando a seguir no mesmo diretório do arquivo synthesize-text.txt.

cat synthesize-text.txt | grep 'audioContent' | \
sed 's|audioContent| |' | tr -d '\n ":{},' > tmp.txt && \
base64 tmp.txt --decode > synthesize-text-audio.mp3 && \
rm tmp.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-se na Text-to-Speech, configure o Application Default Credentials. Para mais informações, consulte Configurar a autenticação para um ambiente de desenvolvimento local.


// SynthesizeText synthesizes plain text and saves the output to outputFile.
func SynthesizeText(w io.Writer, text, outputFile string) error {
	ctx := context.Background()

	client, err := texttospeech.NewClient(ctx)
	if err != nil {
		return err
	}
	defer client.Close()

	req := texttospeechpb.SynthesizeSpeechRequest{
		Input: &texttospeechpb.SynthesisInput{
			InputSource: &texttospeechpb.SynthesisInput_Text{Text: text},
		},
		// Note: the voice can also be specified by name.
		// Names of voices can be retrieved with client.ListVoices().
		Voice: &texttospeechpb.VoiceSelectionParams{
			LanguageCode: "en-US",
			SsmlGender:   texttospeechpb.SsmlVoiceGender_FEMALE,
		},
		AudioConfig: &texttospeechpb.AudioConfig{
			AudioEncoding: texttospeechpb.AudioEncoding_MP3,
		},
	}

	resp, err := client.SynthesizeSpeech(ctx, &req)
	if err != nil {
		return err
	}

	err = os.WriteFile(outputFile, resp.AudioContent, 0644)
	if 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-se 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 to synthesize text or ssml.
 *
 * @param text the raw text to be synthesized. (e.g., "Hello there!")
 * @throws Exception on TextToSpeechClient Errors.
 */
public static ByteString synthesizeText(String text) 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
    AudioConfig audioConfig =
        AudioConfig.newBuilder()
            .setAudioEncoding(AudioEncoding.MP3) // MP3 audio.
            .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\"");
      return audioContents;
    }
  }
}

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-se na Text-to-Speech, configure o Application Default Credentials. Para mais informações, consulte Configurar a autenticação para um ambiente de desenvolvimento local.

const textToSpeech = require('@google-cloud/text-to-speech');
const fs = require('fs');
const util = require('util');

const client = new textToSpeech.TextToSpeechClient();

/**
 * TODO(developer): Uncomment the following lines before running the sample.
 */
// const text = 'Text to synthesize, eg. hello';
// const outputFile = 'Local path to save audio file to, e.g. output.mp3';

const request = {
  input: {text: text},
  voice: {languageCode: 'en-US', ssmlGender: 'FEMALE'},
  audioConfig: {audioEncoding: 'MP3'},
};
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-se 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():
    """Synthesizes speech from the input string of text."""
    from google.cloud import texttospeech

    text = "Hello there."
    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",
        name="en-US-Chirp3-HD-Charon",
    )

    audio_config = texttospeech.AudioConfig(
        audio_encoding=texttospeech.AudioEncoding.MP3
    )

    response = client.synthesize_speech(
        input=input_text,
        voice=voice,
        audio_config=audio_config,
    )

    # The response's audio_content is binary.
    with open("output.mp3", "wb") as out:
        out.write(response.audio_content)
        print('Audio content written to file "output.mp3"')

Outras linguagens

C#: siga as instruções de configuração de C# na página das bibliotecas de cliente e, em seguida, acesse a documentação de referência da Text-to-Speech para .NET.

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

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

Converter SSML em áudio de voz sintética

O uso de SSML na solicitação de síntese de áudio pode produzir um áudio mais semelhante à fala humana natural. O SSML oferece especificamente um controle mais detalhado sobre como a saída de áudio representa as pausas na fala ou como o áudio pronuncia datas, horas, siglas e abreviações.

Para saber mais sobre os elementos SSML aceitos pela API Text-to-Speech, consulte a referência de SSML.

Protocolo

Consulte o endpoint da API text:synthesize para saber todos os detalhes.

Para sintetizar áudios com base em SSML, faça uma solicitação POST HTTP para o endpoint text:synthesize. No corpo da solicitação POST, especifique o tipo de voz que será sintetizado na seção de configuração voice. Especifique também a SSML que será sintetizada no campo ssml da seção input e, por fim, especifique o tipo de áudio que será criado na seção audioConfig.

O snippet de código a seguir envia uma solicitação de síntese ao endpoint text:synthesize e salva os resultados em um arquivo synthesize-ssml.txt. Substitua PROJECT_ID pelo ID do projeto.

curl -H "Authorization: Bearer $(gcloud auth print-access-token)" \
  -H "x-goog-user-project: <var>PROJECT_ID</var>" \
  -H "Content-Type: application/json; charset=utf-8" --data "{
    'input':{
     'ssml':'<speak>The <say-as interpret-as=\"characters\">SSML</say-as> standard
          is defined by the <sub alias=\"World Wide Web Consortium\">W3C</sub>.</speak>'
    },
    'voice':{
      'languageCode':'en-us',
      'name':'en-US-Standard-B',
      'ssmlGender':'MALE'
    },
    'audioConfig':{
      'audioEncoding':'MP3'
    }
  }" "https://texttospeech.googleapis.com/v1/text:synthesize" > synthesize-ssml.txt

A API Text-to-Speech retorna o áudio sintetizado como dados codificados em Base64 contidos na saída JSON. A saída JSON no arquivo synthesize-ssml.txt é semelhante ao seguinte snippet de código.

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

Para decodificar os resultados da API Text-to-Speech como um arquivo de áudio MP3, execute o comando a seguir no mesmo diretório do arquivo synthesize-ssml.txt.

cat synthesize-ssml.txt | grep 'audioContent' | \
sed 's|audioContent| |' | tr -d '\n ":{},' > tmp.txt && \
base64 tmp.txt --decode > synthesize-ssml-audio.mp3 && \
rm tmp.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-se na Text-to-Speech, configure o Application Default Credentials. Para mais informações, consulte Configurar a autenticação para um ambiente de desenvolvimento local.


// SynthesizeSSML synthesizes ssml and saves the output to outputFile.
//
// ssml must be well-formed according to:
//
//	https://www.w3.org/TR/speech-synthesis/
//
// Example: <speak>Hello there.</speak>
func SynthesizeSSML(w io.Writer, ssml, outputFile string) error {
	ctx := context.Background()

	client, err := texttospeech.NewClient(ctx)
	if err != nil {
		return err
	}
	defer client.Close()

	req := texttospeechpb.SynthesizeSpeechRequest{
		Input: &texttospeechpb.SynthesisInput{
			InputSource: &texttospeechpb.SynthesisInput_Ssml{Ssml: ssml},
		},
		// Note: the voice can also be specified by name.
		// Names of voices can be retrieved with client.ListVoices().
		Voice: &texttospeechpb.VoiceSelectionParams{
			LanguageCode: "en-US",
			SsmlGender:   texttospeechpb.SsmlVoiceGender_FEMALE,
		},
		AudioConfig: &texttospeechpb.AudioConfig{
			AudioEncoding: texttospeechpb.AudioEncoding_MP3,
		},
	}

	resp, err := client.SynthesizeSpeech(ctx, &req)
	if err != nil {
		return err
	}

	err = os.WriteFile(outputFile, resp.AudioContent, 0644)
	if 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-se 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 to synthesize text or ssml.
 *
 * <p>Note: ssml must be well-formed according to: (https://www.w3.org/TR/speech-synthesis/
 * Example: <speak>Hello there.</speak>
 *
 * @param ssml the ssml document to be synthesized. (e.g., "<?xml...")
 * @throws Exception on TextToSpeechClient Errors.
 */
public static ByteString synthesizeSsml(String ssml) throws Exception {
  // Instantiates a client
  try (TextToSpeechClient textToSpeechClient = TextToSpeechClient.create()) {
    // Set the ssml input to be synthesized
    SynthesisInput input = SynthesisInput.newBuilder().setSsml(ssml).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
    AudioConfig audioConfig =
        AudioConfig.newBuilder()
            .setAudioEncoding(AudioEncoding.MP3) // MP3 audio.
            .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\"");
      return audioContents;
    }
  }
}

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-se na Text-to-Speech, configure o Application Default Credentials. Para mais informações, consulte Configurar a autenticação para um ambiente de desenvolvimento local.

const textToSpeech = require('@google-cloud/text-to-speech');
const fs = require('fs');
const util = require('util');

const client = new textToSpeech.TextToSpeechClient();

/**
 * TODO(developer): Uncomment the following lines before running the sample.
 */
// const ssml = '<speak>Hello there.</speak>';
// const outputFile = 'Local path to save audio file to, e.g. output.mp3';

const request = {
  input: {ssml: ssml},
  voice: {languageCode: 'en-US', ssmlGender: 'FEMALE'},
  audioConfig: {audioEncoding: 'MP3'},
};

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-se 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_ssml():
    """Synthesizes speech from the input string of ssml.

    Note: ssml must be well-formed according to:
        https://www.w3.org/TR/speech-synthesis/

    """
    from google.cloud import texttospeech

    ssml = "<speak>Hello there.</speak>"
    client = texttospeech.TextToSpeechClient()

    input_text = texttospeech.SynthesisInput(ssml=ssml)

    # 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",
        name="en-US-Standard-C",
        ssml_gender=texttospeech.SsmlVoiceGender.FEMALE,
    )

    audio_config = texttospeech.AudioConfig(
        audio_encoding=texttospeech.AudioEncoding.MP3
    )

    response = client.synthesize_speech(
        input=input_text, voice=voice, audio_config=audio_config
    )

    # The response's audio_content is binary.
    with open("output.mp3", "wb") as out:
        out.write(response.audio_content)
        print('Audio content written to file "output.mp3"')

Outras linguagens

C#: siga as instruções de configuração de C# na página das bibliotecas de cliente e, em seguida, acesse a documentação de referência da Text-to-Speech para .NET.

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

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