Passer au contenu principal
Le dictionnaire utilisateur permet d’enregistrer dans le moteur officiel VOICEVOX la prononciation de noms propres et de termes techniques. En mode client, le dictionnaire n’est pas stocké côté Laravel : l’API de dictionnaire utilisateur du moteur officiel connecté est utilisée telle quelle.

Vue d’ensemble

Le dictionnaire utilisateur en mode client se manipule via la Facade Voicevox. En interne, des requêtes HTTP sont envoyées à /user_dict, /user_dict_word et /import_user_dict du moteur officiel VOICEVOX. Les données de dictionnaire du moteur officiel sont stockées dans la zone utilisateur propre à chaque OS. Sur la version macOS de l’application VOICEVOX (version produit), elles sont généralement stockées à cet emplacement :
~/Library/Application Support/voicevox-engine/user_dict.json
Quand le moteur officiel est démarré via Docker, il stocke également dans la zone utilisateur du conteneur. Les données sont conservées tant que le même conteneur est réutilisé. Si en revanche vous créez un conteneur temporaire à chaque fois (docker run --rm), le dictionnaire est perdu à l’arrêt du conteneur. Pour une persistance fiable, montez la zone utilisateur du conteneur via un volume Docker. Ceci est distinct de storage/voicevox/user_dict.json du mode natif. config('voicevox.core.user_dict') côté Laravel n’est pas utilisé en mode client.

Prérequis

Démarrez le moteur officiel VOICEVOX.
docker pull voicevox/voicevox_engine:cpu-latest
docker run --rm -p '127.0.0.1:50021:50021' voicevox/voicevox_engine:cpu-latest
La cible de connexion peut être changée via VOICEVOX_URL.
VOICEVOX_URL=http://127.0.0.1:50021

Utilisation de base

Ajouter un mot

Voicevox::addWord() permet d’enregistrer un mot.
use Revolution\Voicevox\Voicevox;

$uuid = Voicevox::addWord(
    surface: 'Laravel',
    pronunciation: 'ララベル',
    accentType: 0,
);

// En mode client, un UUID avec tirets est retourné
// exemple : "a1b2c3d4-0000-0000-0000-000000000000"

Paramètres

ParamètreTypeDescription
surfacestringForme écrite (la chaîne effective du mot)
pronunciationstringPrononciation (katakana uniquement)
accentTypeintType d’accent (0 = plat, 1 ou plus = position de l’accent)
wordTypestring|nullNature grammaticale (COMMON_NOUN, PROPER_NOUN, VERB, ADJECTIVE, SUFFIX)
priorityint|nullPriorité

Récupérer tous les mots

Vous pouvez récupérer tous les mots enregistrés.
use Revolution\Voicevox\Voicevox;

$words = Voicevox::userDict();

/*
[
    "a1b2c3d4-0000-0000-0000-000000000000" => [
        "surface" => "Laravel",
        "pronunciation" => "ララベル",
        "accent_type" => 0,
        "word_type" => "COMMON_NOUN",
        "priority" => 5,
    ],
    ...
]
*/

Mettre à jour un mot

Mettez à jour en spécifiant l’UUID retourné lors de l’ajout.
use Revolution\Voicevox\Voicevox;

Voicevox::updateWord(
    wordUuid: 'a1b2c3d4-0000-0000-0000-000000000000',
    surface: 'Laravel',
    pronunciation: 'ラレベル',
    accentType: 1,
);

Supprimer un mot

use Revolution\Voicevox\Voicevox;

Voicevox::deleteWord('a1b2c3d4-0000-0000-0000-000000000000');

Importer un dictionnaire

Vous pouvez importer un tableau au format dictionnaire utilisateur du moteur officiel. Avec override: false (valeur par défaut), les mots existants sont conservés et les mots importés sont ajoutés.
use Revolution\Voicevox\Voicevox;

$words = json_decode(file_get_contents('other_user_dict.json'), true);

Voicevox::importUserDict($words, override: false);

// Avec override: true, le dictionnaire existant est remplacé
Voicevox::importUserDict($words, override: true);
Pour exporter un dictionnaire, enregistrez le résultat de Voicevox::userDict() en JSON.
$json = json_encode(Voicevox::userDict(), JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE);

file_put_contents('exported_user_dict.json', $json);

Synthèse vocale après enregistrement au dictionnaire

Les mots enregistrés dans le dictionnaire utilisateur sont automatiquement pris en compte lors de la synthèse vocale par le moteur officiel.
use Revolution\Voicevox\Voicevox;

Voicevox::addWord(
    surface: 'Laravel',
    pronunciation: 'ララベル',
    accentType: 0,
);

$response = Voicevox::talk('Laravelで開発するのは楽しいです', id: 1)->generate(id: 1);

$response->storeAs('client', 'laravel.wav');

Correspondance avec l’API du moteur

Chaque méthode de la Facade Voicevox correspond à une API du moteur officiel.
LaravelAPI du moteur officiel
Voicevox::userDict()GET /user_dict
Voicevox::addWord()POST /user_dict_word
Voicevox::updateWord()PUT /user_dict_word/{word_uuid}
Voicevox::deleteWord()DELETE /user_dict_word/{word_uuid}
Voicevox::importUserDict()POST /import_user_dict

Différences avec le mode natif

ÉlémentMode clientMode natif
Méthode d’utilisationFacade VoicevoxHelper dict()
Emplacement de stockageZone utilisateur du moteur officielstorage/voicevox/user_dict.json de Laravel
Exemple macOS~/Library/Application Support/voicevox-engine/user_dict.jsonstorage/voicevox/user_dict.json
UUID lors de l’ajoutAvec -Sans - depuis Core
Processus du moteurRequisNon requis (FFI requis)

Précautions

pronunciation doit être en katakana. Les hiragana et les kanji ne sont pas acceptés.
  • En mode client, c’est le dictionnaire du moteur officiel qui est mis à jour. Rien n’est stocké dans le storage du projet Laravel.
  • Si vous créez à chaque fois un conteneur temporaire (par exemple docker run --rm), le dictionnaire est perdu à l’arrêt du conteneur.
  • L’UUID retourné à l’ajout est de la forme a1b2c3d4-0000-0000-0000-000000000000 (avec tirets).

Dépannage

Les mots ne sont pas pris en compte

  1. Vérifiez que le moteur officiel VOICEVOX est bien démarré.
  2. Vérifiez que VOICEVOX_URL pointe vers la bonne cible.
  3. Vérifiez que la prononciation est en katakana.
  4. Vérifiez que vous n’avez pas relancé un autre conteneur Docker.

L’emplacement du fichier de dictionnaire est inconnu

Sur la version build macOS, vérifiez cet emplacement :
~/Library/Application Support/voicevox-engine/user_dict.json
Sous Docker, le fichier est stocké dans la zone utilisateur du moteur officiel (dans le conteneur). Pour une persistance, montez cette zone utilisateur du conteneur dans un volume Docker.
Dernière modification le 13 juillet 2026