Zum Hauptinhalt springen
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.
LaravelOffizielle 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

AspektClient-ModusNative-Modus
NutzungVoicevox-Facadepreset()/talk()-Helper
Speicherformatpresets.yaml der offiziellen Enginepresets.json von Laravel
Beispiel unter macOS~/Library/Application Support/voicevox-engine/presets.yamlstorage/voicevox/presets.json
Erzeugung des Audio-Query/audio_query_from_preset der offiziellen EngineNative-Implementierung auf Laravel-Seite
Engine-ProzessErforderlichNicht 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

  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.
~/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