Vai al contenuto principale
Utilizzando la funzionalità dei preset puoi salvare e riutilizzare combinazioni di parametri di sintesi vocale frequenti sul motore ufficiale VOICEVOX. In modalità client i preset non vengono salvati lato Laravel, ma viene utilizzata l’API dei preset gestita dal motore ufficiale a cui ti connetti.

Panoramica

I preset in modalità client vengono manipolati tramite la Facade Voicevox. Internamente, invia richieste HTTP a /presets, /add_preset, /update_preset, /delete_preset, /audio_query_from_preset del motore ufficiale VOICEVOX. I preset del motore ufficiale sono salvati come presets.yaml nell’area utente specifica per ciascun sistema operativo. Nella build macOS dell’app VOICEVOX (versione stabile), normalmente vengono salvati nel seguente percorso.
~/Library/Application Support/voicevox-engine/presets.yaml
Anche se avvii il motore ufficiale con Docker, vengono 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, i preset vengono persi al termine del container. Per rendere persistenti i preset in modo affidabile, monta l’area utente all’interno del container tramite un volume Docker. Questa è una gestione separata dallo storage/voicevox/presets.json della modalità nativa. Il config('voicevox.core.presets') lato Laravel non viene utilizzato in modalità client.

Prerequisiti

Avvia il motore ufficiale VOICEVOX.
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.
VOICEVOX_URL=http://127.0.0.1:50021

Struttura di un preset

I preset scambiati in modalità client sono array allineati allo schema dell’API del motore ufficiale.
[
    'id' => 1,                // ID del preset (intero)
    'name' => 'ゆっくり',      // Nome del preset
    'speaker_uuid' => 'uuid', // UUID dello speaker (stringa)
    'style_id' => 1,          // Style ID (intero)
    'speedScale' => 0.8,      // Velocità di parlato
    'pitchScale' => 0.0,      // Pitch
    'intonationScale' => 1.0, // Intonazione
    'volumeScale' => 1.0,     // Volume
    'prePhonemeLength' => 0.1, // Silenzio iniziale
    'postPhonemeLength' => 0.1, // Silenzio finale
]

Utilizzo di base

Creazione di un preset

Puoi creare un preset con Voicevox::addPreset(). Nel motore ufficiale, specificando 0 come id, viene assegnato un ID non ancora utilizzato.
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; // Es: 1

Recupero di tutti i preset

use Revolution\Voicevox\Voicevox;

$presets = Voicevox::presets();

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

Aggiornamento di un preset

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

Eliminazione di un preset

use Revolution\Voicevox\Voicevox;

Voicevox::deletePreset(1);

Sintesi vocale con preset

talkFromPreset()

Voicevox::talkFromPreset() utilizza /audio_query_from_preset del motore ufficiale per creare una TalkAudioQuery con il preset già applicato.
use Revolution\Voicevox\Voicevox;

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

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

audioQueryFromPreset()

Se vuoi ottenere solo l’array della audio query prima della sintesi, usa audioQueryFromPreset().
use Revolution\Voicevox\Voicevox;

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

$audioQuery['speedScale'] = 1.1;

Regolazione aggiuntiva con tap()

Anche una TalkAudioQuery creata da un preset può essere regolata con tap() come una normale Voicevox::talk().
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);

Corrispondenza con l’Engine API

Ogni metodo della Facade Voicevox corrisponde all’API del motore ufficiale.
LaravelAPI del motore ufficiale
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

Differenze con la modalità nativa

ElementoModalità clientModalità nativa
Modalità d’usoFacade VoicevoxHelper preset() / talk()
Formato di salvataggiopresets.yaml del motore ufficialepresets.json di Laravel
Esempio su macOS~/Library/Application Support/voicevox-engine/presets.yamlstorage/voicevox/presets.json
Generazione della audio query/audio_query_from_preset del motore ufficialeImplementazione nativa lato Laravel
Processo del motoreNecessarioNon necessario (richiede FFI)

Esempi pratici

Per narrazione

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

Per parlato veloce

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

Dettagli sui parametri

  • speedScale: 0.5 – 2.0 (velocità di parlato)
  • pitchScale: -0.15 – 0.15 (pitch)
  • intonationScale: 0.0 – 2.0 (intonazione)
  • volumeScale: 0.0 – 2.0 (volume)
  • prePhonemeLength: 0.0 – 1.5 (silenzio iniziale, in secondi)
  • postPhonemeLength: 0.0 – 1.5 (silenzio finale, in secondi)

Avvertenze

In modalità client viene aggiornato presets.yaml lato motore ufficiale. Non viene salvato nella storage del progetto Laravel.
  • Se crei ogni volta un container temporaneo con docker run --rm, i preset vengono persi al termine del container.
  • Includi sia speaker_uuid che style_id.
  • Quando esegui generate(id:) su una query creata con talkFromPreset(), normalmente specifica lo stesso ID dello style_id del preset.

Risoluzione dei problemi

Impossibile recuperare i preset

  1. Verifica che il motore ufficiale VOICEVOX sia in esecuzione.
  2. Verifica che VOICEVOX_URL punti alla destinazione corretta.
  3. Verifica di non aver riavviato un container Docker differente.

Non trovi il file dei preset

Nella build macOS controlla il seguente percorso.
~/Library/Application Support/voicevox-engine/presets.yaml
Con Docker vengono salvati 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.

Non conosci lo speaker_uuid

Puoi ottenere gli UUID dall’elenco degli speaker.
use Revolution\Voicevox\Voicevox;

$speakers = Voicevox::speakers();

foreach ($speakers as $speaker) {
    echo $speaker['name'].': '.$speaker['speaker_uuid'].PHP_EOL;
}
Ultima modifica il 13 luglio 2026