Vai al contenuto principale
Utilizzando il dizionario utente puoi registrare nel motore ufficiale VOICEVOX la pronuncia di nomi propri e termini tecnici. In modalità client il dizionario non viene salvato lato Laravel: viene utilizzata direttamente l’API del dizionario utente gestita dal motore ufficiale a cui ti connetti.

Panoramica

Il dizionario utente in modalità client si manipola tramite la Facade Voicevox. Internamente, invia richieste HTTP a /user_dict, /user_dict_word e /import_user_dict del motore ufficiale VOICEVOX. I dati del dizionario del motore ufficiale sono salvati nell’area utente specifica per ciascun sistema operativo. Nella build macOS dell’app VOICEVOX (versione stabile) sono normalmente salvati nel seguente percorso.
~/Library/Application Support/voicevox-engine/user_dict.json
Anche se avvii il motore ufficiale con Docker, sono salvati nell’area utente all’interno del container. Finché continui a utilizzare lo stesso container, i dati vengono mantenuti anche dopo il riavvio. Tuttavia, se crei ogni volta un container temporaneo, ad esempio con docker run --rm, il dizionario viene perso al termine del container. Per rendere persistente il dizionario in modo affidabile, monta l’area utente all’interno del container tramite un volume Docker. Questa è una gestione separata da storage/voicevox/user_dict.json della modalità nativa. Il config('voicevox.core.user_dict') lato Laravel non viene utilizzato in modalità client.

Prerequisiti

Avvia il motore ufficiale VOICEVOX.
docker pull voicevox/voicevox_engine:cpu-latest
docker run --rm -p '127.0.0.1:50021:50021' voicevox/voicevox_engine:cpu-latest
Puoi modificare la destinazione con VOICEVOX_URL.
VOICEVOX_URL=http://127.0.0.1:50021

Utilizzo di base

Aggiunta di una parola

Puoi registrare parole con Voicevox::addWord().
use Revolution\Voicevox\Voicevox;

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

// In modalità client viene restituito un UUID con "-"
// Es: "a1b2c3d4-0000-0000-0000-000000000000"

Parametri

ParametroTipoDescrizione
surfacestringRappresentazione (la stringa effettiva della parola)
pronunciationstringPronuncia (solo katakana)
accentTypeintTipo di accento (0 = piatto, 1 o superiore = posizione dell’accento)
wordTypestring|nullParte del discorso (COMMON_NOUN, PROPER_NOUN, VERB, ADJECTIVE, SUFFIX)
priorityint|nullPriorità

Recupero di tutte le parole

Puoi recuperare tutte le parole registrate.
use Revolution\Voicevox\Voicevox;

$words = Voicevox::userDict();

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

Aggiornamento di una parola

Aggiorna specificando l’UUID restituito al momento dell’aggiunta.
use Revolution\Voicevox\Voicevox;

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

Eliminazione di una parola

use Revolution\Voicevox\Voicevox;

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

Importazione del dizionario

Puoi importare un array nel formato del dizionario utente del motore ufficiale. Con override: false (impostazione predefinita), le parole esistenti sono mantenute e le parole importate vengono aggiunte.
use Revolution\Voicevox\Voicevox;

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

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

// Con override: true il dizionario esistente viene sostituito
Voicevox::importUserDict($words, override: true);
Se vuoi esportare il dizionario, salva in JSON il risultato di Voicevox::userDict().
$json = json_encode(Voicevox::userDict(), JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE);

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

Sintesi vocale dopo la registrazione nel dizionario

Le parole registrate nel dizionario utente vengono automaticamente utilizzate quando il motore ufficiale esegue la sintesi vocale.
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');

Corrispondenza con l’Engine API

Ogni metodo della Facade Voicevox corrisponde all’API del motore ufficiale.
LaravelAPI del motore ufficiale
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

Differenze con la modalità nativa

ElementoModalità clientModalità nativa
Modalità d’usoFacade VoicevoxHelper dict()
Destinazione di salvataggioArea utente del motore ufficialestorage/voicevox/user_dict.json di Laravel
Esempio su macOS~/Library/Application Support/voicevox-engine/user_dict.jsonstorage/voicevox/user_dict.json
UUID in fase di aggiuntaCon -Da Core senza -
Processo del motoreNecessarioNon necessario (richiede FFI)

Avvertenze

Specifica pronunciation in katakana. Non è possibile usare hiragana o kanji.
  • In modalità client viene aggiornato il dizionario lato motore ufficiale. Non viene salvato nella storage del progetto Laravel.
  • Se crei ogni volta un container temporaneo con docker run --rm, il dizionario viene perso al termine del container.
  • L’UUID restituito in fase di aggiunta ha il formato con trattini, come a1b2c3d4-0000-0000-0000-000000000000.

Risoluzione dei problemi

Le parole non vengono applicate

  1. Verifica che il motore ufficiale VOICEVOX sia in esecuzione.
  2. Verifica che VOICEVOX_URL punti alla destinazione corretta.
  3. Verifica che la pronuncia sia in katakana.
  4. Verifica di non aver riavviato un container Docker differente.

Non trovi il file del dizionario

Nella build macOS controlla il seguente percorso.
~/Library/Application Support/voicevox-engine/user_dict.json
Con Docker viene salvato nell’area utente (all’interno del container) del motore ufficiale. Se serve persistenza, monta l’area utente all’interno del container su un volume Docker.
Ultima modifica il 13 luglio 2026