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

# Clientmodus - presets - VOICEVOX for Laravel

> Leer hoe je in de clientmodus van VOICEVOX for Laravel de presets van de officiële engine beheert en spraaksyntheseparameters opslaat en hergebruikt.

Met de presetfunctie kun je veelgebruikte combinaties van spraaksyntheseparameters opslaan in de officiële VOICEVOX-engine en hergebruiken. In de clientmodus worden presets niet aan de Laravel-kant opgeslagen; je gebruikt de preset-API die door de gekoppelde officiële engine wordt beheerd.

## Overzicht

Presets in de clientmodus beheer je via de `Voicevox`-facade. Intern worden HTTP-requests verstuurd naar `/presets`, `/add_preset`, `/update_preset`, `/delete_preset` en `/audio_query_from_preset` van de officiële VOICEVOX-engine.

De presets van de officiële engine worden per OS opgeslagen in het gebruikersgebied als `presets.yaml`. Bij de macOS-buildversie van de VOICEVOX-app (productversie) worden ze doorgaans hier opgeslagen.

```text theme={null}
~/Library/Application Support/voicevox-engine/presets.yaml
```

Ook als je de officiële engine in Docker draait, worden ze opgeslagen in het gebruikersgebied binnen de container. Zolang je dezelfde container blijft gebruiken, blijft de data behouden na een herstart. Maar als je telkens een tijdelijke container aanmaakt, zoals met `docker run --rm`, gaan de presets verloren zodra de container stopt. Wil je presets betrouwbaar persistent maken, mount dan het gebruikersgebied in de container via een Docker volume.

Dit staat los van `storage/voicevox/presets.json` van de native modus. De Laravel-instelling `config('voicevox.core.presets')` wordt in de clientmodus niet gebruikt.

## Voorbereiding

Start de officiële VOICEVOX-engine.

```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
```

Je kunt de bestemming wijzigen met `VOICEVOX_URL`.

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

## Structuur van een preset

De presets die je in de clientmodus verstuurt en ontvangt zijn arrays volgens het schema van de officiële engine-API.

```php theme={null}
[
    'id' => 1,                // Preset-ID (integer)
    'name' => 'ゆっくり',      // Presetnaam
    'speaker_uuid' => 'uuid', // Speaker-UUID (string)
    'style_id' => 1,          // Stijl-ID (integer)
    'speedScale' => 0.8,      // Spreeksnelheid
    'pitchScale' => 0.0,      // Toonhoogte
    'intonationScale' => 1.0, // Intonatie
    'volumeScale' => 1.0,     // Volume
    'prePhonemeLength' => 0.1, // Stilte aan het begin
    'postPhonemeLength' => 0.1, // Stilte aan het einde
]
```

## Basisgebruik

### Een preset aanmaken

Met `Voicevox::addPreset()` maak je een preset aan. Als je bij de officiële engine `0` opgeeft als `id`, wordt er een ongebruikt ID toegewezen.

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

$id = Voicevox::addPreset([
    'id' => 0,
    'name' => 'ゆっくり丁寧',
    'speaker_uuid' => '7ffcb7ce-00ec-4bdc-82cd-45a8889e43ff',
    'style_id' => 1,
    'speedScale' => 0.8,
    'pitchScale' => 0.0,
    'intonationScale' => 1.2,
    'volumeScale' => 1.0,
    'prePhonemeLength' => 0.1,
    'postPhonemeLength' => 0.1,
]);

echo $id; // bijvoorbeeld: 1
```

### Alle presets ophalen

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

$presets = Voicevox::presets();

/*
[
    [
        "id" => 1,
        "name" => "ゆっくり丁寧",
        "speaker_uuid" => "7ffcb7ce-00ec-4bdc-82cd-45a8889e43ff",
        "style_id" => 1,
        "speedScale" => 0.8,
        ...
    ],
    ...
]
*/
```

### Een preset bijwerken

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

$id = Voicevox::updatePreset([
    'id' => 1,
    'name' => 'ゆっくりはっきり',
    'speaker_uuid' => '7ffcb7ce-00ec-4bdc-82cd-45a8889e43ff',
    'style_id' => 1,
    'speedScale' => 0.7,
    'pitchScale' => 0.0,
    'intonationScale' => 1.5,
    'volumeScale' => 1.0,
    'prePhonemeLength' => 0.1,
    'postPhonemeLength' => 0.1,
]);
```

### Een preset verwijderen

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

Voicevox::deletePreset(1);
```

## Spraaksynthese met presets

### talkFromPreset()

`Voicevox::talkFromPreset()` maakt via `/audio_query_from_preset` van de officiële engine een `TalkAudioQuery` waarop de preset al is toegepast.

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

$response = Voicevox::talkFromPreset('プリセットを使うのだ', presetId: 1)
    ->generate(id: 1);

$response->storeAs('client', 'preset-talk.wav');
```

### audioQueryFromPreset()

Gebruik `audioQueryFromPreset()` als je alleen de audioquery-array van vóór de spraaksynthese wilt ophalen.

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

$audioQuery = Voicevox::audioQueryFromPreset(
    text: 'プリセットのクエリだけ作るのだ',
    presetId: 1,
);

$audioQuery['speedScale'] = 1.1;
```

### Extra aanpassingen met tap()

Ook een `TalkAudioQuery` die uit een preset is gemaakt, kun je net als bij het gewone `Voicevox::talk()` aanpassen met `tap()`.

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

