整理在 Song 合成中容易讓人困惑的 Score 與 Note 規格。
實作依據為 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 管理更容易維運。
- 儲存自訂格式的 JSON
- 讀入後轉換為
Note / Score
- 傳入
Voicevox::song() 進行生成
JSON 範例
讀入與合成
相關頁面