/** * Public: The `bms` package is a library for working with rhythm game data. * * Although this library’s name suggests that it is for BMS file format, * almost every part can be used standalone. * * This package contains: * * - __Modules that reads and parses BMS files:__ * * - {Reader} reads the BMS file from a {Buffer}, detects the character set * and decodes the buffer using that character set into a {String}. * - {Compiler} reads the BMS source from a {String}, and converts into * {BMSChart}, an internal representation of a BMS notechart. * * - __Classes for representing a BMS notechart.__ * These module stores the data as close to the BMS file format as possible. * * Almost no musical interpretation is made. * For example, a BPM change is simply represented using a * BMSObject with `channel` = `03` or `08`. * * - {BMSChart} is composed of {BMSHeaders}, {BMSObjects}, and {TimeSignatures}. * - {BMSHeaders} represents the header sentences in a BMS file. * - {BMSObjects} represents the objects in a BMS file. * - {BMSObject} represents a single object. * * - __Classes that represent different aspects of a notechart.__ * Instance of these classes may be created from a {BMSChart}, * but they can be used in a standalone manner as well. * * This makes this library very flexible, * and able to accommodate different formats of notechart. * For example, see the [bmson](https: *github.com/bemusic/bmson) package. * * It’s also possible to use these classes in context other than music gaming, * for example, you can use these classes to help building a music player * that requires precise synchronization between beats. * * - {TimeSignatures} represents a collection of time signatures * in a musical score, and lets you convert the measure number and fraction * into beat number. * - {Timing} represents the timing information in a musical score, * and provides methods to convert between musical time (beats) and * metric time (seconds). * - {SongInfo} represents the basic song information, * such as title, artist, and genre. * - {Notes} represents the sound objects inside your notechart. * - {Keysounds} represents a mapping between keysound ID and filename. * - {Positioning} represents a mapping between beat and in-game position. * Some rhythm game lets chart author control the amount of scrolling * per beat. In StepMania 5, this is called the scroll segments. * - {Spacing} represents a mapping between beat and note spacing. * Some rhythm game lets chart author change the note spacing (HI-SPEED) * dynamically. In StepMania 5, this is called the speed segments. * * - __Low-level utility classes:__ * * - {Speedcore} represents a linear animation. */ import * as Reader from './reader' import * as Compiler from './compiler' export { Reader, Compiler } export * from './reader/types' export * from './bms/chart' export * from './bms/headers' export * from './bms/objects' export * from './speedcore' export * from './time-signatures' export * from './notes' export * from './timing' export * from './song-info' export * from './keysounds' export * from './positioning' export * from './spacing'