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ètre | Type | Description |
|---|
surface | string | Forme écrite (la chaîne effective du mot) |
pronunciation | string | Prononciation (katakana uniquement) |
accentType | int | Type d’accent (0 = plat, 1 ou plus = position de l’accent) |
wordType | string|null | Nature grammaticale (COMMON_NOUN, PROPER_NOUN, VERB, ADJECTIVE, SUFFIX) |
priority | int|null | Priorité |
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.
| Laravel | API 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ément | Mode client | Mode natif |
|---|
| Méthode d’utilisation | Facade Voicevox | Helper dict() |
| Emplacement de stockage | Zone utilisateur du moteur officiel | storage/voicevox/user_dict.json de Laravel |
| Exemple macOS | ~/Library/Application Support/voicevox-engine/user_dict.json | storage/voicevox/user_dict.json |
| UUID lors de l’ajout | Avec - | Sans - depuis Core |
| Processus du moteur | Requis | Non 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
- Vérifiez que le moteur officiel VOICEVOX est bien démarré.
- Vérifiez que
VOICEVOX_URL pointe vers la bonne cible.
- Vérifiez que la prononciation est en katakana.
- 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.