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

# Client-Modus - Presets - VOICEVOX für Laravel

> Beschreibt, wie Sie im Client-Modus von VOICEVOX für Laravel die Presets der offiziellen Engine verwalten und Parameter für die Sprachsynthese speichern und wiederverwenden.

Mit der Preset-Funktion können Sie häufig genutzte Kombinationen von Sprachsynthese-Parametern in der offiziellen VOICEVOX-Engine speichern und wiederverwenden. Im Client-Modus werden Presets nicht auf Laravel-Seite gespeichert, sondern über die Preset-API der verbundenen offiziellen Engine verwaltet.

## Übersicht

Presets im Client-Modus werden über die `Voicevox`-Facade verwaltet. Intern werden HTTP-Requests an die Endpunkte `/presets`, `/add_preset`, `/update_preset`, `/delete_preset` und `/audio_query_from_preset` der offiziellen VOICEVOX-Engine gesendet.

Die Presets der offiziellen Engine werden je nach Betriebssystem im Benutzerbereich als `presets.yaml` gespeichert. In der macOS-Build-Version der VOICEVOX-Anwendung (Produktversion) ist der übliche Speicherort:

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

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, gehen die Presets beim Beenden des Containers verloren. Um Presets 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/presets.json`. `config('voicevox.core.presets')` auf Laravel-Seite wird im Client-Modus nicht verwendet.

## Vorbereitung

Starten Sie die offizielle 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
```

Das Verbindungsziel können Sie über `VOICEVOX_URL` ändern.

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

## Preset-Struktur

Die im Client-Modus gesendeten und empfangenen Presets sind ein Array, das dem Schema der API der offiziellen Engine entspricht.

```php theme={null}
[
    'id' => 1,                // Preset-ID (Integer)
    'name' => 'ゆっくり',      // Preset-Name
    'speaker_uuid' => 'uuid', // Speaker-UUID (String)
    'style_id' => 1,          // Style-ID (Integer)
    'speedScale' => 0.8,      // Sprechgeschwindigkeit
    'pitchScale' => 0.0,      // Tonhöhe
    'intonationScale' => 1.0, // Intonation
    'volumeScale' => 1.0,     // Lautstärke
    'prePhonemeLength' => 0.1, // Stille am Anfang
    'postPhonemeLength' => 0.1, // Stille am Ende
]
```

## Grundlegende Verwendung

### Preset erstellen

Sie können mit `Voicevox::addPreset()` ein Preset erstellen. In der offiziellen Engine wird bei Angabe von `0` als `id` eine unbenutzte ID zugewiesen.

```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; // Beispiel: 1
```

### Alle Presets abrufen

```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,
        ...
    ],
    ...
]
*/
```

### Preset aktualisieren

```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,
]);
```

### Preset löschen

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

Voicevox::deletePreset(1);
```

## Sprachsynthese mit Presets

### talkFromPreset()

`Voicevox::talkFromPreset()` erstellt mithilfe des `/audio_query_from_preset` der offiziellen Engine ein `TalkAudioQuery` mit bereits angewendetem Preset.

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

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

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

### audioQueryFromPreset()

Wenn Sie nur das Audio-Query-Array vor der Sprachsynthese abrufen möchten, verwenden Sie `audioQueryFromPreset()`.

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

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

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

### Zusätzliche Anpassung mit tap()

Auch das aus einem Preset erzeugte `TalkAudioQuery` können Sie wie beim normalen `Voicevox::talk()` mit `tap()` anpassen.

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

## Zuordnung zur Engine-API

Die Methoden der `Voicevox`-Facade entsprechen den APIs der offiziellen Engine.

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

## Unterschiede zum Native-Modus

| Aspekt                    | Client-Modus                                                 | Native-Modus                             |
| ------------------------- | ------------------------------------------------------------ | ---------------------------------------- |
| Nutzung                   | `Voicevox`-Facade                                            | `preset()`/`talk()`-Helper               |
| Speicherformat            | `presets.yaml` der offiziellen Engine                        | `presets.json` von Laravel               |
| Beispiel unter macOS      | `~/Library/Application Support/voicevox-engine/presets.yaml` | `storage/voicevox/presets.json`          |
| Erzeugung des Audio-Query | `/audio_query_from_preset` der offiziellen Engine            | Native-Implementierung auf Laravel-Seite |
| Engine-Prozess            | Erforderlich                                                 | Nicht erforderlich (FFI erforderlich)    |

## Praxisbeispiele

### Für Narration

```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,
]);
```

### Für schnellen Talk

```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,
]);
```

## Parameter-Details

* `speedScale`: 0.5 – 2.0 (Sprechgeschwindigkeit)
* `pitchScale`: -0.15 – 0.15 (Tonhöhe)
* `intonationScale`: 0.0 – 2.0 (Intonation)
* `volumeScale`: 0.0 – 2.0 (Lautstärke)
* `prePhonemeLength`: 0.0 – 1.5 (Stille am Anfang, in Sekunden)
* `postPhonemeLength`: 0.0 – 1.5 (Stille am Ende, in Sekunden)

## Hinweise

<Warning>
  Im Client-Modus wird die `presets.yaml` auf der Seite der offiziellen Engine aktualisiert. Sie wird nicht im `storage` des Laravel-Projekts gespeichert.
</Warning>

* Bei temporären Containern (z. B. `docker run --rm`) gehen Presets beim Beenden des Containers verloren.
* Geben Sie sowohl `speaker_uuid` als auch `style_id` an.
* Wenn Sie mit `talkFromPreset()` erzeugte Queries mit `generate(id:)` ausführen, geben Sie üblicherweise dieselbe ID wie die `style_id` des Presets an.

## Fehlerbehebung

### Presets können nicht abgerufen werden

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 Sie in Docker nicht einen anderen Container neu gestartet haben.

### Der Speicherort der Preset-Datei ist unklar

In der macOS-Build-Version prüfen Sie folgenden Ort.

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

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.

### `speaker_uuid` ist unbekannt

Sie können die UUID aus der Speaker-Liste abrufen.

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

$speakers = Voicevox::speakers();

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


## Related topics

- [Native-Modus - Presets - VOICEVOX für Laravel](/de/packages/laravel-voicevox/native-presets.md)
- [Client-Modus - Benutzerwörterbuch - VOICEVOX für Laravel](/de/packages/laravel-voicevox/client-user-dict.md)
- [Client-Modus: Song (Gesangs-Sprachsynthese) - VOICEVOX für Laravel](/de/packages/laravel-voicevox/client-song.md)
- [Client-Modus: Talk (Text-Sprachsynthese) - VOICEVOX für Laravel](/de/packages/laravel-voicevox/client-talk.md)
- [Native-Modus: Song (Gesangs-Sprachsynthese) - VOICEVOX für Laravel](/de/packages/laravel-voicevox/native-song.md)
