Crie áudio de formato longo

Este documento explica o processo de síntese de áudio de formato longo. A síntese de áudio longa sintetiza de forma assíncrona até 1 milhão de bytes na entrada. Para saber mais acerca dos conceitos fundamentais da conversão de texto em voz, leia o artigo Noções básicas da conversão de texto em voz.

Antes de começar

Antes de poder enviar um pedido para a API Text-to-Speech, tem de ter concluído as seguintes ações. Consulte a página antes de começar para ver detalhes.

Sintetize áudio longo a partir de texto através da linha de comandos

Pode converter texto de formato longo em áudio fazendo um pedido HTTP POST para o ponto final https://texttospeech.googleapis.com/v1beta1/projects/{$project_number}/locations/global:synthesizeLongAudio. No corpo do comando POST, especifique os seguintes campos.

voice: o tipo de voz a sintetizar.

input.text: o texto a sintetizar.

audioConfig: o tipo de áudio a criar.

output_gcs_uri: o Google Cloud caminho de saída no formato "gs://bucket_name/file_name.wav".

parent: o elemento principal no formato "projects/{YOUR_PROJECT_NUMBER}/locations/{YOUR_PROJECT_LOCATION}".

A entrada pode conter até 1 MB de carateres. O limite exato pode variar consoante as diferentes entradas.

  1. Crie um Google Cloud contentor de armazenamento no projeto usado para executar a síntese. Certifique-se de que a conta de serviço usada para executar a síntese tem acesso de leitura e escrita ao contentor Google Cloud de saída.

  2. Execute o pedido REST na linha de comandos para sintetizar o áudio a partir do texto com a API Text-to-Speech. O comando usa o comando gcloud auth application-default print-access-token para obter um token de autorização para o pedido.

    Método HTTP e URL:

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

    Corpo JSON do pedido:

    {
      "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 o seu pedido, expanda uma destas opções:

    Deve receber uma resposta JSON semelhante à seguinte:

    {
      "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. O resultado JSON do comando REST contém o nome da operação longa no campo name. Execute o pedido REST na linha de comandos para consultar o estado da operação de longa duração.

    Certifique-se de que a conta de serviço que executa a operação GET pertence ao mesmo projeto que o usado para a síntese.

    Método HTTP e URL:

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

    Para enviar o seu pedido, expanda uma destas opções:

    Deve receber uma resposta JSON semelhante à seguinte:

    {
      "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 num determinado projeto e execute o pedido REST.

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

    Método HTTP e URL:

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

    Para enviar o seu pedido, expanda uma destas opções:

    Deve receber uma resposta JSON semelhante à seguinte:

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

  5. Quando a operação de longa duração for concluída com êxito, encontre o ficheiro de áudio de saída no URI do bucket indicado no campo output_gcs_uri. Se a operação não for concluída com êxito, encontre o erro consultando através do comando REST GET, corrija o erro e emita novamente o RPC.

Sintetize áudio longo a partir de texto com bibliotecas cliente

Siga estas instruções para sintetizar áudio longo.

Instale a biblioteca de cliente

Python

Antes de instalar a biblioteca, certifique-se de que preparou o seu ambiente para o desenvolvimento em Python.

pip install --upgrade google-cloud-texttospeech

Crie dados de áudio

Pode usar a conversão de texto em voz para criar um ficheiro de áudio longo de voz humana sintética. Use o seguinte código para criar um ficheiro de áudio longo no seu Google Cloud contentor.

Python

Antes de executar o exemplo, certifique-se de que preparou o seu 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 custos Google Cloud desnecessários, use o Google Cloud console para eliminar o seu projeto se não precisar dele.

O que se segue?