Aller au contenu principal

Maîtriser la synthèse vocale japonaise

La synthèse vocale japonaise présente deux écueils qu'on rencontre rarement en anglais.

  1. Les mauvaises lectures : 「入口」 (« entrée », lu いりぐち) sort en 「にゅうこう」, et un nom d'entreprise est lu tel qu'il s'écrit
  2. La prosodie cassée : les mots sont corrects, mais une question devient plate

Cette page rassemble les moyens de corriger les deux, à partir de mesures réelles, y compris les différences entre voix dans l'effet des tags, qui ne figurent pas dans la documentation officielle.

En bref
  • Pour les lectures, remplacez par des kana avant d'envoyer le texte : c'est la voie la plus fiable, plus stable qu'un dictionnaire de prononciation
  • La prosodie ne peut être modifiée qu'avec les audio tags d'eleven_v3 : un dictionnaire de prononciation n'y peut rien
  • Les tags se comportent différemment selon la voix. Mesurez toujours sur la voix que vous utilisez réellement

0. Essayer en un seul appel​

La passerelle corrige déjà pour vous les lectures les plus courantes. Le texte qui contient du japonais passe par un dictionnaire de lectures côté serveur avant la synthèse (「AICU」→「アイキュー」, 「ChatGPT」→「チャットジーピーティー」, …), si bien que les deux curl ci-dessous prononcent correctement les noms de produits sans aucun travail côté client.

# Multilingual v2 (par défaut) : lectures corrigées par le dictionnaire côté serveur
curl -X POST https://api.aicu.ai/v1/audio/speech \
-H "Authorization: Bearer $AICU_API_KEY" \
-H "Content-Type: application/json" \
-d '{"input": "AICU API の入口はこちらです", "voice": "nao"}' \
--output v2.mp3

# v3 : même texte, plus un audio tag pour la prosodie (seul eleven_v3 comprend les tags)
curl -X POST https://api.aicu.ai/v1/el/tts \
-H "Authorization: Bearer $AICU_API_KEY" \
-H "Content-Type: application/json" \
-d '{"text": "[excited] AICU API の入口はこちらです!", "voice": "nao", "model": "eleven_v3"}' \
--output v3.mp3

Le dictionnaire est petit et propre au projet (le dictionnaire yomi de la passerelle). Il ne touche que le texte qui contient des kana ou des kanji, et il remplace d'abord les entrées les plus longues. Pour les noms qu'il ne connaît pas, remplacez vous-même par des kana avant l'envoi : la suite de cette page explique pourquoi c'est mieux qu'un dictionnaire de prononciation.

0.5 Ce que vaut réellement le dictionnaire (mesuré le 2026-10-02)​

