Skip to main content

Ziel

Wir ordnen die Spezifikationen von Score und Note, die bei der Song-Synthese oft Fragen aufwerfen. Grundlage der Umsetzung sind die Quellen von Revolution\Voicevox\Song\Note / Score / SongAudioQuery.

Note-Klasse

Note stellt eine Note (oder Pause) dar.

Konstruktor-Argumente

Berechnung der Frame-Länge

length ist in Frames angegeben. Aus den Sekunden berechnet er sich wie folgt.
Da dieser Wert nicht intuitiv ist, ist die Verwendung von Note::len() praktisch, wenn Sie mit MIDI vertraut sind.
  • Es wird davon ausgegangen, dass eine Viertelnote 480 ticks beträgt.
  • Standard-BPM ist 125.
  • Da intern mit round() in eine Ganzzahl umgewandelt wird, akkumulieren sich bei langen Stücken Rundungsfehler.
Note::len() ist praktisch, achten Sie jedoch bei langen Stücken auf akkumulierte Fehler. Bei Bedarf justieren Sie die Längen abschnittsweise nach.

Darstellung von Pausen

Eine Pause besteht aus folgender Kombination.

Übersicht über MIDI-Notennummern

Score-Klasse

Score ist ein Partitur-Objekt, das ein Array von Note enthält.

Wichtige Regel

Die erste Note muss unbedingt eine Pause sein.

Wichtige APIs

  • Erzeugen mit Score::make(array $notes)
  • Hinzufügen mit add(Note $note)
  • Als JSON-String ausgeben mit toJson()
Der Score-Konstruktor hat bei Array-Input eine Implementierung, die leere Strings bzw. null in lyric absorbiert – so lässt sich auch Form-Input, der über die ConvertEmptyStringsToNull-Middleware läuft, gut verarbeiten.

Praxismuster: JSON-Datei-Verwaltung (empfohlen)

In echten Produkten ist es einfacher, Partituren nicht direkt in PHP zu schreiben, sondern in JSON zu verwalten.
  1. Eigenes JSON-Format speichern
  2. Einlesen und in Note / Score umwandeln
  3. An Voicevox::song() übergeben und generieren

JSON-Beispiel

Einlesen und Synthetisieren

Verwandte Seiten

Zuletzt geändert am 13. Juli 2026