Passer au contenu principal
La fonctionnalité de presets permet d’enregistrer dans le moteur officiel VOICEVOX des combinaisons de paramètres de synthèse vocale fréquemment utilisées et de les réutiliser. En mode client, les presets ne sont pas stockés côté Laravel : l’API de presets du moteur officiel connecté est utilisée.

Vue d’ensemble

Les presets en mode client se manipulent via la Facade Voicevox. En interne, des requêtes HTTP sont envoyées à /presets, /add_preset, /update_preset, /delete_preset et /audio_query_from_preset du moteur officiel VOICEVOX. Les presets du moteur officiel sont stockés dans la zone utilisateur propre à chaque OS sous forme de presets.yaml. Sur la version macOS de l’application VOICEVOX (version produit), ils sont généralement stockés à cet emplacement :
~/Library/Application Support/voicevox-engine/presets.yaml
Quand le moteur officiel est démarré via Docker, il stocke également dans la zone utilisateur du conteneur. Les données sont conservées tant que le même conteneur est réutilisé. Si en revanche vous créez un conteneur temporaire à chaque fois (docker run --rm), les presets sont perdus à l’arrêt du conteneur. Pour une persistance fiable, montez la zone utilisateur du conteneur via un volume Docker. Ceci est distinct de storage/voicevox/presets.json du mode natif. config('voicevox.core.presets') côté Laravel n’est pas utilisé en mode client.

Prérequis

Démarrez le moteur officiel VOICEVOX.
docker pull voicevox/voicevox_engine:cpu-latest
docker run --rm -p '127.0.0.1:50021:50021' voicevox/voicevox_engine:cpu-latest
La cible de connexion peut être changée via VOICEVOX_URL.
VOICEVOX_URL=http://127.0.0.1:50021

Structure d’un preset

Les presets envoyés et reçus en mode client sont des tableaux alignés sur le schéma de l’API du moteur officiel.
[
    'id' => 1,                // ID du preset (entier)
    'name' => 'ゆっくり',      // Nom du preset
    'speaker_uuid' => 'uuid', // UUID du locuteur (chaîne)
    'style_id' => 1,          // ID de style (entier)
    'speedScale' => 0.8,      // Vitesse de parole
    'pitchScale' => 0.0,      // Hauteur
    'intonationScale' => 1.0, // Intonation
    'volumeScale' => 1.0,     // Volume
    'prePhonemeLength' => 0.1, // Silence de début
    'postPhonemeLength' => 0.1, // Silence de fin
]

Utilisation de base

Créer un preset

Voicevox::addPreset() permet de créer un preset. Dans le moteur officiel, spécifier 0 comme id fait attribuer automatiquement un ID libre.
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; // exemple : 1

Récupérer tous les presets

use Revolution\Voicevox\Voicevox;

$presets = Voicevox::presets();

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

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

Supprimer un preset

use Revolution\Voicevox\Voicevox;

Voicevox::deletePreset(1);

Synthèse vocale à partir d’un preset

talkFromPreset()

Voicevox::talkFromPreset() utilise /audio_query_from_preset du moteur officiel pour créer un TalkAudioQuery avec le preset déjà appliqué.
use Revolution\Voicevox\Voicevox;

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

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

audioQueryFromPreset()

Pour ne récupérer que le tableau de la audio query avant synthèse, utilisez audioQueryFromPreset().
use Revolution\Voicevox\Voicevox;

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

$audioQuery['speedScale'] = 1.1;

Ajustements complémentaires avec tap()

Le TalkAudioQuery créé depuis un preset peut être ajusté avec tap() comme n’importe quel 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);

Correspondance avec l’API du moteur

Chaque méthode de la Facade Voicevox correspond à une API du moteur officiel.
LaravelAPI du moteur officiel
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

Différences avec le mode natif

ÉlémentMode clientMode natif
Méthode d’utilisationFacade VoicevoxHelpers preset() / talk()
Format de stockagepresets.yaml du moteur officielpresets.json de Laravel
Exemple macOS~/Library/Application Support/voicevox-engine/presets.yamlstorage/voicevox/presets.json
Génération de la audio query/audio_query_from_preset du moteur officielImplémentation native côté Laravel
Processus du moteurRequisNon requis (FFI requis)

Exemples pratiques

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

Pour la parole rapide

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

Détails des paramètres

  • speedScale : 0.5 à 2.0 (vitesse)
  • pitchScale : -0.15 à 0.15 (hauteur)
  • intonationScale : 0.0 à 2.0 (intonation)
  • volumeScale : 0.0 à 2.0 (volume)
  • prePhonemeLength : 0.0 à 1.5 (silence de début, en secondes)
  • postPhonemeLength : 0.0 à 1.5 (silence de fin, en secondes)

Précautions

En mode client, c’est le presets.yaml du moteur officiel qui est mis à jour. Rien n’est stocké dans le storage du projet Laravel.
  • Si vous créez à chaque fois un conteneur temporaire (par exemple docker run --rm), les presets sont perdus à l’arrêt du conteneur.
  • Incluez toujours à la fois speaker_uuid et style_id.
  • Pour generate(id:) sur une query créée par talkFromPreset(), spécifiez normalement le même ID que le style_id du preset.

Dépannage

Les presets ne peuvent pas être récupérés

  1. Vérifiez que le moteur officiel VOICEVOX est bien démarré.
  2. Vérifiez que VOICEVOX_URL pointe vers la bonne cible.
  3. Vérifiez que vous n’avez pas relancé un autre conteneur Docker.

L’emplacement du fichier de presets est inconnu

Sur la version build macOS, vérifiez cet emplacement :
~/Library/Application Support/voicevox-engine/presets.yaml
Sous Docker, le fichier est stocké dans la zone utilisateur du moteur officiel (dans le conteneur). Pour une persistance, montez cette zone utilisateur du conteneur dans un volume Docker.

Le speaker_uuid est inconnu

Vous pouvez récupérer l’UUID depuis la liste des locuteurs.
use Revolution\Voicevox\Voicevox;

$speakers = Voicevox::speakers();

foreach ($speakers as $speaker) {
    echo $speaker['name'].': '.$speaker['speaker_uuid'].PHP_EOL;
}
Dernière modification le 13 juillet 2026