Skip to main content

目的

整理在 Song 合成中容易讓人困惑的 ScoreNote 規格。 實作依據為 Revolution\Voicevox\Song\Note / Score / SongAudioQuery 的原始碼。

Note 類別

Note 代表一個音符(或休止符)。

建構子引數

影格長度的計算

length 以影格為單位。從秒數換算方式如下:
由於這個值不太直觀,如果你熟悉 MIDI,使用 Note::len() 會更實用。
  • 以 4 分音符為 480 ticks 為前提
  • 預設為 125 BPM
  • 內部使用 round() 取整,因此長曲會逐漸累積捨入誤差
Note::len() 雖然方便,但在長篇樂曲中請留意累積誤差。必要時可依區段重新調整長度。

休止符的表現

休止符是以下組合:

MIDI 音符編號對照

Score 類別

Score 是持有 Note 陣列的樂譜物件。

重要規則

第一個音符請務必設為休止符。

主要 API

  • 使用 Score::make(array $notes) 建立
  • 使用 add(Note $note) 追加
  • 使用 toJson() 轉為 JSON 字串
Score 建構子在陣列輸入時的實作會吸收 lyric 的空字串/null,因此透過 ConvertEmptyStringsToNull middleware 傳入的表單輸入也能輕鬆處理。

實用模式:JSON 檔案管理(推薦)

在實際產品中,比起將樂譜直接寫在 PHP 內,以 JSON 管理更容易維運。
  1. 儲存自訂格式的 JSON
  2. 讀入後轉換為 Note / Score
  3. 傳入 Voicevox::song() 進行生成

JSON 範例

讀入與合成

相關頁面

最後修改於 2026年8月2日