Le même script, la même voix, le même modèle : une fois via api.aicu.ai (le dictionnaire côté serveur s'applique) et une fois directement chez ElevenLabs (sans dictionnaire). Le dictionnaire remplace les lectures épelées lettre par lettre par des kana ; quand il agit, l'audio raccourcit :

Termes du scriptAvec dictionnaireSansΔ
AICU API / api.aicu.ai8.12s9.40s−1.28s
ChatGPT / Stable Diffusion / ComfyUI5.96s5.96s±0.00s
ElevenLabs / LoRA4.99s5.25s−0.26s
AiCuty / AICU media3.87s4.36s−0.50s

C'est la deuxième ligne qui est intéressante. eleven_v4 lit déjà correctement ChatGPT, Stable Diffusion et ComfyUI : le dictionnaire n'y change rien. Là où il reste utile, c'est pour vos propres noms et les noms propres locaux, les mots que le modèle n'a jamais vus.

Donc : si votre texte japonais ne contient que du vocabulaire courant de l'IA, un modèle plus récent peut suffire. S'il contient le nom de votre produit, vos personnages, ou des noms japonais de lieux et de personnes, c'est le dictionnaire qui fait la différence.

⚠️ N'évaluez pas cela par un aller-retour en transcription (STT)

Nous avons essayé. Le résultat disait que le dictionnaire dégradait les choses (4/9 contre 6/9), ce qui était faux. La transcription ramène ce qu'elle entend à une orthographe plausible : quand le dictionnaire dit correctement 「アイキューエーピーアイ」, la transcription écrit IQAPI ; quand le modèle épelle les lettres, la transcription écrit obligeamment AICU API. Nous mesurions les habitudes orthographiques du système de reconnaissance, pas la lecture. Mesurez la durée, et écoutez.

0.6 Une règle s'inverse sur v4 : les mots étrangers que le modèle ne sait pas lire​

La règle constante de cette page est : transcrire en kana les mauvaises lectures japonaises, et envoyer les mots étrangers dans leur propre orthographe. eleven_v4 a cassé la moitié de cette règle.

La salutation espagnole de Marsha, ¡Hola!, était lue correctement par eleven_v3. Sur eleven_v4, elle sort comme le mot japonais 「ほら」 (« hora », « tiens ! ») : le modèle la traite comme du japonais parce que le texte qui l'entoure est en japonais.

Le dictionnaire la prend donc désormais en charge, et le sens est inversé : un mot étranger que le modèle ne sait pas lire est transcrit en kana, exactement comme une mauvaise lecture japonaise.

Choisir les kana a demandé sept prises, et la réponse n'allait pas de soi :

Ce que nous envoyonsCe qui en sort
¡Hola! (orthographe d'origine)ほら ✗
オラー! (marque de voyelle longue)ほら ✗
オラ〜! (tilde japonais)オラ
オッラー! (petit tsu + voyelle longue)retenu

La marque de voyelle longue ー est lue comme un simple allongement de voyelle et retombe vers 「ほら」 ; le tilde 〜 se lit comme une fin de phrase traînante et enjouée. Une personne de langue maternelle espagnole a choisi la version avec petit tsu à l'oreille, et l'aller-retour en transcription n'était pas d'accord avec elle, ce qui est le même piège que celui décrit en 0.5.

Vous écrivez toujours ¡Hola! dans votre script. Le dictionnaire s'en charge.

⚠️ Gardez les séparateurs dans les noms japonais

マーシャ・アランチャ avec le point médian se lit correctement. Supprimez-le (マーシャアランチャ) et le nom se dégrade, et les nombres qui l'entourent aussi : dans notre prise, 「ナンバーシックス」 (« number six ») est devenu 「ナンバーワンシックス」 (« number one six »). Écrire le même mot en hiragana (なんばーしっくす) l'a aussi déclenché. Katakana et points médians.

1. Corriger les lectures​

La voie officielle : le dictionnaire de prononciation​

ElevenLabs prend en charge le standard W3C PLS (Pronunciation Lexicon Specification). Envoyez un fichier .pls, récupérez un ID de dictionnaire, et référencez-le au moment de la synthèse.

<?xml version="1.0" encoding="UTF-8"?>
<lexicon version="1.0" xmlns="http://www.w3.org/2005/01/pronunciation-lexicon"
alphabet="ipa" xml:lang="ja-JP">
<lexeme><grapheme>入口</grapheme><alias>いりぐち</alias></lexeme>
</lexicon>

Il existe trois mécanismes pour imposer une lecture.

MécanismeModèles pris en chargeUtilisable en japonais ?
alias (substituer une autre graphie)Tous les modèles△ Ne s'applique pas toujours comme prévu
phoneme (symboles phonétiques)eleven_flash_v2 uniquement✗ Indisponible sur les modèles multilingues
IPA (écrit directement dans le texte)eleven_v3△ Officiellement documenté comme cohérent à seulement 80–90 %

Mesuré : la substitution par des kana était la plus fiable en japonais​

En enregistrant un alias 入口 → いりぐち puis en lançant la synthèse, on a obtenu une lecture à moitié corrigée : 「にゅうぐち」. La mauvaise lecture d'origine a survécu dans la première moitié : l'alias ne s'est appliqué que partiellement.

Sans intervention (「にゅうこう」)

Alias PLS appliqué (「にゅうぐち」)

Remplacé par des kana (「いりぐち」)

Remplacez avant d'envoyer, et le modèle lit simplement. Le prétraitement est la voie la plus fiable.

YOMI = {
"AICU media": "アイキューメディア", # enregistrer d'abord les termes composés
"AICU": "アイキュー",
"ComfyUI": "コンフィーユーアイ",
"入口": "いりぐち",
"curl": "しーゆーあーるえる",
}

def apply_yomi(text: str) -> str:
for src in sorted(YOMI, key=len, reverse=True): # remplacer d'abord les termes les plus longs
text = text.replace(src, YOMI[src])
return text
Remplacez d'abord les termes les plus longs

Si AICU est traité en premier, AICU media devient 「アイキュー media」. C'est précisément à cela que sert sorted(..., key=len, reverse=True).

AICU tel quel

Remplacé par アイキュー

2. Corriger la prosodie​

Le dictionnaire de prononciation ne gère pas la prosodie​

La spécification W3C PLS le dit explicitement au §1.4, « What PLS does not Support ».

The most complex features have been postponed to a future revision of this specification.

(« Les fonctionnalités les plus complexes ont été reportées à une future révision de cette spécification. »)

PLS ne possède que <grapheme>, <phoneme> et <alias> ; il n'existe aucun élément pour la prosodie, l'accent ou l'intonation dans toute la spécification.

Pour l'instant, la seule façon de toucher à la prosodie en japonais, ce sont les audio tags d'eleven_v3.

La liste des audio tags​

[laughs] [laughs harder] [starts laughing] [wheezing] [snorts]
[whispers] [sighs] [exhales] [sarcastic] [curious] [excited]
[crying] [mischievously]
[gunshot] [applause] [clapping] [explosion] [swallows] [gulps]
[strong X accent] [sings]

La position officielle est que cette liste n'est pas exhaustive et qu'il faut expérimenter ; de fait, [softly], [warmly], [happy], [breathless] et [questioning] produisent aussi un effet.

Mesuré : les tags n'agissent pas de la même façon selon la voix​

Avec la même phrase 「いりぐちはどちらですか?」 (« Où est l'entrée ? ») et en ne changeant que le tag, nous avons mesuré la durée par rapport à la prise sans tag.

tagMinaSakiRemarques
laughs3.0×1.7×Réaction la plus forte sur Mina
happy2.2×1.6×
sarcastic2.2×1.1×À peine perceptible sur Saki
breathless2.2×1.2×Idem
questioning2.2×1.0×Idem
excited2.1×1.6×Fonctionne sur les deux
sighs1.3×2.0×Seule Saki réagit fortement (inversé)
cheerfully1.1×1.5×À peine perceptible sur Mina
softly1.4×1.7×
curious / whispers1.3×1.2×Subtil

sighs est inversé : Mina 1.3× contre Saki 2.0×. La mise en garde officielle, selon laquelle un tag qui fonctionne sur une voix peut ne pas fonctionner sur une autre, se lit directement dans les chiffres.

L'audio des 16 tags × 2 voix est ici.

  • Mina : /audio/ja-tts/tags/mina/00-none.mp3 à 15-questioning.mp3
  • Saki : /audio/ja-tts/tags/saki/00-none.mp3 à 15-questioning.mp3
La durée est un indicateur indirect

Les multiplicateurs du tableau sont la durée de lecture rapportée à la prise sans tag : un indicateur grossier de l'effet du tag, rien de plus. Tranchez toujours à l'oreille. cheerfully (Mina 1.1×), par exemple, ne produisait presque aucun changement audible.

Tenir un dictionnaire de prosodie​

Les phrases dont la lecture est correcte mais dont la prosodie s'effondre peuvent être corrigées en insérant un tag juste avant la phrase.

Sans tag, 「いりぐちはどちらですか?」 devient plate ; ajoutez [softly] et elle monte naturellement comme une question. Confirmé sur Mina comme sur Saki.

PROSODY = {
"いりぐちはどちらですか": "softly",
}

def apply_prosody(text: str) -> str:
"""eleven_v3 uniquement. v2 n'interprète pas les tags et les lit tels quels"""
for phrase in sorted(PROSODY, key=len, reverse=True):
text = text.replace(phrase, f"[{PROSODY[phrase]}] {phrase}")
return text
Ne passez jamais de tags à v2

eleven_multilingual_v2 n'interprète pas les audio tags. Il lit à voix haute la chaîne littérale [softly]. Les tags sont réservés à v3.

Un exemple combiné​

Mina

Saki

[breathless] せいせいエーアイ時代に、[happy] つくる人をつくる!
[excited] げっかんアイキューのはいたつに来ました!
[curious] いりぐちは、どちらですか?

Les lectures (substitution par des kana) et la prosodie (tags) sont plus faciles à gérer comme deux dictionnaires distincts, car leur portée diffère : les lectures s'appliquent à tous les modèles, la prosodie à v3 seulement.

3. Récapitulatif​

Ce que vous voulezCommentModèles pris en charge
Lecture des noms propres et des composés de kanji irréguliersRemplacer par des kana avant l'envoiTous les modèles
Utiliser un dictionnaire de prononciationEnvoyer un PLS (.pls)Tous les modèles (peu fiable en japonais)
Prosodie et émotionaudio tageleven_v3 uniquement
Contrôle précis de l'accent et de la prosodieAucune option (hors du périmètre de la spécification PLS)—

Les mauvaises lectures et la prosodie cassée sont propres à chaque projet. Ajoutez une ligne au dictionnaire chaque fois que vous en trouvez une, et la précision progresse à chaque passage.

Voir aussi​