Criar áudio de formato longo

Este documento orienta você pelo processo de sintetização de áudio de formato longo. A síntese de áudio longa sintetiza de maneira assíncrona até 1 milhão de bytes na entrada. Para saber mais sobre os conceitos básicos do Text-to-Speech, leia Princípios básicos do Text-to-Speech.

Antes de começar

Antes de enviar uma solicitação para a API Text-to-Speech, é preciso concluir as ações a seguir. Consulte a página antes de começar para ver os detalhes.

Como sintetizar áudio de textos com a linha de comando

É possível converter texto longo para áudio fazendo uma solicitação HTTP POST ao endpoint https://texttospeech.googleapis.com/v1beta1/projects/{$project_number}/locations/global:synthesizeLongAudio. No corpo do comando POST, especifique os campos a seguir.

voice: o tipo de voz que será sintetizada.

input.text: o texto que será sintetizado.

audioConfig: o tipo de áudio que será criado.

output_gcs_uri: o caminho do arquivo de saída do GCS no formato "gs://bucket_name/file_name.wav".

parent: o pai no formato "projects/{YOUR PROJECT NUMBER}/locations/{YOUR PROJECT LOCATION}".

A entrada pode conter até 1 MB de caracteres, e o limite exato pode variar.

  1. Crie um bucket do Google Cloud Storage no projeto usado para executar a síntese. Verifique se a conta de serviço usada para executar a síntese tem acesso de leitura/gravação ao bucket de saída do GCS.

  2. Execute a solicitação REST abaixo na linha de comando para sintetizar o áudio do texto usando o Text-to-Speech. O comando usa o comando gcloud auth application-default print-access-token para recuperar um token de autorização da solicitação.

    Verifique se a conta de serviço que executa a operação GET tem o papel de Editor da Text-to-Speech.

    Método HTTP e URL:

    POST https://texttospeech.googleapis.com/v1beta1/projects/12345/locations/global:synthesizeLongAudio

    Corpo JSON da solicitação:

    {
      "parent": "projects/12345/locations/global",
      "audio_config":{
          "audio_encoding":"LINEAR16"
      },
      "input":{
          "text":"hello"
      },
      "voice":{
          "language_code":"en-us",
          "name":"en-us-Standard-A"
      },
      "output_gcs_uri": "gs://bucket_name/file_name.wav"
    }
    

    Para enviar a solicitação, expanda uma destas opções:

    Você receberá uma resposta JSON semelhante a esta:

    {
      "name": "23456",
      "metadata": {
        "@type": "type.googleapis.com/google.cloud.texttospeech.v1beta1.SynthesizeLongAudioMetadata",
        "progressPercentage": 0,
        "startTime": "2022-12-20T00:46:56.296191037Z",
        "lastUpdateTime": "2022-12-20T00:46:56.296191037Z"
      },
      "done": false
    }
    

  3. A saída JSON para o comando REST contém o nome da operação longa no campo name. Execute a solicitação REST abaixo na linha de comando para consultar o estado da operação de longa duração.

    Verifique se a conta de serviço que executa a operação GET é do mesmo projeto usado para a síntese.

    Método HTTP e URL:

    GET https://texttospeech.googleapis.com/v1beta1/projects/12345/locations/global/operations/23456

    Para enviar a solicitação, expanda uma destas opções:

    Você receberá uma resposta JSON semelhante a esta:

    {
      "name": "projects/12345/locations/global/operations/23456",
      "metadata": {
        "@type": "type.googleapis.com/google.cloud.texttospeech.v1beta1.SynthesizeLongAudioMetadata",
        "progressPercentage": 100
      },
      "done": true
    }
    

  4. Consulte a lista de todas as operações em execução em um determinado projeto e execute a solicitação REST abaixo.

    Verifique se a conta de serviço que executa a operação LIST é do mesmo projeto usado para a síntese.

    Método HTTP e URL:

    GET https://texttospeech.googleapis.com/v1beta1/projects/12345/locations/global/operations

    Para enviar a solicitação, expanda uma destas opções:

    Você receberá uma resposta JSON semelhante a esta:

    {
      "operations": [
        {
          "name": "12345",
          "done": false
        },
        {
          "name": "23456",
          "done": false
        }
      ],
      "nextPageToken": ""
    }
    

  5. Depois que a operação de longa duração for concluída, encontre o arquivo de áudio de saída no URI do bucket fornecido no campo output_gcs_uri. Se a operação não foi concluída, encontre o erro consultando com o comando GET REST, corrija o erro e emita o RPC novamente.

Sintetizar áudio longo de texto usando bibliotecas de cliente

Instale a biblioteca de cliente

Python

Antes de instalar a biblioteca, verifique se você preparou seu ambiente para o desenvolvimento do Python.

pip install --upgrade google-cloud-texttospeech

Criar dados de áudio

É possível usar o Text-to-Speech para criar um arquivo de áudio longo de fala humana sintética. Use o código a seguir para criar um arquivo de áudio longo no bucket do GCS.

Python

Antes de executar o exemplo, verifique se você preparou o ambiente para o desenvolvimento em Python.

# Copyright 2023 Google LLC
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#      http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

from google.cloud import texttospeech


def synthesize_long_audio(project_id: str, output_gcs_uri: str) -> None:
    """
    Synthesizes long input, writing the resulting audio to `output_gcs_uri`.

    Args:
        project_id: ID or number of the Google Cloud project you want to use.
        output_gcs_uri: Specifies a Cloud Storage URI for the synthesis results.
            Must be specified in the format:
            ``gs://bucket_name/object_name``, and the bucket must
            already exist.
    """

    client = texttospeech.TextToSpeechLongAudioSynthesizeClient()

    input = texttospeech.SynthesisInput(
        text="Test input. Replace this with any text you want to synthesize, up to 1 million bytes long!"
    )

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

    voice = texttospeech.VoiceSelectionParams(
        language_code="en-US", name="en-US-Standard-A"
    )

    parent = f"projects/{project_id}/locations/us-central1"

    request = texttospeech.SynthesizeLongAudioRequest(
        parent=parent,
        input=input,
        audio_config=audio_config,
        voice=voice,
        output_gcs_uri=output_gcs_uri,
    )

    operation = client.synthesize_long_audio(request=request)
    # Set a deadline for your LRO to finish. 300 seconds is reasonable, but can be adjusted depending on the length of the input.
    # If the operation times out, that likely means there was an error. In that case, inspect the error, and try again.
    result = operation.result(timeout=300)
    print(
        "\nFinished processing, check your GCS bucket to find your audio file! Printing what should be an empty result: ",
        result,
    )

Limpar

Para evitar cobranças desnecessárias do Google Cloud Platform, use o console do Google Cloud para excluir o projeto se ele não for mais necessário.

A seguir