Interface HTTP

Pour synthétiser du texte en parole avec l'interface HTTP REST du service IBM Watson® Text to Speech, appelez la méthode GET ou POST /v1/synthesize. Spécifiez le texte à synthétiser, ainsi que la voix et le format de l'audio parlé. Vous pouvez également spécifier un modèle personnalisé à utiliser avec la demande.

Pour plus d'informations sur l'interface d' HTTP, consultez la référence API & SDK.

Synthèse de texte en audio

Pour synthétiser du texte en audio, appelez l’une des deux versions de la méthode /v1/synthesize du service :

  • La méthode GET /v1/synthesize accepte le texte à synthétiser en tant que paramètre de requête text obligatoire. La taille maximale de la demande est de 8 Ko, ce qui inclut le texte d'entrée, tout SSML que vous spécifiez ainsi que l'URL et les en-têtes.
  • La méthode POST /v1/synthesize accepte le texte à synthétiser en tant que construction JSON dans le corps requis de la demande. La taille maximale de la demande est de 8 Ko pour l'URL et les en-têtes et de 5 Ko pour le texte d'entrée envoyé dans le corps de la demande. La limite de 5 Ko inclut tout SSML que vous spécifiez.

Les deux versions de la méthode /v1/synthesize ont les paramètres suivants en commun :

accept (paramètre de requête, chaîne facultative)

Spécifie le format audio demandé, ou le type MIME, dans lequel le service doit renvoyer l'audio. Vous pouvez également spécifier cette valeur avec l'en-tête de demande HTTP Accept. Codez dans l'URL l'argument vers le paramètre de requête accept. Par défaut, le service renvoie l'audio au format audio/ogg;codecs=opus. Pour plus d'informations, voir Utilisation des formats audio.

Le format audio Ogg n'est pas pris en charge par le navigateur Safari. Si vous utilisez le service Text to Speech avec le navigateur Safari, vous devez spécifier un format différent dans lequel vous souhaitez que le service renvoie l'audio.

voice (paramètre de requête, chaîne facultative)

Spécifie la voix dans laquelle le texte doit être prononcé en audio. Utilisez la méthode /v1/voices pour obtenir la liste actuelle des voix prises en charge. Omettez le paramètre pour utiliser la voix par défaut. Pour plus d'informations, voir Langues et voix et Utiliser la voix par défaut.

customization_id (paramètre de requête, chaîne facultative)

Indique un identificateur global unique (GUID) pour un modèle personnalisé qui doit être utilisé pour la synthèse. Un modèle personnalisé spécifié doit correspondre à la langue de la voix utilisée pour la synthèse. Si vous incluez un ID de personnalisation, vous devez faire la demande avec les données d'identification de l'instance du service propriétaire du modèle personnalisé. Omettez le paramètre pour utiliser la voix spécifiée sans personnalisation. Pour plus d'informations, voir Compréhension de la personnalisation.

rate_percentage (query parameter, facultatif integer)

Spécifie le débit de parole global pour l'ensemble de la demande de synthèse. La vitesse d'élocution est la vitesse à laquelle le service prononce le texte qu'il synthétise en parole. Un taux plus élevé signifie que le texte est prononcé plus rapidement ; un taux plus bas signifie que le texte est prononcé plus lentement. Ce paramètre modifie le taux par défaut par voix pour l'ensemble d'une requête. Pour plus d'informations, voir Modifier le débit de parole.

pitch_percentage (query parameter, facultatif integer)

Spécifie la hauteur de voix globale pour l'ensemble de la demande de synthèse. La hauteur de la voix représente le ton de la parole que le service synthétise. Il représente le degré d'intensité du ton de la voix perçu par l'auditeur. Une hauteur de ton plus élevée se traduit par un discours prononcé sur un ton plus aigu ; une hauteur de ton plus basse se traduit par un discours prononcé sur un ton plus grave. Ce paramètre modifie la hauteur de ton par voix pour l'ensemble de la requête. Pour plus d'informations, voir Modifier la hauteur de la voix.

spell_out_mode (paramètre de requête, chaîne facultative)

Pour les voix allemandes, spécifie comment les caractères individuels d'une chaîne doivent être épelés. Par défaut, le service épelle les caractères individuels à la même vitesse que celle à laquelle il synthétise le texte d'une langue. Vous pouvez utiliser ce paramètre pour demander au service d'épeler les caractères individuels plus lentement, par groupes de un singles, deux pairs) ou trois triples. Pour plus d'informations, voir Spécification de l'épellation des chaînes de caractères.

X-Watson-Metadata (en-tête de requête, chaîne Facultative )

Associe un ID client à des données transmises avec une demande. Pour plus d'informations, voir Sécurité des informations.

X-Watson-Learning-Opt-Out (en-tête de requête, valeur booléenne facultative)

IBM Cloud Indique si le service enregistre les données de requête et de réponse afin d'améliorer le service pour les futurs utilisateurs. Pour empêcher IBM d’accéder à vos données afin d’améliorer les services généraux, indiquez true pour le paramètre. L'option d'exclusion demande à IBM de ne pas écrire sur disque les données utilisateur (texte ou audio) pour votre demande. Vous pouvez également vous désinscrire au niveau du compte. Pour plus d'informations, voir Journalisation des demandes.

