Compartir a través de


Uso de la síntesis por lotes para el avatar de texto a voz

La API de síntesis por lotes para el avatar de texto a voz permite la síntesis asincrónica de texto en un avatar de conversación como un archivo de vídeo. Los publicadores y las plataformas de contenido de vídeo pueden usar esta API para crear contenido de vídeo de avatar en un lote. Ese enfoque puede ser adecuado para varios casos de uso, como materiales de entrenamiento, presentaciones o anuncios.

El vídeo del avatar sintético se generará de forma asincrónica después de que el sistema reciba la entrada de texto. La salida de vídeo generada se puede descargar en el modo de síntesis por lotes. Envíe texto para síntesis, sondee el estado de la síntesis y descargue la salida del vídeo cuando el estado indique que se ha realizado correctamente. Los formatos de las entradas de texto deben ser texto sin formato o texto en Lenguaje de marcado de síntesis de voz (SSML).

El diagrama a continuación proporciona una introducción general del flujo de trabajo.

Captura de pantalla de la visualización de información general de alto nivel del flujo de trabajo de síntesis por lotes

Puede usar las siguientes operaciones de la API de REST para la síntesis por lotes.

Operación Método Llamada a API REST
Creación de síntesis por lotes PUT avatar/batchsyntheses/{SynthesisId}?api-version=2024-08-01
Obtención de síntesis por lotes GET avatar/batchsyntheses/{SynthesisId}?api-version=2024-08-01
Enumeración de síntesis por lotes GET avatar/batchsyntheses/?api-version=2024-08-01
Eliminación de síntesis por lotes Delete avatar/batchsyntheses/{SynthesisId}?api-version=2024-08-01

Puede consultar los ejemplos de código en GitHub.

Creación de una solicitud de síntesis por lotes

Algunas propiedades en formato JSON son necesarias cuando se crea un nuevo trabajo de síntesis por lotes. Las demás propiedades son opcionales. La respuesta de síntesis por lotes incluye otras propiedades para proporcionar información sobre el estado y los resultados de la síntesis. Por ejemplo, la propiedad outputs.result contiene la ubicación de , donde puede descargar un archivo de vídeo que contiene el vídeo del avatar. Desde outputs.summary, puede acceder a los detalles de resumen y depuración.

Para enviar una solicitud de síntesis por lotes, construya el cuerpo de la solicitud HTTP POST según las instrucciones siguientes:

  • Establezca la propiedad inputKind requerida.
  • Si la propiedad inputKind está establecida en PlainText, también debe establecer la propiedad voice en el synthesisConfig. En el ejemplo siguiente, inputKind está establecido en SSML, de modo que no se ha establecido speechSynthesis.
  • Establezca la propiedad SynthesisId requerida. Elija un SynthesisId único para el mismo recurso de voz. El SynthesisId puede ser una cadena de 3 a 64 caracteres, incluidas letras, números, "-" o "_", con la condición de que debe comenzar y terminar con una letra o un número.
  • Establezca las propiedades talkingAvatarCharacter y talkingAvatarStyle necesarias. Aquí puede encontrar los caracteres y estilos de avatar admitidos.
  • Opcionalmente, puede establecer videoFormat, backgroundColor y otras propiedades. Para obtener más información, consulte Propiedades de la síntesis por lotes.

Nota:

El tamaño máximo de carga JSON que se aceptará es de 500 kilobytes.

Cada recurso de Voz puede tener hasta 200 trabajos de síntesis por lotes ejecutándose simultáneamente.

La longitud máxima del vídeo de salida es actualmente de 20 minutos, con posibles aumentos en el futuro.

Para realizar una solicitud HTTP PUT, use el formato URI que se muestra en el ejemplo siguiente. Reemplace YourSpeechKey por la clave de recurso de Voz, YourSpeechRegion por la región del recurso de Voz y establezca las propiedades del cuerpo de la solicitud como se ha descrito anteriormente.

