La interfaz HTTP

Para sintetizar texto a voz con la interfaz HTTP REST del servicio IBM Watson® Text to Speech, debe llamar al método GET o POST /v1/synthesize. Debe especificar el texto a sintetizar y la voz y el formato para el audio hablado. También puede especificar un modelo personalizado a utilizar con la solicitud.

Para obtener más información sobre la interfaz HTTP, consulte la referencia de API y SDK.

Sintetizar texto a audio

Para sintetizar texto a audio, debe efectuar una llamada a una de las dos versiones del método /v1/synthesize del servicio:

  • El método GET /v1/synthesize acepta el texto a sintetizar como un parámetro de consulta obligatorio text. El tamaño máximo de la solicitud es de 8 KB, incluyendo el texto de entrada, cualquier SSML que especifique y el URL y las cabeceras.
  • El método POST /v1/synthesize acepta el texto a sintetizar como un constructo JSON en el cuerpo obligatorio de la solicitud. El tamaño máximo de la solicitud es de 8 KB para el URL y las cabeceras y de 5 KB para el texto de entrada que se envía dentro del cuerpo de la solicitud. El límite de 5 KB incluye cualquier SSML que especifique.

Las dos versiones del método /v1/synthesize tienen los siguientes parámetros en común:

accept (parámetro de consulta, serie optativo)

Especifica el formato de audio solicitado, o el tipo MIME, en el que. el servicio debe devolver el audio. También puede especificar este valor con la cabecera de solicitud HTTP Accept. Codifique como URL el argumento en el parámetro de consulta accept. De forma predeterminada, el servicio devuelve el audio en el formato audio/ogg;codecs=opus. Para obtener más información, consulte Utilización de formatos de audio.

El formato de audio Ogg no es compatible con el navegador Safari. Si utiliza el servicio Text to Speech con el navegador Safari, deberá especificar un formato diferente en el que desea que el servicio devuelva el audio.

voice (parámetro de consulta, serie optativo)

Especifica la voz en que se debe leer el texto en el audio. Utilice el método /v1/voices para obtener la lista actual de voces soportadas. Omita este parámetro para utilizar la voz predeterminada. Para más información, consulte Idiomas y voces y Utilizar la voz predeterminada.

customization_id (parámetro de consulta, serie optativo)

Especifica un identificador exclusivo global (GUID) para un modelo personalizado a utilizar para la síntesis. Un modelo personalizado especificado debe coincidir con el idioma de la voz que se utiliza para la síntesis. Si incluye un ID de personalización, debe realizar la solicitud con las credenciales para la instancia del servicio que posee el modelo personalizado. Omita el parámetro para utilizar la voz especificada sin personalización. Para obtener más información, consulte Comprender la personalización.

rate_percentage (query parameter, opcional integer)

Especifica la frecuencia de habla global para toda la solicitud de síntesis. La velocidad de habla es la velocidad a la que el servicio pronuncia el texto que sintetiza en voz. Una velocidad más alta hace que el texto se pronuncie más rápidamente; una velocidad más baja hace que el texto se pronuncie más lentamente. El parámetro cambia la tarifa por defecto por voz para toda una solicitud. Para más información, consulte Modificar la velocidad de conversación.

pitch_percentage (query parameter, opcional integer)

Especifica el tono de voz global para toda la solicitud de síntesis. El tono del habla representa el tono del habla que sintetiza el servicio. Representa lo alto o bajo que percibe el oyente el tono de la voz. Un tono más agudo da lugar a un discurso en el que se habla con un tono más alto; un tono más bajo da lugar a un discurso en el que se habla con un tono más bajo. El parámetro cambia el tono predeterminado por voz para toda una petición. Para más información, consulte Modificar el tono de voz.

spell_out_mode (parámetro de consulta, serie optativo)

