Skip to content
kb_z edited this page Oct 13, 2015 · 8 revisions

I've tweaked the format since SIF Train into something more simple.

First Block: metadata

fields:

  • songName: the name of the song, UTF-8 encoded
  • songFile: the name of the music file (may or not be present in the soundfiles folder) without extension
  • composer: self-explanatory
  • lyricist: self-explanatory
  • id: required - must be a unique number, It's encouraged to use numbers above 100000 to avoid conflicts with the files from my other repo
  • difficultyName: the name of the difficulty
  • difficulty: the difficulty rating (in stars)
  • attribute: the attribute of the song (0: TUTORIAL, 1:Cute, 2: Cool, 3: Passion, 4: All)
  • bpm: the bpm of the song
  • duration: the duration of the song (if a soundfile isn't present, this value will indicate the end of the song. I recommend setting this value to the time of the last note + 5 seconds)

Second Block: notes

fields:

  • id: the id of the note, is unique within the song.
  • timing: the time at which the note should be hit
  • type: the type of the note (1: normal, 2: hold)
  • startPos: the spawn position, (1-5) (unused)
  • endPos: the end position (1-5) (unused)
  • status: the kind of note (0: no-swipe, 1:swipe-left, 2:swipe-right)
  • sync: flag which indicates whether two or more notes are played at the same time
  • groupId: if notes are swipes, they can be grouped together by the groupId
  • nextNoteId: swipes or holds need info on which other note they're linked to for correctly drawing the beams / processing hit/miss
  • prevNoteId: back-reference to the previous note in a hold or grouped swipe combo

Sample:

{
  "metadata":{
    "songName":"TUTORIAL",
    "songFile":"song_0",
    "composer":"TUTORIAL",
    "lyricist":"TUTORIAL",
    "id":0,
    "difficultyName":"Debut",
    "difficulty":0,
    "attribute":0,
    "bpm":60,
    "duration":9.6},
  "notes":[
    {
      "id":1,
      "timing":0.6,
      "type":1,
      "startPos":3,
      "endPos":3,
      "status":0,
      "sync":0,
      "groupId":0,
      "nextNoteId":0,
      "prevNoteId":0
    },
    {
      "id":2,
      "timing":1.8,
      "type":1,
      "startPos":3,
      "endPos":3,
      "status":0,
      "sync":0,
      "groupId":0,
      "nextNoteId":0,
      "prevNoteId":0
    },
    {
      "id":3,
      "timing":3.0,
      "type":1,
      "startPos":3,
      "endPos":3,
      "status":0,
      "sync":0,
      "groupId":0,
      "nextNoteId":0,
      "prevNoteId":0
    },
    {
  "id":4,
  "timing":4.2,
  "type":1,
  "startPos":3,
  "endPos":3,
  "status":0,
  "sync":0,
  "groupId":0,
  "nextNoteId":0,
  "prevNoteId":0
},
{
  "id":5,
  "timing":5.4,
  "type":1,
  "startPos":3,
  "endPos":3,
  "status":0,
  "sync":0,
  "groupId":0,
  "nextNoteId":0,
  "prevNoteId":0
},
{
  "id":6,
  "timing":6.6,
  "type":1,
  "startPos":3,
  "endPos":3,
  "status":0,
  "sync":0,
  "groupId":0,
  "nextNoteId":0,
  "prevNoteId":0
}]`

Clone this wiki locally