Maîtriser la synthèse vocale japonaise
La synthèse vocale japonaise présente deux écueils qu'on rencontre rarement en anglais.
- Les mauvaises lectures : 「入口」 (« entrée », lu いりぐち) sort en 「にゅうこう」, et un nom d'entreprise est lu tel qu'il s'écrit
- 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.
- 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 script | Avec dictionnaire | Sans | Δ |
|---|---|---|---|
| AICU API / api.aicu.ai | 8.12s | 9.40s | −1.28s |
| ChatGPT / Stable Diffusion / ComfyUI | 5.96s | 5.96s | ±0.00s |
| ElevenLabs / LoRA | 4.99s | 5.25s | −0.26s |
| AiCuty / AICU media | 3.87s | 4.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 obligeammentAICU 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 envoyons | Ce 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.
- Spécification W3C PLS : https://www.w3.org/TR/pronunciation-lexicon/
- Guide de prononciation ElevenLabs : https://elevenlabs.io/docs/best-practices/prompting/pronunciation
- API d'envoi de dictionnaire : https://elevenlabs.io/docs/api-reference/pronunciation-dictionaries/add-from-file
<?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écanisme | Modèles pris en charge | Utilisable 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
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.
| tag | Mina | Saki | Remarques |
|---|---|---|---|
laughs | 3.0× | 1.7× | Réaction la plus forte sur Mina |
happy | 2.2× | 1.6× | |
sarcastic | 2.2× | 1.1× | À peine perceptible sur Saki |
breathless | 2.2× | 1.2× | Idem |
questioning | 2.2× | 1.0× | Idem |
excited | 2.1× | 1.6× | Fonctionne sur les deux |
sighs | 1.3× | 2.0× | Seule Saki réagit fortement (inversé) |
cheerfully | 1.1× | 1.5× | À peine perceptible sur Mina |
softly | 1.4× | 1.7× | |
curious / whispers | 1.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
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
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 voulez | Comment | Modèles pris en charge |
|---|---|---|
| Lecture des noms propres et des composés de kanji irréguliers | Remplacer par des kana avant l'envoi | Tous les modèles |
| Utiliser un dictionnaire de prononciation | Envoyer un PLS (.pls) | Tous les modèles (peu fiable en japonais) |
| Prosodie et émotion | audio tag | eleven_v3 uniquement |
| Contrôle précis de l'accent et de la prosodie | Aucune 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
- Audio API : endpoints et gestion des textes longs
- Character API : les voix des personnages AiCuty