curl -v -X PUT -H "Ocp-Apim-Subscription-Key: YourSpeechKey" -H "Content-Type: application/json" -d '{
    "inputKind": "SSML",
    "inputs": [
        {
         "content": "<speak version='\''1.0'\'' xml:lang='\''en-US'\''><voice name='\''en-US-AvaMultilingualNeural'\''>The rainbow has seven colors.</voice></speak>"
        }
    ],
    "avatarConfig": {
        "talkingAvatarCharacter": "lisa",
        "talkingAvatarStyle": "graceful-sitting"
    }
}'  "https://YourSpeechRegion.api.cognitive.microsoft.com/avatar/batchsyntheses/my-job-01?api-version=2024-08-01"

Debe recibir un cuerpo de respuesta en el formato siguiente:

{
    "id": "my-job-01",
    "internalId": "5a25b929-1358-4e81-a036-33000e788c46",
    "status": "NotStarted",
    "createdDateTime": "2024-03-06T07:34:08.9487009Z",
    "lastActionDateTime": "2024-03-06T07:34:08.9487012Z",
    "inputKind": "SSML",
    "customVoices": {},
    "properties": {
        "timeToLiveInHours": 744,
    },
    "avatarConfig": {
        "talkingAvatarCharacter": "lisa",
        "talkingAvatarStyle": "graceful-sitting",
        "videoFormat": "Mp4",
        "videoCodec": "hevc",
        "subtitleType": "soft_embedded",
        "bitrateKbps": 2000,
        "customized": false
    }
}

La propiedad status debe evolucionar del estado NotStarted a Running y, por último, a Succeeded o Failed. Puede llamar a la API de síntesis por lotes GET periódicamente hasta que el estado devuelto sea Succeeded o Failed.

Obtención de síntesis por lotes

Para obtener el estado de un trabajo de síntesis por lotes, realice una solicitud HTTP GET mediante el URI, como se muestra en el ejemplo siguiente.

Reemplace YourSynthesisId por el id. de la síntesis por lotes, YourSpeechKey por la clave del recurso de Voz y YourSpeechRegion por la región del recurso de Voz.

curl -v -X GET "https://YourSpeechRegion.api.cognitive.microsoft.com/avatar/batchsyntheses/YourSynthesisId?api-version=2024-08-01" -H "Ocp-Apim-Subscription-Key: YourSpeechKey"

Debe recibir un cuerpo de respuesta en el formato siguiente:

{
    "id": "my-job-01",
    "internalId": "5a25b929-1358-4e81-a036-33000e788c46",
    "status": "Succeeded",
    "createdDateTime": "2024-03-06T07:34:08.9487009Z",
    "lastActionDateTime": "2024-03-06T07:34:12.5698769",
    "inputKind": "SSML",
    "customVoices": {},
    "properties": {
        "timeToLiveInHours": 744,
        "sizeInBytes": 344460,
        "durationInMilliseconds": 2520,
        "succeededCount": 1,
        "failedCount": 0,
        "billingDetails": {
            "neuralCharacters": 29,
            "talkingAvatarDurationSeconds": 2
        }
    },
    "avatarConfig": {
        "talkingAvatarCharacter": "lisa",
        "talkingAvatarStyle": "graceful-sitting",
        "videoFormat": "Mp4",
        "videoCodec": "hevc",
        "subtitleType": "soft_embedded",
        "bitrateKbps": 2000,
        "customized": false
    },
    "outputs": {
        "result": "https://stttssvcprodusw2.blob.core.windows.net/batchsynthesis-output/xxxxx/xxxxx/0001.mp4?SAS_Token",
        "summary": "https://stttssvcprodusw2.blob.core.windows.net/batchsynthesis-output/xxxxx/xxxxx/summary.json?SAS_Token"
    }
}

