Skip to main content

目的

Song 合成で迷いやすい ScoreNote の仕様を整理します。 実装の根拠は Revolution\Voicevox\Song\Note / Score / SongAudioQuery のソースです。

Note クラス

Note は 1 音符(または休符)を表します。

コンストラクタ引数

フレーム長の計算

length はフレーム単位です。秒数からは次で求めます。
この値は直感的ではないため、MIDI に慣れている場合は Note::len() を使うのが実用的です。
  • 4 分音符を 480 ticks として扱う前提
  • 125 BPM がデフォルト
  • 内部で round() して整数化するため、長い曲では丸め誤差が徐々に蓄積します
Note::len() は便利ですが、長尺の楽曲では累積誤差に注意してください。必要ならセクション単位で長さを再調整します。

休符の表現

休符は次の組み合わせです。

MIDI ノート番号の目安

Score クラス

ScoreNote の配列を持つ楽譜オブジェクトです。

重要ルール

最初のノートは必ず休符にしてください。

主な API

  • Score::make(array $notes) で生成
  • add(Note $note) で追記
  • toJson() で JSON 文字列化
Score コンストラクタは配列入力時に lyric の空文字/null を吸収する実装があり、ConvertEmptyStringsToNull ミドルウェア経由のフォーム入力でも扱いやすくなっています。

実用パターン: JSON ファイル管理(推奨)

実際のプロダクトでは、PHP に楽譜を直書きせず JSON で管理するほうが運用しやすいです。
  1. 独自フォーマット JSON を保存
  2. 読み込んで Note / Score に変換
  3. Voicevox::song() へ渡して生成

JSON 例

読み込みと合成

関連ページ

最終更新日 2026年5月23日