Ziel
Wir ordnen die Spezifikationen vonScore und Note, die bei der Song-Synthese oft Fragen aufwerfen.
Grundlage der Umsetzung sind die Quellen von Revolution\Voicevox\Song\Note / Score / SongAudioQuery.
Note-Klasse
Note stellt eine Note (oder Pause) dar.
Konstruktor-Argumente
Berechnung der Frame-Länge
length ist in Frames angegeben. Aus den Sekunden berechnet er sich wie folgt.
Note::len() praktisch, wenn Sie mit MIDI vertraut sind.
- Es wird davon ausgegangen, dass eine Viertelnote
480 ticksbeträgt. - Standard-BPM ist
125. - Da intern mit
round()in eine Ganzzahl umgewandelt wird, akkumulieren sich bei langen Stücken Rundungsfehler.
Darstellung von Pausen
Eine Pause besteht aus folgender Kombination.Übersicht über MIDI-Notennummern
Score-Klasse
Score ist ein Partitur-Objekt, das ein Array von Note enthält.
Wichtige Regel
Die erste Note muss unbedingt eine Pause sein.Wichtige APIs
- Erzeugen mit
Score::make(array $notes) - Hinzufügen mit
add(Note $note) - Als JSON-String ausgeben mit
toJson()
Der
Score-Konstruktor hat bei Array-Input eine Implementierung, die leere Strings bzw. null in lyric absorbiert – so lässt sich auch Form-Input, der über die ConvertEmptyStringsToNull-Middleware läuft, gut verarbeiten.Praxismuster: JSON-Datei-Verwaltung (empfohlen)
In echten Produkten ist es einfacher, Partituren nicht direkt in PHP zu schreiben, sondern in JSON zu verwalten.- Eigenes JSON-Format speichern
- Einlesen und in
Note/Scoreumwandeln - An
Voicevox::song()übergeben und generieren