$response = Voicevox::talkFromPreset('少し速く読むのだ', presetId: 1)
    ->tap(function (TalkAudioQuery $talk) {
        $talk->audioQuery['speedScale'] = 1.2;
    })
    ->generate(id: 1);
```

## Mapping met de Engine API

Elke methode van de `Voicevox`-facade komt overeen met een API van de officiële engine.

| Laravel                            | Officiële engine-API                                |
| ---------------------------------- | --------------------------------------------------- |
| `Voicevox::presets()`              | `GET /presets`                                      |
| `Voicevox::addPreset()`            | `POST /add_preset`                                  |
| `Voicevox::updatePreset()`         | `POST /update_preset`                               |
| `Voicevox::deletePreset()`         | `POST /delete_preset`                               |
| `Voicevox::audioQueryFromPreset()` | `POST /audio_query_from_preset`                     |
| `Voicevox::talkFromPreset()`       | `POST /audio_query_from_preset` + `POST /synthesis` |

## Verschillen met de native modus

| Onderdeel            | Clientmodus                                                  | Native modus                             |
| -------------------- | ------------------------------------------------------------ | ---------------------------------------- |
| Gebruik              | `Voicevox`-facade                                            | `preset()` / `talk()`-helpers            |
| Opslagformaat        | `presets.yaml` van de officiële engine                       | `presets.json` van Laravel               |
| Voorbeeld op macOS   | `~/Library/Application Support/voicevox-engine/presets.yaml` | `storage/voicevox/presets.json`          |
| Audioquery-generatie | `/audio_query_from_preset` van de officiële engine           | Native implementatie aan de Laravel-kant |
| Engineproces         | Vereist                                                      | Niet nodig (FFI vereist)                 |

## Praktijkvoorbeelden

### Voor narratie

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

Voicevox::addPreset([
    'id' => 0,
    'name' => 'ナレーション',
    'speaker_uuid' => '7ffcb7ce-00ec-4bdc-82cd-45a8889e43ff',
    'style_id' => 1,
    'speedScale' => 1.0,
    'pitchScale' => -0.05,
    'intonationScale' => 0.8,
    'volumeScale' => 1.0,
    'prePhonemeLength' => 0.15,
    'postPhonemeLength' => 0.15,
]);
```

### Voor snel spreken

```php theme={null}
Voicevox::addPreset([
    'id' => 0,
    'name' => '早口',
    'speaker_uuid' => '388f246b-8c41-4ac1-8e2d-5d79f3ff56d9',
    'style_id' => 3,
    'speedScale' => 1.5,
    'pitchScale' => 0.05,
    'intonationScale' => 1.3,
    'volumeScale' => 1.0,
    'prePhonemeLength' => 0.05,
    'postPhonemeLength' => 0.05,
]);
```

## Parameterdetails

* `speedScale`: 0.5 – 2.0 (spreeksnelheid)
* `pitchScale`: -0.15 – 0.15 (toonhoogte)
* `intonationScale`: 0.0 – 2.0 (intonatie)
* `volumeScale`: 0.0 – 2.0 (volume)
* `prePhonemeLength`: 0.0 – 1.5 (stilte aan het begin, in seconden)
* `postPhonemeLength`: 0.0 – 1.5 (stilte aan het einde, in seconden)

## Aandachtspunten

<Warning>
  In de clientmodus wordt de `presets.yaml` aan de kant van de officiële engine bijgewerkt. Er wordt niets opgeslagen in de `storage` van je Laravel-project.
</Warning>

* Als je telkens een tijdelijke container aanmaakt, zoals met `docker run --rm`, gaan de presets verloren wanneer de container stopt.
* Neem zowel `speaker_uuid` als `style_id` op.
* Als je een query die met `talkFromPreset()` is gemaakt aan `generate(id:)` doorgeeft, geef je normaal gesproken hetzelfde ID op als het `style_id` van de preset.

## Problemen oplossen

### Presets kunnen niet worden opgehaald

1. Controleer of de officiële VOICEVOX-engine draait.
2. Controleer of `VOICEVOX_URL` naar de juiste bestemming verwijst.
3. Controleer of je in Docker niet per ongeluk een andere container opnieuw hebt gestart.

### De locatie van het presetbestand is onbekend

Controleer bij de macOS-buildversie de volgende locatie.

```text theme={null}
~/Library/Application Support/voicevox-engine/presets.yaml
```

In Docker worden ze opgeslagen in het gebruikersgebied van de officiële engine (binnen de container). Als persistentie nodig is, mount dan het gebruikersgebied in de container op een Docker volume.

### De speaker\_uuid is onbekend

Je kunt de UUID ophalen uit de lijst met speakers.

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

$speakers = Voicevox::speakers();

foreach ($speakers as $speaker) {
    echo $speaker['name'].': '.$speaker['speaker_uuid'].PHP_EOL;
}
```


## Related topics

- [Clientmodus - gebruikerswoordenboek - VOICEVOX for Laravel](/nl/packages/laravel-voicevox/client-user-dict.md)
- [Clientmodus: song (zangsynthese) - VOICEVOX for Laravel](/nl/packages/laravel-voicevox/client-song.md)
- [Clientmodus: talk (tekst-naar-spraak) - VOICEVOX for Laravel](/nl/packages/laravel-voicevox/client-talk.md)
- [Native modus - presets - VOICEVOX for Laravel](/nl/packages/laravel-voicevox/native-presets.md)
- [Aan de slag - VOICEVOX for Laravel](/nl/packages/laravel-voicevox/getting-started.md)
