Skip to main content

Doel

Deze pagina zet de specificaties van Score 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:
Omdat deze waarde niet intuïtief is, is het praktischer om Note::len() te gebruiken als je bekend bent met MIDI.
  • Gaat ervan uit dat een kwartnoot 480 ticks is
  • 125 BPM is de standaard
  • Intern wordt met round() naar een integer afgerond, dus bij lange nummers hopen afrondingsfouten zich geleidelijk op
Note::len() is handig, maar let bij langere composities op cumulatieve afrondingsfouten. Pas de lengtes indien nodig per sectie opnieuw aan.

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.
  1. Sla JSON in een eigen formaat op
  2. Lees het in en converteer naar Note / Score
  3. Geef het door aan Voicevox::song() en genereer

JSON-voorbeeld

Inlezen en synthetiseren

Gerelateerde pagina’s

Laatst gewijzigd op 6 september 2026