Saltar al contenido principal
Con el diccionario de usuario puedes registrar la lectura de nombres propios y términos técnicos en el motor oficial de VOICEVOX. En modo cliente, el diccionario no se guarda en Laravel; se utiliza tal cual la API de diccionario de usuario que gestiona el motor oficial al que te conectas.

Resumen

El diccionario de usuario del modo cliente se manipula desde la facade Voicevox. Internamente envía peticiones HTTP a /user_dict, /user_dict_word e /import_user_dict del motor oficial de VOICEVOX. Los datos del diccionario del motor oficial se guardan en el área de usuario según el sistema operativo. En la build de macOS de la app de VOICEVOX (versión de producto) se guarda habitualmente en:
~/Library/Application Support/voicevox-engine/user_dict.json
Cuando ejecutas el motor oficial con Docker también se guarda en el área de usuario dentro del contenedor. Los datos se mantienen mientras sigas usando el mismo contenedor, aunque reinicies. Sin embargo, si creas contenedores efímeros cada vez con docker run --rm, el diccionario se pierde al finalizar el contenedor. Si necesitas persistencia garantizada, monta el área de usuario del contenedor con un volumen Docker. Se gestiona por separado del storage/voicevox/user_dict.json del modo nativo. El config('voicevox.core.user_dict') de Laravel no se usa en modo cliente.

Preparación

Arranca el motor oficial de VOICEVOX.
docker pull voicevox/voicevox_engine:cpu-latest
docker run --rm -p '127.0.0.1:50021:50021' voicevox/voicevox_engine:cpu-latest
Puedes cambiar el destino de conexión con VOICEVOX_URL.
VOICEVOX_URL=http://127.0.0.1:50021

Uso básico

Añadir una palabra

Puedes registrar palabras con Voicevox::addWord().
use Revolution\Voicevox\Voicevox;

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

// En modo cliente se devuelve un UUID con "-"
// Ejemplo: "a1b2c3d4-0000-0000-0000-000000000000"

Parámetros

ParámetroTipoDescripción
surfacestringForma (la cadena real de la palabra)
pronunciationstringLectura (solo katakana)
accentTypeintTipo de acento (0 = plano, 1 o más = posición del acento)
wordTypestring|nullClase gramatical (COMMON_NOUN, PROPER_NOUN, VERB, ADJECTIVE, SUFFIX)
priorityint|nullPrioridad

Obtener todas las palabras

Puedes obtener todas las palabras registradas.
use Revolution\Voicevox\Voicevox;

$words = Voicevox::userDict();

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

Actualizar una palabra

Actualiza indicando el UUID devuelto al añadir.
use Revolution\Voicevox\Voicevox;

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

Eliminar una palabra

use Revolution\Voicevox\Voicevox;

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

Importar un diccionario

Puedes importar un array con el formato de diccionario de usuario del motor oficial. Con override: false (por defecto) se mantienen las palabras existentes y se añaden las importadas.
use Revolution\Voicevox\Voicevox;

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

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

// Con override: true se reemplaza el diccionario existente
Voicevox::importUserDict($words, override: true);
Si quieres exportar el diccionario, guarda el resultado de Voicevox::userDict() como JSON.
$json = json_encode(Voicevox::userDict(), JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE);

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

Síntesis de voz tras registrar el diccionario

Las palabras registradas en el diccionario de usuario se consultan automáticamente al sintetizar voz con el motor oficial.
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');

Correspondencia con la Engine API

Cada método de la facade Voicevox corresponde a una API del motor oficial.
LaravelAPI del motor oficial
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

Diferencias con el modo nativo

ElementoModo clienteModo nativo
Forma de usoFacade VoicevoxHelper dict()
Ubicación de guardadoÁrea de usuario del motor oficialstorage/voicevox/user_dict.json de Laravel
Ejemplo en macOS~/Library/Application Support/voicevox-engine/user_dict.jsonstorage/voicevox/user_dict.json
UUID al añadirCon -Sin - desde Core
Proceso del motorNecesarioNo necesario (se requiere FFI)

Notas importantes

Indica pronunciation en katakana. No se pueden usar hiragana ni kanji.
  • En modo cliente se actualiza el diccionario del motor oficial. No se guarda en el storage del proyecto Laravel.
  • Si creas contenedores efímeros cada vez con docker run --rm, el diccionario se pierde al finalizar el contenedor.
  • El UUID que se devuelve al añadir tiene el formato con guiones, como a1b2c3d4-0000-0000-0000-000000000000.

Solución de problemas

La palabra no se refleja

  1. Comprueba que el motor oficial de VOICEVOX esté arrancado.
  2. Comprueba que VOICEVOX_URL apunte al destino correcto.
  3. Comprueba que la lectura esté en katakana.
  4. Comprueba si has vuelto a arrancar un contenedor distinto de Docker.

No sé dónde está el archivo del diccionario

En la build de macOS, comprueba esta ruta:
~/Library/Application Support/voicevox-engine/user_dict.json
En Docker se guarda en el área de usuario del motor oficial (dentro del contenedor). Si necesitas persistencia, monta el área de usuario del contenedor en un volumen Docker.
Última modificación el 13 de julio de 2026