Para las voces en alemán, especifica cómo deben escribirse los caracteres individuales de una cadena. Por defecto, el servicio deletrea los caracteres individuales a la misma velocidad a la que sintetiza el texto de una lengua. Puede utilizar este parámetro para indicar al servicio que escriba caracteres individuales más lentamente, en grupos de uno singles), dos pairs) o tres triples). Para obtener más información, consulte Especificar cómo se escriben las cadenas.

X-Watson-Metadata (cabecera de solicitud, serie optativo)

Asocia un ID de cliente a datos que se pasan con una solicitud. Para obtener más información, consulte Seguridad de la información.

X-Watson-Learning-Opt-Out (cabecera de solicitud, booleano optativo)

IBM Cloud Indica si el servicio registra los datos de solicitud y respuesta para mejorar el servicio para futuros usuarios. Para evitar que IBM acceda a sus datos para mejoras de servicio generales, especifique true en el parámetro. La opción Renuncia indica a IBM que no grabe en disco los datos de usuario (texto o audio) de su solicitud. También puede excluirse a nivel de cuenta. Para obtener más información, consulte Registro de solicitudes.

Si especifica un parámetro de consulta no válido o un campo JSON como parte de la entrada en el método /v1/synthesize, el servicio devuelve una cabecera de respuesta Warnings que describe y lista cada argumento no válido. La solicitud tiene éxito a pesar de las advertencias.

Especificar texto de entrada

Los métodos POST y GET /v1/synthesize aceptan texto de entrada sin formato o texto anotado con SSML. Las dos versiones difieren principalmente en cómo se especifica el texto que se va a sintetizar. Los siguientes ejemplos pasan el texto sin formato Hello world.

  • El método POST /v1/synthesize acepta texto de entrada en el cuerpo de la solicitud. Especifique la entrada con una construcción JSON simple que incluya texto sin formato o SSML. También hay que especificar el valor application/json para la cabecera Content-Type.

    IBM Cloud

    curl -X POST -u "apikey:{apikey}" \
    --header "Content-Type: application/json" \
    --header "Accept: audio/wav" \
    --output hello_world.wav \
    --data "{\"text\":\"Hello world\"}" \
    "{url}/v1/synthesize?voice=en-US_MichaelV3Voice"
    

    IBM Cloud Pak for Data IBM Software Hub

    curl -X POST \
    --header "Authorization: Bearer {token}" \
    --header "Content-Type: application/json" \
    --header "Accept: audio/wav" \
    --output hello_world.wav \
    --data "{\"text\":\"Hello world\"}" \
    "{url}/v1/synthesize?voice=en-US_MichaelV3Voice"
    
  • El método GET /v1/synthesize acepta el texto de entrada que se especifica mediante el parámetro de consulta text. Especifique la entrada como texto sin formato o SSML, que deben estar codificados como URL.

    IBM Cloud

    curl -X GET -u "apikey:{apikey}" \
    --header "Accept: audio/wav" \
    --output hello_world.wav \
    "{url}/v1/synthesize?text=Hello%20world&voice=en-US_MichaelV3Voice"
    

    IBM Cloud Pak for Data IBM Software Hub

    curl -X GET \
    --header "Authorization: Bearer {token}" \
    --header "Accept: audio/wav" \
    --output hello_world.wav \
    "{url}/v1/synthesize?text=Hello%20world&voice=en-US_MichaelV3Voice"""
    

Aunque los métodos POST y GET ofrecen una funcionalidad equivalente, siempre es más seguro pasar el texto de entrada al servicio con el método POST. Una solicitud POST pasa la entrada en el cuerpo de la solicitud. Una solicitud GET expone los datos en el URL.

Puntuación del texto de entrada

Escriba texto para síntesis con la puntuación que utilizaría normalmente. Por ejemplo, incluya comas, puntos, signos de exclamación y signos de interrogación como lo haría en la escritura normal.

El servicio tiene en cuenta la puntuación al sintetizar el texto. Por ejemplo, las comas y la puntuación de fin de frase afectan al audio, insertando pausas en los lugares adecuados en el discurso sintetizado resultante. La puntuación de fin de fraseo, como los puntos, los puntos de exclamación y los signos de interrogación también cambian la entonación y la inflexión del discurso. También puede utilizar elementos SSML para influir en estos aspectos del discurso.

