Zum Hauptinhalt springen
Mit dem Benutzerwörterbuch können Sie die Aussprache von Eigennamen und Fachbegriffen in der offiziellen VOICEVOX-Engine registrieren. Im Client-Modus wird das Wörterbuch nicht auf Laravel-Seite gespeichert, sondern die Wörterbuch-API der verbundenen offiziellen Engine wird direkt verwendet.

Übersicht

Das Benutzerwörterbuch im Client-Modus wird über die Voicevox-Facade verwaltet. Intern werden HTTP-Requests an die Endpunkte /user_dict, /user_dict_word und /import_user_dict der offiziellen VOICEVOX-Engine gesendet. Die Wörterbuchdaten der offiziellen Engine werden je nach Betriebssystem im Benutzerbereich gespeichert. In der macOS-Build-Version der VOICEVOX-Anwendung (Produktversion) ist der übliche Speicherort:
~/Library/Application Support/voicevox-engine/user_dict.json
Auch wenn Sie die offizielle Engine über Docker starten, wird sie im Benutzerbereich innerhalb des Containers gespeichert. Solange derselbe Container weiterverwendet wird, bleiben die Daten auch nach einem Neustart erhalten. Wenn Sie jedoch mit docker run --rm jedes Mal einen temporären Container erstellen, geht das Wörterbuch beim Beenden verloren. Um das Wörterbuch zuverlässig persistent zu speichern, mounten Sie den Benutzerbereich des Containers über ein Docker-Volume. Es handelt sich um eine separate Verwaltung vom Native-Modus mit storage/voicevox/user_dict.json. config('voicevox.core.user_dict') auf Laravel-Seite wird im Client-Modus nicht verwendet.

Vorbereitung

Starten Sie die offizielle VOICEVOX-Engine.
docker pull voicevox/voicevox_engine:cpu-latest
docker run --rm -p '127.0.0.1:50021:50021' voicevox/voicevox_engine:cpu-latest
Das Verbindungsziel können Sie über VOICEVOX_URL ändern.
VOICEVOX_URL=http://127.0.0.1:50021

Grundlegende Verwendung

Wort hinzufügen

Sie können mit Voicevox::addWord() ein Wort registrieren.
use Revolution\Voicevox\Voicevox;

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

// Im Client-Modus wird eine UUID mit "-" zurückgegeben
// Beispiel: "a1b2c3d4-0000-0000-0000-000000000000"

Parameter

ParameterTypBeschreibung
surfacestringSchreibweise (der tatsächliche Wort-String)
pronunciationstringAussprache (nur Katakana)
accentTypeintAkzenttyp (0 = flach, 1 oder mehr = Akzentposition)
wordTypestring|nullWortart (COMMON_NOUN, PROPER_NOUN, VERB, ADJECTIVE, SUFFIX)
priorityint|nullPriorität

Alle Wörter abrufen

Sie können alle registrierten Wörter abrufen.
use Revolution\Voicevox\Voicevox;

$words = Voicevox::userDict();

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

Wort aktualisieren

Geben Sie die beim Hinzufügen zurückgegebene UUID an, um zu aktualisieren.
use Revolution\Voicevox\Voicevox;

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

Wort löschen

use Revolution\Voicevox\Voicevox;

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

Wörterbuch importieren

Sie können Arrays im Benutzerwörterbuchformat der offiziellen Engine importieren. Bei override: false (Standard) bleiben bestehende Wörter erhalten und die importierten werden hinzugefügt.
use Revolution\Voicevox\Voicevox;

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

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

// Bei override: true wird das bestehende Wörterbuch ersetzt
Voicevox::importUserDict($words, override: true);
Wenn Sie das Wörterbuch exportieren möchten, speichern Sie das Ergebnis von Voicevox::userDict() als JSON.
$json = json_encode(Voicevox::userDict(), JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE);

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

Sprachsynthese nach der Wörterbuchregistrierung

Wörter, die im Benutzerwörterbuch registriert sind, werden bei der Sprachsynthese durch die offizielle Engine automatisch berücksichtigt.
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');

Zuordnung zur Engine-API

Die Methoden der Voicevox-Facade entsprechen den APIs der offiziellen Engine.
LaravelOffizielle Engine-API
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

Unterschiede zum Native-Modus

AspektClient-ModusNative-Modus
NutzungVoicevox-Facadedict()-Helper
SpeicherortBenutzerbereich der offiziellen Enginestorage/voicevox/user_dict.json von Laravel
Beispiel unter macOS~/Library/Application Support/voicevox-engine/user_dict.jsonstorage/voicevox/user_dict.json
UUID beim HinzufügenMit -Von Core ohne -
Engine-ProzessErforderlichNicht erforderlich (FFI erforderlich)

Hinweise

Geben Sie pronunciation in Katakana an. Hiragana oder Kanji sind nicht zulässig.
  • Im Client-Modus wird das Wörterbuch auf der Seite der offiziellen Engine aktualisiert. Es wird nicht im storage des Laravel-Projekts gespeichert.
  • Bei temporären Containern (z. B. docker run --rm) geht das Wörterbuch beim Beenden des Containers verloren.
  • Die beim Hinzufügen zurückgegebene UUID hat das Format mit Bindestrich wie a1b2c3d4-0000-0000-0000-000000000000.

Fehlerbehebung

Wörter werden nicht übernommen

  1. Prüfen Sie, ob die offizielle VOICEVOX-Engine läuft.
  2. Prüfen Sie, ob VOICEVOX_URL auf das richtige Ziel zeigt.
  3. Prüfen Sie, ob die Aussprache in Katakana geschrieben ist.
  4. Prüfen Sie, ob Sie in Docker nicht einen anderen Container neu gestartet haben.

Der Speicherort der Wörterbuchdatei ist unklar

In der macOS-Build-Version prüfen Sie folgenden Ort.
~/Library/Application Support/voicevox-engine/user_dict.json
In Docker wird sie im Benutzerbereich der offiziellen Engine (innerhalb des Containers) gespeichert. Wenn Persistenz erforderlich ist, mounten Sie den Benutzerbereich des Containers als Docker-Volume.
Zuletzt geändert am 13. Juli 2026