> ## Documentation Index
> Fetch the complete documentation index at: https://kawax.biz/llms.txt
> Use this file to discover all available pages before exploring further.

# Modalità client - Dizionario utente - VOICEVOX for Laravel

> Come utilizzare il dizionario utente del motore ufficiale in modalità client di VOICEVOX for Laravel per registrare la pronuncia di nomi propri e termini tecnici.

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.

```text theme={null}
~/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.

```shell theme={null}
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`.

```env theme={null}
VOICEVOX_URL=http://127.0.0.1:50021
```

## Utilizzo di base

### Aggiunta di una parola

Puoi registrare parole con `Voicevox::addWord()`.

```php theme={null}
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

| Parametro       | Tipo         | Descrizione                                                                      |
| --------------- | ------------ | -------------------------------------------------------------------------------- |
| `surface`       | string       | Rappresentazione (la stringa effettiva della parola)                             |
| `pronunciation` | string       | Pronuncia (solo katakana)                                                        |
| `accentType`    | int          | Tipo di accento (0 = piatto, 1 o superiore = posizione dell'accento)             |
| `wordType`      | string\|null | Parte del discorso (`COMMON_NOUN`, `PROPER_NOUN`, `VERB`, `ADJECTIVE`, `SUFFIX`) |
| `priority`      | int\|null    | Priorità                                                                         |

### Recupero di tutte le parole

Puoi recuperare tutte le parole registrate.

```php theme={null}
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.

```php theme={null}
use Revolution\Voicevox\Voicevox;

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

### Eliminazione di una parola

```php theme={null}
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.

```php theme={null}
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()`.

```php theme={null}
$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.

```php theme={null}
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.

| Laravel                      | API 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

| Elemento                    | Modalità client                                                | Modalità nativa                              |
| --------------------------- | -------------------------------------------------------------- | -------------------------------------------- |
| Modalità d'uso              | Facade `Voicevox`                                              | Helper `dict()`                              |
| Destinazione di salvataggio | Area utente del motore ufficiale                               | `storage/voicevox/user_dict.json` di Laravel |
| Esempio su macOS            | `~/Library/Application Support/voicevox-engine/user_dict.json` | `storage/voicevox/user_dict.json`            |
| UUID in fase di aggiunta    | Con `-`                                                        | Da Core senza `-`                            |
| Processo del motore         | Necessario                                                     | Non necessario (richiede FFI)                |

## Avvertenze

<Warning>
  Specifica `pronunciation` in katakana. Non è possibile usare hiragana o kanji.
</Warning>

* 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.

```text theme={null}
~/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.


## Related topics

- [Modalità nativa - Dizionario utente - VOICEVOX for Laravel](/it/packages/laravel-voicevox/native-user-dict.md)
- [Modalità client - Preset - VOICEVOX for Laravel](/it/packages/laravel-voicevox/client-presets.md)
- [Modalità client: Song (sintesi vocale cantata) - VOICEVOX for Laravel](/it/packages/laravel-voicevox/client-song.md)
- [Modalità client: Talk (sintesi vocale da testo) - VOICEVOX for Laravel](/it/packages/laravel-voicevox/client-talk.md)
- [Introduzione - VOICEVOX for Laravel](/it/packages/laravel-voicevox/getting-started.md)