Especificar entrada SSML

SSML (Speech Synthesis Markup Language) es un lenguaje de códigos basado en XML, diseñado para proporcionar anotaciones de texto para aplicaciones de síntesis de voz, como por ejemplo el servicio Text to Speech. Puede utilizar los elementos SSML y sus atributos para obtener un mayor control sobre la síntesis y sobre la salida de audio resultante.

Para obtener más información sobre la utilización de SSML para anotar texto de entrada, consulte Información sobre SSML. Para obtener un inventario de todos los elementos y atributos soportados, consulte Elementos SSML.

Escapar los caracteres de control XML

Puesto que puede enviar texto de entrada que incluye anotaciones SSML basadas en XML, el servicio valida toda la entrada para asegurarse de que el SSML es correcto y bien formado. Por lo tanto, debe escapar cualquier carácter de control XML que esté presente en el texto de entrada, independientemente de si la entrada incluye SSML. Utilice las series de escape o las codificaciones de caracteres equivalentes de la Tabla 1 en lugar de los caracteres indicados.

Escapar los caracteres de control XML
Carácter Series de escape Codificación de caracteres
"
(comillas dobles)
" "
'
(apóstrofo o comilla simple)
' '
&
(ampersand)
& &
<
(corchete izquierdo)
&lt; &#60;
>
(corchete derecho)
&gt; &#62;
/
(barra inclinada)
Ninguna &#47;

Para obtener más información sobre cómo el servicio valida el texto de entrada, consulte Validación de SSML.

Ejemplos de texto de entrada

En los ejemplos siguientes se muestra cómo especificar texto de entrada con cualquiera de los métodos de la interfaz HTTP. También muestran cómo escapar los caracteres de control XML. En los ejemplos se incluyen saltos de línea para mejorar la legibilidad. No incluya los saltos de línea en la entrada real.

Ejemplo de entrada con una solicitud GET

En los ejemplos siguientes se pasa una entrada codificada en URL con el parámetro de consulta text del método GET /v1/synthesize:

  • Entrada en texto sin formato:

    text=This&20is&20the&20first&20sentence&20of&20the&20paragraph.&20Here
    &20is&20another&20sentence.&20Finally,&20this&20is&20the&20last&20sentence.
    
  • Entrada en SSML:

    text=%22%3Cp%3E%3Cs%3EThis%20is%20the%20first%20sentence%20of%20the%20%3C
    break%20time=%225s%22/%3E%20paragraph.%3C/s%3E%3Cs%3EHere%20is%20another
    %20sentence.%3C/s%3E%3Cs%3EFinally,%20this%20is%20the%20last%20sentence.
    %3C/s%3E%3C/p%3E%22
    

Ejemplo de entrada con una solicitud POST

En los ejemplos siguientes se pasa la entrada en el cuerpo del método POST /v1/synthesize:

  • Entrada en texto sin formato:

    {
      "text": "This is the first sentence of the paragraph. Here is another
        sentence. Finally, this is the last sentence."
    }
    
  • Entrada en SSML:

    {
      "text": "<p><s>This is the first sentence of the <break time=\"5s\"/>
        paragraph.</s><s>Here is another sentence.</s><s>Finally, this is
        the last sentence.</s></p>"
    }
    

Ejemplo de entrada con caracteres de control XML

En los ejemplos siguientes se envían dos frases al método POST /v1/synthesize. En los ejemplos se escapan adecuadamente los caracteres XML incluidos.

"What have I learned?" he asked. "Everything!"
  • Entrada en texto sin formato:

    {
      "text": ""What have I learned?" he asked. "Everything!""
    }
    
  • Entrada en SSML:

    {
      "text": "<s>"What have I learned?" he asked.
        "<prodody rate=\"50\">Everything!</prosody>"</s>"
    }