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:
~/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.
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
Preset-Struktur
Die im Client-Modus gesendeten und empfangenen Presets sind ein Array, das dem Schema der API der offiziellen Engine entspricht.
[
'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.
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
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
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
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.
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().
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.
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
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
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
Im Client-Modus wird die presets.yaml auf der Seite der offiziellen Engine aktualisiert. Sie wird nicht im storage des Laravel-Projekts gespeichert.
- 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
- Prüfen Sie, ob die offizielle VOICEVOX-Engine läuft.
- Prüfen Sie, ob
VOICEVOX_URL auf das richtige Ziel zeigt.
- 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.
~/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.
use Revolution\Voicevox\Voicevox;
$speakers = Voicevox::speakers();
foreach ($speakers as $speaker) {
echo $speaker['name'].': '.$speaker['speaker_uuid'].PHP_EOL;
}
Zuletzt geändert am 13. Juli 2026