Skip to main content

Obiettivo

Chiarire le specifiche di Score e Note, spesso motivo di confusione nella sintesi Song. I riferimenti implementativi si trovano nel codice di Revolution\Voicevox\Song\Note / Score / SongAudioQuery.

Classe Note

Note rappresenta una singola nota (o una pausa).

Argomenti del costruttore

Calcolo della lunghezza in frame

length è in unità di frame. Da secondi si ricava con:
Poiché questo valore non è intuitivo, se sei abituato a MIDI è più pratico usare Note::len().
  • Considera la semiminima come 480 ticks
  • 125 BPM è il valore predefinito
  • Internamente esegue round() per arrotondare a intero, quindi in brani lunghi l’errore di arrotondamento si accumula gradualmente
Note::len() è comodo, ma nei brani di lunga durata attenzione all’errore cumulativo. Se necessario riaggiusta le durate a livello di sezione.

Rappresentare una pausa

Una pausa è la seguente combinazione.

Riferimento numeri di nota MIDI

Classe Score

Score è l’oggetto partitura che contiene un array di Note.

Regola importante

La prima nota deve sempre essere una pausa.

API principali

  • Score::make(array $notes) per creare
  • add(Note $note) per aggiungere
  • toJson() per convertire in stringa JSON
Il costruttore di Score, in input array, gestisce stringa vuota/null per lyric, così da rendere agevole anche l’input via form passato attraverso il middleware ConvertEmptyStringsToNull.

Pattern pratico: gestione tramite file JSON (consigliato)

In prodotti reali è più gestibile mantenere le partiture in JSON invece di scriverle direttamente in PHP.
  1. Salva un JSON in formato personalizzato
  2. Caricalo e convertilo in Note / Score
  3. Passalo a Voicevox::song() per generare

Esempio JSON

Caricamento e sintesi

Pagine correlate

Ultima modifica il 13 luglio 2026