Créer des contenus audio de longue durée

Ce document vous explique en détail comment synthétiser des contenus audio de longue durée. Les synthèses audio longues synthétisent de manière asynchrone jusqu'à un million d'octets en entrée. Pour en savoir plus sur les concepts fondamentaux de Text-to-Speech, consultez la page Concepts fondamentaux de Text-to-Speech.

Avant de commencer

Avant de pouvoir envoyer une requête à l'API Text-to-Speech, vous devez avoir effectué les actions suivantes. Pour en savoir plus, consultez la page Avant de commencer.

Synthétiser des contenus audio de longue durée à partir de texte avec la ligne de commande

Vous pouvez convertir du texte long en contenu audio en envoyant une requête HTTP POST au point de terminaison https://texttospeech.googleapis.com/v1beta1/projects/{$project_number}/locations/global:synthesizeLongAudio. Dans le corps de votre commande POST, spécifiez les champs suivants.

voice : type de voix à synthétiser

input.text : texte à synthétiser

audioConfig : type de contenu audio à créer

output_gcs_uri : chemin d'accès au fichier de sortie GCS sous la forme "gs://nom_bucket/nom_fichier.wav"

parent : parent, sous la forme "projects/{NUMBER PROJECT NUMBER//locations/{YOUR PROJECT LOCATION}"

L'entrée peut contenir jusqu'à 1 Mo de caractères, la limite exacte pouvant varier.

  1. Créez un bucket Google Cloud Storage sous le projet utilisé pour exécuter la synthèse. Assurez-vous que le compte de service utilisé pour exécuter la synthèse dispose d'un accès en lecture/écriture au bucket GCS de sortie.

  2. Exécutez la requête REST ci-dessous sur la ligne de commande pour synthétiser des contenus audio à partir d'un texte à l'aide de Text-to-Speech. La commande récupère un jeton d'autorisation pour la requête à l'aide de gcloud auth application-default print-access-token.

    Assurez-vous que le compte de service qui exécute l'opération GET dispose du rôle Éditeur Text-to-Speech.

    Méthode HTTP et URL :

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

    Corps JSON de la requête :

    {
      "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"
    }
    

    Pour envoyer votre requête, développez l'une des options suivantes :

    Vous devriez recevoir une réponse JSON de ce type :

    {
      "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. Le résultat JSON de la commande REST contient le nom de l'opération de longue durée dans le champ name. Exécutez la requête REST ci-dessous dans la ligne de commande pour interroger l'état de l'opération de longue durée.

    Assurez-vous que le compte de service qui exécute l'opération GET provient du même projet que celui utilisé pour la synthèse.

    Méthode HTTP et URL :

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

    Pour envoyer votre requête, développez l'une des options suivantes :

    Vous devriez recevoir une réponse JSON de ce type :

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

  4. Interrogez la liste de toutes les opérations exécutées dans un projet donné, puis exécutez la requête REST ci-dessous.

    Assurez-vous que le compte de service qui exécute l'opération LIST provient du même projet que celui utilisé pour la synthèse.

    Méthode HTTP et URL :

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

    Pour envoyer votre requête, développez l'une des options suivantes :

    Vous devriez recevoir une réponse JSON de ce type :

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

  5. Une fois l'opération de longue durée terminée, recherchez le fichier audio de sortie dans l'URI de bucket donné dans le champ output_gcs_uri. Si l'opération n'a pas abouti, recherchez l'erreur en exécutant la requête à l'aide de la commande REST GET, corrigez l'erreur et émettez à nouveau le RPC.

Synthétiser des contenus audio longs à partir de texte à l'aide de bibliothèques clientes

Installer la bibliothèque cliente

Python

Avant d'installer la bibliothèque, assurez-vous d'avoir préparé votre environnement pour le développement Python.

pip install --upgrade google-cloud-texttospeech

Créer des données audio

Vous pouvez utiliser Text-to-Speech pour créer un long fichier audio de voix humaine synthétique. Utilisez le code suivant pour créer un fichier audio long dans votre bucket GCS.

Python

Avant d'exécuter l'exemple, assurez-vous d'avoir préparé l'environnement pour le développement 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,
    )

Effectuer un nettoyage

Pour éviter d'encourir des frais inutiles liés à Google Cloud Platform, supprimez votre projet à l'aide de Google Cloud Console si vous n'en avez plus besoin.

Étape suivante

  • Pour en savoir plus sur Cloud Text-to-Speech, consultez la page Concepts de base.
  • Passez en revue la liste des voix disponibles que vous pouvez utiliser pour la voix synthétique.