Desde el campo outputs.result puede descargar un archivo de vídeo que contiene el vídeo del avatar. El campo outputs.summary permite descargar los detalles de resumen y depuración. Para más información sobre los resultados de la síntesis por lotes, consulte resultados de la síntesis por lotes.

Enumeración de síntesis por lotes

Para enumerar todos los trabajos de síntesis por lotes para el recurso de Voz, realice una solicitud HTTP GET mediante el URI, como se muestra en el ejemplo siguiente.

Reemplace YourSpeechKey por la clave del recurso de Voz y YourSpeechRegion por la región del recurso de Voz. Opcionalmente, puede establecer los parámetros de consulta skip y top (tamaño de página) en la dirección URL. El valor predeterminado de skip es 0 y el valor predeterminado de maxpagesize es 100.

curl -v -X GET "https://YourSpeechRegion.api.cognitive.microsoft.com/avatar/batchsyntheses?skip=0&maxpagesize=2&api-version=2024-08-01" -H "Ocp-Apim-Subscription-Key: YourSpeechKey"

Debe recibir un cuerpo de respuesta en el formato siguiente:

{
    "value": [
        {
            "id": "my-job-02",
            "internalId": "14c25fcf-3cb6-4f46-8810-ecad06d956df",
            "status": "Succeeded",
            "createdDateTime": "2024-03-06T07:52:23.9054709Z",
            "lastActionDateTime": "2024-03-06T07:52:29.3416944",
            "inputKind": "SSML",
            "customVoices": {},
            "properties": {
                "timeToLiveInHours": 744,
                "sizeInBytes": 502676,
                "durationInMilliseconds": 2950,
                "succeededCount": 1,
                "failedCount": 0,
                "billingDetails": {
                    "neuralCharacters": 32,
                    "talkingAvatarDurationSeconds": 2
                }
            },
            "avatarConfig": {
                "talkingAvatarCharacter": "lisa",
                "talkingAvatarStyle": "casual-sitting",
                "videoFormat": "Mp4",
                "videoCodec": "h264",
                "subtitleType": "soft_embedded",
                "bitrateKbps": 2000,
                "customized": false
            },
            "outputs": {
                "result": "https://stttssvcprodusw2.blob.core.windows.net/batchsynthesis-output/xxxxx/xxxxx/0001.mp4?SAS_Token",
                "summary": "https://stttssvcprodusw2.blob.core.windows.net/batchsynthesis-output/xxxxx/xxxxx/summary.json?SAS_Token"
            }
        },
        {
            "id": "my-job-01",
            "internalId": "5a25b929-1358-4e81-a036-33000e788c46",
            "status": "Succeeded",
            "createdDateTime": "2024-03-06T07:34:08.9487009Z",
            "lastActionDateTime": "2024-03-06T07:34:12.5698769",
            "inputKind": "SSML",
            "customVoices": {},
            "properties": {
                "timeToLiveInHours": 744,
                "sizeInBytes": 344460,
                "durationInMilliseconds": 2520,
                "succeededCount": 1,
                "failedCount": 0,
                "billingDetails": {
                    "neuralCharacters": 29,
                    "talkingAvatarDurationSeconds": 2
                }
            },
            "avatarConfig": {
                "talkingAvatarCharacter": "lisa",
                "talkingAvatarStyle": "graceful-sitting",
                "videoFormat": "Mp4",
                "videoCodec": "hevc",
                "subtitleType": "soft_embedded",
                "bitrateKbps": 2000,
                "customized": false
            },
            "outputs": {
                "result": "https://stttssvcprodusw2.blob.core.windows.net/batchsynthesis-output/xxxxx/xxxxx/0001.mp4?SAS_Token",
                "summary": "https://stttssvcprodusw2.blob.core.windows.net/batchsynthesis-output/xxxxx/xxxxx/summary.json?SAS_Token"
            }
        }
    ],
    "nextLink": "https://YourSpeechRegion.api.cognitive.microsoft.com/avatar/batchsyntheses/?api-version=2024-08-01&skip=2&maxpagesize=2"
}

