Objectif
Cette page clarifie les spécifications deScore et Note, souvent sources de confusion en synthèse Song.
L’implémentation de référence est celle des sources de Revolution\Voicevox\Song\Note / Score / SongAudioQuery.
Classe Note
Note représente une seule note (ou un silence).
Arguments du constructeur
Calcul de la longueur en frames
length est en frames. Elle se calcule à partir des secondes ainsi :
Note::len().
- Considère la noire comme valant
480 ticks - Par défaut,
125 BPM - Applique
round()en interne pour retourner un entier : les erreurs d’arrondi s’accumulent sur les morceaux longs
Représentation d’un silence
Un silence s’exprime avec la combinaison suivante.Repères pour les numéros de note MIDI
Classe Score
Score est un objet partition qui contient un tableau de Note.
Règle importante
La première note doit obligatoirement être un silence.Principales API
- Création via
Score::make(array $notes) - Ajout via
add(Note $note) - Conversion en chaîne JSON via
toJson()
Le constructeur de
Score inclut une implémentation qui absorbe les chaînes vides / null de lyric lors d’entrées en tableau, ce qui facilite aussi les entrées de formulaire passant par le middleware ConvertEmptyStringsToNull.Pattern pratique : gestion via fichiers JSON (recommandé)
Dans un produit réel, plutôt que d’écrire la partition en dur dans le PHP, il est plus commode de la gérer en JSON.- Stocker un JSON dans un format personnalisé
- Le lire et convertir en
Note/Score - Le passer à
Voicevox::song()pour générer