Ziel
Ermöglicht es,.vvproj-Dateien des VOICEVOX-Editors unverändert zu nutzen und Talk und Song in Laravel neu zu erzeugen.
Top-Level-Struktur
.vvproj ist UTF-8-JSON. Talk und Song werden in derselben Datei gespeichert.
| Key | Inhalt |
|---|---|
appVersion | Editor-Version beim Speichern |
talk | Daten für Talk (audioKeys + audioItems) |
song | Daten für Song (Tempo, Taktart, Tracks) |
talk-Abschnitt
talk.audioKeys ist ein geordnetes Array; talk.audioItems ist ein Record mit IDs als Keys.
TalkAudioItem
| Key | Inhalt |
|---|---|
text | Eingabetext |
voice.engineId | Engine-ID (entspricht /engine_manifest) |
voice.speakerId | Sprecher-UUID |
voice.styleId | Style-ID. Wird direkt an /synthesis?speaker={styleId} übergeben. |
query | Entspricht AudioQuery |
presetKey | Preset-ID des Editors. Presets auf Laravel-Seite siehe Presets. |
query in .vvproj bereits gespeichert ist, können Sie direkt zur Synthese übergehen, ohne /audio_query erneut auszuführen.
accentPhrases
| Key | Inhalt |
|---|---|
moras | Mora-Array (consonant u. ä. können weggelassen werden) |
accent | Akzentposition (1-basiert) |
pauseMora | Kann angehängt werden, wenn bei Satzzeichen etc. eine Stille eingefügt wird |
isInterrogative | Flag für Fragesätze |
song-Abschnitt
| Key | Inhalt |
|---|---|
tpqn | Ticks Per Quarter Note. Standard ist 480 |
tempos | Tempo-Map (position ist ein Tick) |
timeSignatures | Taktart-Map (measureNumber ist 1-basiert) |
tracks | Record mit Track-ID als Key |
trackOrder | Anzeige-/Wiedergabereihenfolge. Muss mit der Schlüsselmenge von tracks übereinstimmen |
Track
| Key | Inhalt |
|---|---|
singer.styleId | Letztlich an /frame_synthesis?speaker={styleId} übergebene ID |
notes | Noten-Array |
keyRangeAdjustment | Tonhöhenanpassung in Halbtonschritten |
volumeRangeAdjustment | Lautstärkeanpassung |
pitchEditData / volumeEditData | Bearbeitungsdaten pro Frame |
phonemeTimingEditData | Phonem-Timing-Bearbeitung pro Note-ID |
solo / mute | Wird zur Bestimmung der Wiedergabe-Tracks verwendet |
Note
| Key | Inhalt |
|---|---|
id | Note-ID (eindeutig) |
position | Startzeit der Note in Ticks |
duration | Notenlänge in Ticks |
noteNumber | MIDI-Notennummer |
lyric | Liedtext |
Umrechnung Tick / Sekunde / Frame
Bei einem einzigen Tempo gilt:tempos in aufsteigender Reihenfolge von position abschnittsweise.
Note::len()-Helper von Ticks in Frame-Längen umrechnet, finden Sie unter Score- und Note-Details.
Ablauf der Song-Audio-Erzeugung
Hinweise bei direkter Bearbeitung
- Die Schlüsselmenge von
tracksundtrackOrdermüssen unbedingt übereinstimmen. - Auch
talk.audioKeysundtalk.audioItemsmüssen synchron gehalten werden. - Halten Sie
position >= 0,duration >= 1undnoteNumberinnerhalb von0..127ein. tempos[0].positionist üblicherweise0,timeSignatures[0].measureNumberüblicherweise1.- Unbekannte Keys nach Möglichkeit erhalten und wieder speichern, um die Kompatibilität mit zukünftigen Versionen nicht zu brechen.
Laravel-Code-Beispiel
Ein Minimalbeispiel, das.vvproj einliest und Talk und Song erzeugt.