Qu’est-ce qu’un preset
La fonctionnalité de presets permet d’enregistrer et de réutiliser des combinaisons fréquentes de paramètres de synthèse vocale.
En regroupant vitesse, hauteur, intonation et autres paramètres, il est plus facile de conserver une qualité cohérente même en générant plusieurs voix.
Vue d’ensemble
La fonctionnalité de presets de Laravel VOICEVOX est une implémentation native utilisant VOICEVOX Core. Les données de presets sont persistées au format JSON dans storage/voicevox/presets.json.
Comme un stockage indépendant du moteur officiel VOICEVOX est utilisé, les presets créés côté Laravel ne sont pas répercutés côté moteur officiel (et inversement).
Configuration
Par défaut, les données sont stockées dans storage/voicevox/presets.json. Pour utiliser un autre chemin, modifiez config/voicevox.php.
// config/voicevox.php
return [
'core' => [
'presets' => storage_path('voicevox/presets.json'),
],
];
Structure d’un preset
Un preset a la structure suivante.
[
'id' => 1, // ID du preset (entier, auto-incrémenté)
'name' => 'ゆっくり', // Nom du preset
'speaker_uuid' => 'uuid', // UUID du locuteur (chaîne)
'style_id' => 1, // ID de style (entier)
'speedScale' => 0.8, // Vitesse (0.5 à 2.0)
'pitchScale' => 0.0, // Hauteur (-0.15 à 0.15)
'intonationScale' => 1.0, // Intonation (0.0 à 2.0)
'volumeScale' => 1.0, // Volume (0.0 à 2.0)
'prePhonemeLength' => 0.1, // Silence de début (0.0 à 1.5)
'postPhonemeLength' => 0.1, // Silence de fin (0.0 à 1.5)
]
Utilisation de base
Créer un preset
add() du helper preset() permet de créer un preset.
use function Revolution\Voicevox\preset;
$id = preset()->add([
'id' => 0, // Spécifier 0 déclenche l'auto-numérotation
'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,
]);
// L'ID auto-numéroté est retourné
echo $id; // exemple : 1
Récupérer tous les presets
use function Revolution\Voicevox\preset;
$presets = preset()->all();
Rechercher un preset
use function Revolution\Voicevox\preset;
$preset = preset()->find(1);
if ($preset !== null) {
echo $preset['name']; // "ゆっくり丁寧"
}
Mettre à jour un preset
use function Revolution\Voicevox\preset;
preset()->update([
'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 function Revolution\Voicevox\preset;
preset()->delete(1);
Synthèse vocale avec un preset
Utilisez le helper talk() ou l’endpoint /audio_query_from_preset de l’Engine API.
Helper talk()
Spécifiez l’ID du preset via talk(preset:). L’ID de style habituel est alors ignoré.
use function Revolution\Voicevox\talk;
$response = talk('プリセットを使うのだ', preset: 1)->generate(id: 1);
Le flux de synthèse est le même que d’habitude lorsqu’un preset est appliqué. Seules les valeurs par défaut de l’AudioQuery sont remplacées par celles du preset.
Accès via l’Engine API
Si l’API du moteur Laravel VOICEVOX est démarrée, vous pouvez manipuler les presets via HTTP.
Récupérer tous les presets
curl http://localhost:50513/presets
Ajouter un preset
curl -X POST http://localhost:50513/add_preset \
-H "Content-Type: application/json" \
-d '{
"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
}'
Mettre à jour un preset
curl -X POST http://localhost:50513/update_preset \
-H "Content-Type: application/json" \
-d '{
"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
curl -X POST http://localhost:50513/delete_preset \
-H "Content-Type: application/json" \
-d '{"id": 1}'
Générer une audio query avec un preset
curl -X POST "http://localhost:50513/audio_query_from_preset?text=こんにちは&preset_id=1"
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
Les presets de la version Laravel et ceux du moteur officiel VOICEVOX sont gérés séparément. Les ajouts, mises à jour et suppressions sont immédiatement écrits dans le fichier JSON.
- Spécifier
0 comme ID de preset attribue automatiquement un ID libre.
- Incluez toujours à la fois
speaker_uuid (chaîne UUID) et style_id (entier) dans le preset.
Dépannage
Les presets ne sont pas enregistrés
- Vérifiez les droits d’écriture sur le dossier de storage.
- Vérifiez que
storage/voicevox/presets.json est bien créé.
L’emplacement du fichier de presets est inconnu
$path = config('voicevox.core.presets');
echo $path;
Réinitialiser les presets
rm storage/voicevox/presets.json
$path = config('voicevox.core.presets');
if (file_exists($path)) {
unlink($path);
}