Si vous spécifiez un paramètre de requête ou une zone JSON non valide dans le cadre de l'entrée de la méthode /v1/synthesize, le service renvoie un en-tête de réponse Warnings qui décrit et répertorie chaque argument non valide. La demande aboutit malgré les avertissements contenus dans cette zone.

Spécification de texte en entrée

Les méthodes POST et GET /v1/synthesize acceptent des textes en entrée simples ou des textes annotés avec SSML. Les deux versions diffèrent principalement dans la façon dont vous spécifiez le texte à synthétiser. Les exemples suivants transmettent le texte en clair Hello world.

  • La méthode POST /v1/synthesize accepte le texte saisi dans le corps de la demande. Vous spécifiez l'entrée avec une construction JSON simple qui inclut du texte en clair ou SSML. Vous devez également spécifier la valeur application/json pour l'en-tête 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"
    
  • La méthode GET /v1/synthesize accepte le texte d'entrée spécifié par le paramètre de requête text. Vous spécifiez l'entrée sous la forme de texte en clair ou SSML, qui doivent tous les deux être codés dans l'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"""
    

Bien que les méthodes POST et GET offrent des fonctionnalités équivalentes, il est toujours plus sûr de transmettre le texte d'entrée au service avec la méthode POST. Une demande POST transmet une entrée dans le corps de la demande. Une demande GET expose les données dans l'URL.

Ponctuation du texte d'entrée

Écrivez du texte pour la synthèse avec la ponctuation que vous utilisez normalement. Par exemple, incluez des virgules, des points, des points d'exclamation et des points d'interrogation comme vous le faites normalement.

Le service tient compte de la ponctuation lors de la synthèse du texte. Par exemple, les virgules et la ponctuation de fin de phrase affectent l'audio en insérant des pauses aux endroits appropriés dans le discours synthétisé qui en résulte. La ponctuation de fin de phrase comme les points, les points d'exclamation et les points d'interrogation changent aussi l'intonation et l'inflexion du discours. Vous pouvez également utiliser les éléments SSML pour modifier ces aspects du discours.

Spécification de l'entrée SSML

SSML (Speech Synthesis Markup Language) est un langage de balisage basé sur XML conçu pour fournir des annotations de texte aux applications de synthèse vocale telles que le service Text to Speech. Vous pouvez utiliser des éléments SSML et leurs attributs pour mieux contrôler la synthèse et la sortie audio obtenue.

Pour plus d'informations sur l'utilisation de SSML pour annoter le texte d'entrée, voir Présentation de SSML. Pour l'inventaire de tous les éléments et attributs pris en charge, voir Éléments SSML.

Mise en échappement des caractères de contrôle XML

Dans la mesure où vous pouvez soumettre un texte en entrée comprenant des annotations SSML basées sur XML, le service valide toutes les entrées afin de garantir que tout le SSML est correct et bien formé. Par conséquent, vous devez mettre en échappement tous les caractères de contrôle XML présents dans le texte d'entrée, que l'entrée inclue le SSML ou non. Utilisez les chaînes d'échappement équivalentes ou les codages de caractères du tableau 1 ci-dessous à la place des caractères indiqués.

Mise en échappement des caractères de contrôle XML
Caractère Chaînes d'échappement Codage de caractères
"
(guillemets doubles)
" "
'
(apostrophe ou guillemet simple)
' '
&
(perluète)
& &
<
(crochet de gauche)
&lt; &#60;
>
(crochet droit)
&gt; &#62;
/
(barre oblique)
Aucun &#47;

Pour plus d'informations sur la validation du texte saisi par le service, voir Validation du SSML.

Exemples de texte en entrée

Les exemples suivants montrent comment spécifier un texte en entrée avec l'une ou l'autre des méthodes de l'interface HTTP. Ils montrent également comment mettre en échappement les caractères de contrôle XML. Les exemples incluent les sauts de ligne pour une meilleure lisibilité. N'incluez pas les sauts de ligne dans les entrées réelles.

Exemple d'entrée avec une requête GET

Les exemples suivants transmettent une entrée codée dans l'URL avec le paramètre de requête text de la méthode GET /v1/synthesize :

  • Entrée en texte brut :

    text=This&20is&20the&20first&20sentence&20of&20the&20paragraph.&20Here
    &20is&20another&20sentence.&20Finally,&20this&20is&20the&20last&20sentence.
    
  • Entrée 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
    

Exemple d'entrée avec une requête POST

Les exemples suivants transmettent des entrées dans le corps de la méthode POST /v1/synthesize :

  • Entrée en texte brut :

    {
      "text": "This is the first sentence of the paragraph. Here is another
        sentence. Finally, this is the last sentence."
    }
    
  • Entrée 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>"
    }
    

Exemple d'entrée avec des caractères de contrôle XML

Les exemples suivants envoient deux phrases à la méthode POST /v1/synthesize. Les exemples mettent correctement en échappement les caractères XML incorporés.

"What have I learned?" he asked. "Everything!"
  • Entrée en texte brut :

    {
      "text": ""What have I learned?" he asked. "Everything!""
    }
    
  • Entrée SSML :

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