Crea audio de formato largo

En este documento, se explica el proceso de sintetizar audio de formato largo. La síntesis de audio larga sintetiza de forma asíncrona hasta 1 millón de bytes en la entrada. Para obtener más información sobre los conceptos básicos de Text-to-Speech, consulta Conceptos básicos de Text-to-Speech.

Antes de comenzar

Antes de enviar una solicitud a la API de Text-to-Speech, debes completar las siguientes acciones. Consulta la página antes de comenzar para obtener más detalles.

Sintetiza audio a partir de texto con la línea de comandos

Para convertir texto en audio de formato largo, realiza una solicitud HTTP POST al extremo https://texttospeech.googleapis.com/v1beta1/projects/{$project_number}/locations/global:synthesizeLongAudio. En el cuerpo de tu comando POST, especifica los siguientes campos.

voice: El tipo de voz que se debe sintetizar.

input.text: El texto que se debe sintetizar.

audioConfig: El tipo de audio que se creará.

output_gcs_uri: La ruta de acceso del archivo de salida de GCS con la forma “gs://bucket_name/file_name.wav”.

parent: El elemento, con el formato “projects/{YOUR PROJECT NUMBER}/locations/{YOUR PROJECT LOCATION}”.

La entrada puede contener hasta 1 MB de caracteres; el límite exacto puede variar según la entrada.

  1. Crea un bucket de Google Cloud Storage en el proyecto que se usa para ejecutar la síntesis. Asegúrate de que la cuenta de servicio que se usa para ejecutar la síntesis tenga acceso de lectura/escritura al bucket de salida de GCS.

  2. Ejecuta la solicitud REST que aparece a continuación en la línea de comandos para sintetizar audio a partir de texto mediante Text-to-Speech. La operación usa el comando gcloud auth application-default print-access-token a fin de recuperar un token de autorización para la solicitud.

    Asegúrate de que la cuenta de servicio que ejecuta la operación GET tenga la función de Editor Text-to-Speech.

    Método HTTP y URL:

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

    Cuerpo JSON de la solicitud:

    {
      "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 tu solicitud, expande una de estas opciones:

    Deberías recibir una respuesta JSON similar a la que se muestra a continuación:

    {
      "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. El resultado de JSON para el comando de REST contiene el nombre de la operación de formato largo en el campo name. Ejecuta la solicitud REST que aparece a continuación en la línea de comandos para consultar el estado de la operación de larga duración.

    Asegúrate de que la cuenta de servicio que ejecuta la operación GET sea del mismo proyecto que la que se usa para la síntesis.

    Método HTTP y URL:

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

    Para enviar tu solicitud, expande una de estas opciones:

    Deberías recibir una respuesta JSON similar a la que se muestra a continuación:

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

  4. Consulta la lista de todas las operaciones que se ejecutan en un proyecto determinado y ejecuta la siguiente solicitud REST.

    Asegúrate de que la cuenta de servicio que ejecuta la operación LIST sea del mismo proyecto que la que se usó para la síntesis.

    Método HTTP y URL:

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

    Para enviar tu solicitud, expande una de estas opciones:

    Deberías recibir una respuesta JSON similar a la que se muestra a continuación:

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

  5. Una vez que se complete la operación de larga duración de forma correcta, busca el archivo de audio de salida en el URI del depósito determinado en el campo output_gcs_uri. Si la operación no se completó correctamente, busca el error mediante la consulta con el comando GET de REST, corrige el error y vuelve a emitir la RPC.

Sintetiza audio largo a partir de texto con bibliotecas cliente

Instala la biblioteca cliente

Python

Antes de instalar la biblioteca, asegúrate de haber preparado tu entorno para el desarrollo en Python.

pip install --upgrade google-cloud-texttospeech

Crea datos de audio

Puedes usar Text-to-Speech para crear un archivo de audio largo de voz humana sintética. Usa el siguiente código para crear un archivo de audio largo en tu bucket de GCS.

Python

Antes de ejecutar el ejemplo, asegúrate de haber preparado tu entorno para el desarrollo en 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,
    )

Limpia

A fin de evitar cargos innecesarios de Google Cloud Platform, usa la consola de Google Cloud para borrar tu proyecto si no lo necesitas.

¿Qué sigue?