A Be-Music Source file-format parser. It is made primarily for usage in Bemuse.
Documentation has been lacking. For now, please see issue 26 for preliminary usage notes.
BMS will be parsed in three stages:
- Use
bms.Reader
to turn a Buffer with BMS file content into a String.- Performs character set detection. Since BMS file encoding varies.
- This part is done by bemusepack to convert BMS file into UTF-8.
- Performs character set detection. Since BMS file encoding varies.
- Use
bms.Compiler
to compile the String into aBMSChart
.- Syntax-level processing is done here, such as:
- #RANDOM
- #SETRANDOM
- #SWITCH
- Results in three primary data structures:
headers
contains all BMS headersobjects
contains all BMS objects on the timeline.timeSignature
contains the time signature information.- also allows converting from measure+fraction to beat
- Syntax-level processing is done here, such as:
BMSChart
contains all information needed to further process the song. These modules can then be used to extract information fromBMSChart
.SongInfo
allows looking up title, subtitle, artist, maker, and genre.- Implicit/multiplex subtitles taken into account here.
Timing
allows conversion from beat to seconds.- BPM, BPM changes, STOP objects, and STP commands taken into account here.
Positioning
allows conversion from beat to in-game position.- SPEED and SCROLL commands (BEMUSE's BMS extensions) taken into account here.
Notes
parses the notechart, resulting in in-game notes.- Channel mapping is taken into consideration here.
- Normal notes and long notes taken into account here.
- Also emits list of notes to autoplay.
Speedcore
allows calculation of position and velocity over a linear graph.