Desde outputs.result, puede descargar un archivo de vídeo que contiene el vídeo de avatar. Desde outputs.summary, puede acceder a los detalles de resumen y depuración. Para obtener más información, consulte Resultados de la síntesis por lotes.

La propiedad value de la respuesta JSON enumera las solicitudes de síntesis. La lista está paginada, con un tamaño de página máximo de 100. La propiedad nextLink se proporciona según sea necesario para obtener la página siguiente de la lista paginada.

Obtención del archivo de resultados de síntesis por lotes

Después de obtener un trabajo de síntesis por lotes con un status de "Correcto", puede descargar los resultados de la salida de vídeo. Use la dirección URL de la propiedad outputs.result de la respuesta de obtención de síntesis por lotes.

Para obtener el archivo de resultados de la síntesis por lotes, realice una solicitud HTTP GET mediante el URI, como se muestra en el ejemplo siguiente. Reemplace YourOutputsResultUrl por la dirección URL de la propiedad outputs.result de la respuesta de obtención de síntesis por lotes. Reemplace YourSpeechKey por su clave de recurso de Voz.

curl -v -X GET "YourOutputsResultUrl" -H "Ocp-Apim-Subscription-Key: YourSpeechKey" > output.mp4

Para obtener el archivo de resumen de la síntesis por lotes, realice una solicitud HTTP GET mediante el URI, como se muestra en el ejemplo siguiente. Reemplace YourOutputsResultUrl por la dirección URL de la propiedad outputs.summary de la respuesta de obtención de síntesis por lotes. Reemplace YourSpeechKey por su clave de recurso de Voz.

curl -v -X GET "YourOutputsSummaryUrl" -H "Ocp-Apim-Subscription-Key: YourSpeechKey" > summary.json

El archivo de resumen contiene los resultados de la síntesis de cada entrada de texto. Este es un archivo summary.json de ejemplo:

{
  "jobID": "5a25b929-1358-4e81-a036-33000e788c46",
  "status": "Succeeded",
  "results": [
    {
      "texts": [
        "<speak version='1.0' xml:lang='en-US'><voice name='en-US-AvaMultilingualNeural'>The rainbow has seven colors.</voice></speak>"
      ],
      "status": "Succeeded",
      "videoFileName": "244a87c294b94ddeb3dbaccee8ffa7eb/5a25b929-1358-4e81-a036-33000e788c46/0001.mp4",
      "TalkingAvatarCharacter": "lisa",
      "TalkingAvatarStyle": "graceful-sitting"
    }
  ]
}

Eliminación de síntesis por lotes

Después de recuperar los resultados de salida de audio y no necesitar más el historial de trabajos de síntesis por lotes, puede eliminarlos. El servicio de Voz conserva cada historial de síntesis durante un máximo de 31 días o la duración especificada por la propiedad timeToLiveInHours de la solicitud, lo que ocurra antes. La fecha y hora de eliminación automática para los trabajos de síntesis con el estado "Correcto" o "Error" se calcula como la suma de las propiedades lastActionDateTime y timeToLive.

Para eliminar un trabajo de síntesis por lotes, realice una solicitud HTTP DELETE con el siguiente formato de URI. Reemplace YourSynthesisId por el id. de la síntesis por lotes, YourSpeechKey por la clave del recurso de Voz y YourSpeechRegion por la región del recurso de Voz.

curl -v -X DELETE "https://YourSpeechRegion.api.cognitive.microsoft.com/avatar/batchsyntheses/YourSynthesisId?api-version=2024-08-01" -H "Ocp-Apim-Subscription-Key: YourSpeechKey"

Los encabezados de respuesta incluyen HTTP/1.1 204 No Content si la solicitud de eliminación se realizó correctamente.

Pasos siguientes