just plays bmx files using `*.lr2skin`. no IR, no playrecord.
Branch: master
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Type Name Latest commit message Commit time
Failed to load latest commit information.




  • just plays *.bmx(bms, bme, bml, etc.) file.
  • good to use when editing *.bmx files.


  • SDL2
  • SDL2_image
  • SDL2_mixer
  • SDL2_ttf
  • SDL_FontCache
  • Zeranoe FFmpeg
  • bmsbel+
  • Lua
  • pthread (Win32)
  • tinyxml2
  • zlib
  • zziplib
This Project doesn't include libSDL 2.0, SDL2_ttf, FFmpeg
  • download Dev Lib / Runtime Binaries directly from SDL, and extract file to include/SDL, lib/x86, Release.
  • download ffmpeg from Zeranoe FFmpeg, and extract to include/ffmpeg, lib/ffmpeg, Release

how to use

  • drag BMS file to program.
  • archive file available (ex: ./ex.zip/test.bms)


  • default key config is - (1P) LS Z S X D C F V (2P) RS M K , L . ; / you can change it by changing preset files. (also supports controller)

  • [Up/Down] change speed.

  • [Right/Left] change sudden.\n"

  • [F12] float speed toggle\n"

  • [Start+WB/BB] change speed\n"

  • [Start+SC] (if float on) change float speed.

  • [Start+SC] (if sudden on) change sudden.

  • [Start+SC] (if sudden off) change lift.

  • [Start+VEFX] float speed toggle

  • [Start double] toggle sudden.

  • (WB: white button; generally call 1,3,5,7 buttons.)

  • (BB: blue? black? btton; generally calls 2, 4, 6 buttons)

  • (SC: scratch; LShift on keyboard)

available options

-bgaoff: don't load image files (ignore image channel) -replay: show replay file (if no replay file, it won't turn on) -auto: autoplayed by DJ -op__: set op for player (RANDOM ... etc; only support int value)

-g_: set gauge (0: GROOVE, 1: EASY, 2: HARD, 3: EXHARD, 4: HAZARD) -n______: set user profile to play (default: NONAME) -s_: start from n-th measure -e_: end(cut) at n-th measure -r_: repeat bms for n-times -rate__: song rate (1.0 is normal, lower is faster; decimal) -pace__: pacemaker percent (decimal)

default value can be set by changing settings.xml file.

preview (youtube link)

preview (youtube link)

known issue / etc

  • This program will use new skin format, which is ID/event-based and xml-formatted. but I'll try to convert lr2skin to this skin format automatically.

Additional standard suggestion

  • Supporting UTF8 file format
    • *.bmx file formats are old, and most of them uses Shift_JIS. and that makes strings displayed wrong in Non_JP(?) language OS.
    • First, attempt to convert first 10 lines as UTF8.
    • If failes, then consider that file as Shift_JIS. (Fallback)
  • Extended BMS Word (NOT IMPLEMENTED)
    • Uses 4 base36-character for a word.
    • *.bmx file will have almost x2 size than previous format.
    • That will make BMS composer to add more audio/image(video) files.
    • That will also make merging bms files easiler, like LR2's marathon mode.
    • To use this function, write #EXTENDWORD 1 to BMS header.
  • LongNote (GAME FEATURE)
    • Inherits O2Jam feature - that is, you have to key up at the end of the LongNote. If not, Combo break and Guage lose.
    • We may have 2 judges - LN start(press), LN end(up).
    • If start judge failes, then 2 miss will be generated.
    • If LN end judge failed, then 1 miss and start judge will be generated.
  • Scratch LongNote (GAME FEATURE)
    • Have to press one more key after scratching longnote.
    • So, we may have 3 judges - LN start(press), LN end(up), LN end(press)
    • If start judge failes, then 2 miss will be generated.
    • If LN end(up or press) judge failes, then 1 miss and start judge will be generated.
  • Hell LongNote (GAME FEATURE)
    • Combo is continually up during longnote pressing.
    • To use Hell LongNote, write #LNHELL 1 to BMS header.
    • Middle notes between Longnotes will be judged PGREAT if you just stay key pressed during hellnote.