Objectif
Utiliser tel quel le.vvproj de l’éditeur VOICEVOX pour regénérer Talk et Song depuis Laravel.
Structure de haut niveau
.vvproj est un JSON UTF-8. Il conserve Talk et Song dans un même fichier.
| Clé | Contenu |
|---|---|
appVersion | Version de l’éditeur au moment de la sauvegarde |
talk | Données Talk (audioKeys + audioItems) |
song | Données Song (tempo, mesure, ensemble de pistes) |
Section talk
talk.audioKeys est un tableau ordonné ; talk.audioItems est un Record indexé par ID.
TalkAudioItem
| Clé | Contenu |
|---|---|
text | Texte saisi |
voice.engineId | ID du moteur (correspond à /engine_manifest) |
voice.speakerId | UUID du locuteur |
voice.styleId | ID de style. Passé tel quel à /synthesis?speaker={styleId} |
query | Équivalent à un AudioQuery |
presetKey | ID de preset dans l’éditeur. Pour les presets côté Laravel, consultez Presets |
query est déjà stocké dans le .vvproj, on peut passer directement à la synthèse sans réexécuter /audio_query.
accentPhrases
| Clé | Contenu |
|---|---|
moras | Tableau de mores (les éléments comme consonant peuvent être omis) |
accent | Position de l’accent (indexée à partir de 1) |
pauseMora | Peut apparaître pour insérer un silence après une ponctuation |
isInterrogative | Drapeau d’interrogation |
Section song
| Clé | Contenu |
|---|---|
tpqn | Ticks Per Quarter Note. Standard : 480 |
tempos | Table des tempos (position en ticks) |
timeSignatures | Table des signatures rythmiques (measureNumber commence à 1) |
tracks | Record indexé par ID de piste |
trackOrder | Ordre d’affichage et de lecture. Doit correspondre à l’ensemble des clés de tracks |
Track
| Clé | Contenu |
|---|---|
singer.styleId | ID finalement passé à /frame_synthesis?speaker={styleId} |
notes | Tableau de notes |
keyRangeAdjustment | Ajustement de tessiture en demi-tons |
volumeRangeAdjustment | Ajustement de volume |
pitchEditData / volumeEditData | Données d’édition par frame |
phonemeTimingEditData | Édition de la temporisation des phonèmes par ID de note |
solo / mute | Utilisés pour déterminer les pistes à lire |
Note
| Clé | Contenu |
|---|---|
id | ID de la note (unique) |
position | Tick de début |
duration | Longueur en ticks |
noteNumber | Numéro de note MIDI |
lyric | Paroles |
Conversion tick / seconde / frame
Avec un tempo unique, la conversion est la suivante.tempos par position croissant.
Note::len(), consultez Détails Score et Note.
Flux de génération de la voix Song
Précautions pour l’édition directe
- Faites toujours correspondre l’ensemble des clés de
tracksettrackOrder - Synchronisez de la même manière
talk.audioKeysettalk.audioItems - Respectez
position >= 0,duration >= 1etnoteNumberdans0..127 - Habituellement
tempos[0].positionvaut0ettimeSignatures[0].measureNumbervaut1 - Conservez si possible les clés inconnues à la réécriture pour ne pas casser la compatibilité avec les versions futures
Exemple de code Laravel
Exemple minimal pour charger un.vvproj et générer Talk et Song.