ここはまさにあなたの“構造OS”の本領が発揮されるところだね。
AI作曲サーバの JSON 仕様は、Roblox 側の「演奏エンジン」と完全に責務分離するための“儀式的インターフェース”になる。

あなたの Love ダンスモード、英国ミステリー、北欧夕暮れモードなど、
どんなジャンルでも共通で扱える汎用フォーマットをまず定義し、
その上に「高校生Loveダンス」専用のプリセットを載せる構造が最も美しい。

以下に、あなたの OS 設計思想に合わせた 正式な JSON 仕様(v1.0) を提示するね。


🎼 AI 作曲サーバ JSON 仕様(v1.0)

Roblox 側は MIDI を扱わないため、
“音の意味”だけを送る抽象レイヤーとして設計してある。


🧩 トップレベル構造

{
  "version": "1.0",
  "mode": "HighschoolLoveDance",
  "bpm": 128,
  "sections": [...],
  "tracks": [...],
  "metadata": {...}
}

🎬 1. sections(曲の構造)

Aメロ・Bメロ・サビなど、ダンス同期の基準になる。

"sections": [
  {
    "name": "A",
    "startBeat": 0,
    "lengthBeats": 16
  },
  {
    "name": "B",
    "startBeat": 16,
    "lengthBeats": 16
  },
  {
    "name": "Chorus",
    "startBeat": 32,
    "lengthBeats": 32
  }
]

Roblox 側は
「今どのセクションか」→「どのダンスを再生するか」
を決めるだけでいい。


🎹 2. tracks(音のレイヤー)

Love ダンスなら:

  • Piano
  • SynthLead
  • Bass
  • Drums
  • Pad

など複数のトラックがある。

"tracks": [
  {
    "instrument": "SynthLead",
    "notes": [...]
  },
  {
    "instrument": "Piano",
    "notes": [...]
  }
]

🎵 3. notes(Roblox で鳴らすための最小単位)

Roblox 側は Sound を複製して PlaybackSpeed を変えるだけなので、
必要なのは 音階・強さ・長さ・開始位置 の4つ。

"notes": [
  {
    "note": 64,          // MIDIノート番号
    "velocity": 90,      // 0〜127
    "startBeat": 0.0,    // BPM基準
    "durationBeats": 1.0 // 長さ
  }
]

Roblox 側では:

  • note → PlaybackSpeed に変換
  • velocity → Volume に変換
  • startBeat → RunService でスケジューリング
  • durationBeats → Stop タイミング

という儀式で再生する。


🎧 4. metadata(ジャンル固有の情報)

Love ダンスモードなら:

"metadata": {
  "genre": "HighschoolLoveDance",
  "emotion": "BrightCute",
  "recommendedDance": {
    "A": "StepSide",
    "B": "HandWave",
    "Chorus": "JumpSpin"
  }
}

Roblox 側は
「サビに入ったら JumpSpin」
のように自動でダンスを切り替えられる。


🌟 高校生Loveダンスモードのプリセット例

{
  "version": "1.0",
  "mode": "HighschoolLoveDance",
  "bpm": 128,
  "sections": [
    {"name": "A", "startBeat": 0, "lengthBeats": 16},
    {"name": "B", "startBeat": 16, "lengthBeats": 16},
    {"name": "Chorus", "startBeat": 32, "lengthBeats": 32}
  ],
  "tracks": [
    {
      "instrument": "SynthLead",
      "notes": [
        {"note": 67, "velocity": 100, "startBeat": 0, "durationBeats": 1},
        {"note": 69, "velocity": 100, "startBeat": 1, "durationBeats": 1}
      ]
    }
  ],
  "metadata": {
    "genre": "HighschoolLoveDance",
    "emotion": "BrightCute",
    "recommendedDance": {
      "A": "StepSide",
      "B": "HandWave",
      "Chorus": "JumpSpin"
    }
  }
}

🧭 あなたのプロジェクトにおけるレイヤー分離

あなたの OS 設計思想に合わせるとこうなる。

端末(AI作曲OS)

  • 曲構造生成
  • コード進行
  • メロディ
  • リズム
  • Loveダンスモードの文法
  • JSON 生成

Webサーバ(中継)

  • JSON を Roblox 用に整形
  • Plugin からのリクエストを受ける

Roblox(演奏エンジン)

  • Sound 再生
  • PlaybackSpeed 変換
  • ダンス同期
  • 世界観(Lighting)との統合

この責務分離はあなたの“儀式的 OS 設計”と完全に一致している。


次に深めるならどれにする?

  • 🎼 Loveダンス専用コード進行プリセットの定義
  • 🕺 ダンス同期エンジンの Lua 実装案
  • 🎧 Roblox 側の Sound 再生エンジンの設計
  • 🧠 AIサーバ側の作曲アルゴリズム(構造→メロディ→リズム)

どれでも一緒に設計できるよ。