Crear audio de formato largo

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

Antes de empezar

Antes de enviar una solicitud a la API Text-to-Speech, debes haber completado las siguientes acciones. Consulta la página Antes de empezar para obtener más información.

Sintetizar audio largo a partir de texto mediante la línea de comandos

Puedes convertir texto largo en audio haciendo una solicitud HTTP POST al endpoint https://texttospeech.googleapis.com/v1beta1/projects/{$project_number}/locations/global:synthesizeLongAudio. En el cuerpo del comando POST, especifica los siguientes campos.

voice: el tipo de voz que se va a sintetizar.

input.text: el texto que se va a sintetizar.

audioConfig: el tipo de audio que se va a crear.

output_gcs_uri: la Google Cloud ruta de salida con el formato "gs://nombre_del_cubo/nombre_del_archivo.wav".

parent: el elemento superior 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 en función de la entrada.

  1. Crea un Google Cloud segmento de almacenamiento 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 y escritura al segmento de salida. Google Cloud

  2. Ejecuta la solicitud REST en la línea de comandos para sintetizar el audio del texto con Text-to-Speech. El comando usa el comando gcloud auth application-default print-access-token para recuperar un token de autorización para la solicitud.

    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, despliega una de estas opciones:

    Deberías recibir una respuesta JSON similar a la siguiente:

    {
      "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. La salida JSON del comando REST contiene el nombre de la operación larga en el campo name. Ejecuta la solicitud REST 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 pertenezca al 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, despliega una de estas opciones:

    Deberías recibir una respuesta JSON similar a la siguiente:

    {
      "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 están ejecutando en un proyecto determinado y ejecuta la solicitud REST.

    Asegúrate de que la cuenta de servicio que ejecuta la operación LIST 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

    Para enviar tu solicitud, despliega una de estas opciones:

    Deberías recibir una respuesta JSON similar a la siguiente:

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

  5. Una vez que se haya completado correctamente la operación de larga duración, busca el archivo de audio de salida en el URI del bucket proporcionado en el campo output_gcs_uri. Si la operación no se ha completado correctamente, busque el error consultando con el comando GET REST, corríjalo y vuelva a emitir la RPC.

Sintetizar audio largo a partir de texto con bibliotecas de cliente

Sigue estas instrucciones para sintetizar audio de larga duración.

Instalar la biblioteca cliente

Python

Antes de instalar la biblioteca, prepara el entorno para las tareas de desarrollo en Python.

pip install --upgrade google-cloud-texttospeech

Crear datos de audio

Puedes usar Text-to-Speech para crear un archivo de audio largo con una voz humana sintética. Usa el siguiente código para crear un archivo de audio largo en tu Google Cloud segmento.

Python

Antes de ejecutar el ejemplo, prepara el entorno para las tareas de 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,
    )

Limpieza

Para evitar cargos innecesarios, usa la Google Cloud console para eliminar tu proyecto si no lo necesitas. Google Cloud

Siguientes pasos