Doel
Deze pagina zet de specificaties vanScore en Note op een rij, waar je bij Song-synthese makkelijk over kunt struikelen.
De basis voor de implementatie is de broncode van Revolution\Voicevox\Song\Note / Score / SongAudioQuery.
De Note-klasse
Een Note stelt één noot (of rust) voor.
Constructorargumenten
Framelengte berekenen
length is in frames. Vanuit seconden bereken je het zo:
Note::len() te gebruiken als je bekend bent met MIDI.
- Gaat ervan uit dat een kwartnoot
480 ticksis 125 BPMis de standaard- Intern wordt met
round()naar een integer afgerond, dus bij lange nummers hopen afrondingsfouten zich geleidelijk op
Een rust uitdrukken
Een rust is deze combinatie:Richtlijn voor MIDI-nootnummers
De Score-klasse
Een Score is een partituurobject dat een array van Note-objecten bevat.
Belangrijke regel
De eerste noot moet altijd een rust zijn.Belangrijkste API
- Maken met
Score::make(array $notes) - Toevoegen met
add(Note $note) - Naar een JSON-string met
toJson()
De
Score-constructor heeft een implementatie die bij array-invoer lege strings/null in lyric opvangt, waardoor ook formulierinvoer via de ConvertEmptyStringsToNull-middleware makkelijk te verwerken is.Praktijkpatroon: beheer via JSON-bestanden (aanbevolen)
In echte producten is het praktischer om partituren niet hard in PHP te schrijven, maar als JSON te beheren.- Sla JSON in een eigen formaat op
- Lees het in en converteer naar
Note/Score - Geef het door aan
Voicevox::song()en genereer