Objetivo
Organiza las especificaciones deScore y Note que suelen generar dudas al sintetizar canciones.
La base de la implementación son los archivos fuente de Revolution\Voicevox\Song\Note / Score / SongAudioQuery.
Clase Note
Note representa una nota (o un silencio).
Argumentos del constructor
Cálculo de la longitud en frames
length está en frames. A partir de los segundos se calcula así:
Note::len().
- Se asume que la negra son
480 ticks - Por defecto son
125 BPM - Internamente se redondea con
round()y se convierte en entero, así que en canciones largas el error de redondeo se acumula poco a poco
Representación de silencios
Los silencios son esta combinación:Referencia de números de nota MIDI
Clase Score
Score es un objeto de partitura que contiene un array de Note.
Regla importante
La primera nota debe ser siempre un silencio.API principal
- Se crea con
Score::make(array $notes) - Se añade con
add(Note $note) - Se convierte a JSON con
toJson()
El constructor de
Score incluye una implementación que absorbe lyric vacío o null al recibir un array, así que también encaja bien con entradas de formulario que pasan por el middleware ConvertEmptyStringsToNull.Patrón práctico: gestión con archivo JSON (recomendado)
En un producto real, es más manejable no escribir la partitura directamente en PHP y gestionarla en JSON.- Guarda un JSON con formato propio
- Cárgalo y conviértelo en
Note/Score - Pásalo a
Voicevox::song()para generar