Recent from talks
Nothing was collected or created yet.
Be-Music Source
View on Wikipedia
| BMS | |
|---|---|
| Filename extension |
.bms |
| Developed by | Urao Yane, NBK |
| Type of format | Music |
| Container for | Pattern data |
| Extended from | Text files |
| Extended to | BME, BML, PMS |
BMS is a file format for rhythm games developed by Urao Yane in 1998. The format was originally developed for BM98 (a simulator of the game Beatmania by Konami), though the term BMS is now widely used to describe the Beatmania-esque music data system in general.
The acronym has been confirmed by Yane to be Be-Music Source in the official BMS format specification.[1]
Gameplay
[edit]Similar to the Beatmania and Beatmania IIDX series, the purpose of the game is to hit notes as they descend from the top of the screen.
- When the player hits notes with the proper timing, a gauge will fill up. When the player misses a note, the gauge will drain.
- In addition to normal notes, there are also long notes that must be held, and mine notes that will explode and drain the gauge if hit.
- To clear the game, the player's gauge must be filled to a specified level at the end of the song.
BMS events
[edit]Currently, most BMS files are distributed in BMS events, where several artists publish songs and compete for scores.[2] Held since 2004, the largest BMS event is the BMS of Fighters (BOF) held by AOiRO_MANBOW,[2] where more than 250 songs are presented each year.
BMS songs
[edit]As the BMS format requires music to be separated into various tracks, most BMS songs are original songs composed specifically for the BMS file type, thus making it hard to use pre-existing songs for BMS (unless isolated stems are available).
Basic format
[edit]The BMS file describes how notes are arranged and how the game responds when the player takes a specific action. It is a plain text file with "directive" lines starting with the # character. Each directive line is formatted in the form below:
#[definition_setter] [definer]
The space between the definition setter and the definer is required.
A BMS file is generally composed of a header field and the main data field. Below is a simple example of what a BMS file will look like when it is opened by a text editor.
*---------------------- HEADER FIELD #PLAYER 1 #GENRE Sample #TITLE Sample #ARTIST Sample #BPM 120 #PLAYLEVEL 5 #TOTAL 100 #RANK 2 #bmp00 miss.bmp #bmp01 1.bmp #wav01 1.wav *---------------------- MAIN DATA FIELD #00111:01010101 #00211:0101010001010100
Common header field components
[edit]Commands existing from the original BM98 and used in original BMS data are as follows:[3][4]
| Command name | Description |
|---|---|
#ARTIST
|
Defines the artist. |
#BMPxx
|
Defines the picture or video file that will be displayed when the number xx appears in the graphic channels of the main data field.
|
#BPM
|
Defines the speed of the song in beats per minute. |
#GENRE
|
Defines the genre. |
#PLAYER
|
Defines the play style (1 for Single Play, 2 for Couple Play, and 3 for Double Play). Modern BMS simulators do not depend on PLAYER anymore, but define play style by the extension of the file itself and the directive lines used in the main data field.
|
#PLAYLEVEL
|
Defines the difficulty level displayed for the song. |
#RANK
|
Defines how strict the note timing threshold is (0 for very hard, 1 for hard, 2 for normal, and 3 for easy), unless otherwise set by the simulator. |
#TITLE
|
Defines the title. |
#TOTAL
|
Defines how much the gauge will increase when the notes are hit appropriately. |
#WAVxx
|
Defines the music file that is played when the number xx appears in the played channels and the sound channels of the main data field. The most commonly used music file types for BMS are WAV and OGG. #WAV00 sets the sound played when a mine note is hit.
|
Commands later developed that have become popular include:
| Command name | Description |
|---|---|
#BANNER
|
Defines the banner displayed when the song is chosen to play. |
#BPMxx
|
Defines what the BPM will change to when the number xx appears in the BPM channel of the main data field.
|
#DIFFICULTY
|
Defines the difficulty of a song by color (1 for green, 2 for blue, 3 for yellow, 4 for red, and 5 for purple). As songs get harder, higher numbers are assigned. |
#LNOBJ
|
Notes defined with this parameter will act as endings for long notes when they appear in the played channels of the main data field. |
#STAGEFILE
|
Defines the image displayed when the song is chosen to be played. |
#STOPxx
|
Defines how long the sequence should stop when the number xx appears in the stop channel of the main data field.
|
#SUBARTIST
|
Defines a secondary artist. |
#SUBTITLE
|
Defines a subtitle. |
Main data field components
[edit]Main field data is written in the form of #XXXYY:ZZZZZZ. XXX defines the number of the measure, YY defines the channel, and ZZ defines the components of the measure using a base 36 2-digit number. The colon separating the definer and components is required.
Expansion of BMS format
[edit]As the original BMS format became outdated with Beatmania being superseded by Beatmania IIDX, other formats that adopted changes in the Beatmania series were developed. Famous expansions include the Be-Music Extend format (.bme) that allowed 7 lines and 1 turntable to be played, and the Be-Music Long note format (.bml) that allowed usage of long notes that required players to hold the key until the end of the note. A .pms extension also exists based on .bms, meant for simulating the game Pop'n Music and utilizing 9 lines. In addition, there is .mdm, used in the fan created Muse dash Melon Loader for custom charts. It utilizes 4 lines for both of the game's lanes, as well as a couple other lines to control special effects and boss movement.
Simulators themselves have also been developed by fans:
- Yane's original BM98 simulator supported only 256 sound and image files to be played, and only supported 5 lanes plus one scratch per playside.[5]
- Delight Delight Reduplication supports the .bme format, allowing a 7-line format similar to in Beatmania IIDX to be played.[6]
- nazoBMplay allows the number of sound and picture/movie files to increase by making the format 36 base instead of 16 base, and a patch allowed .ogg sound files.[7]
- Currently, the most widely used BMS player is Lunatic Rave 2 by lavalse, that has its own online ranking website. Other simulators after Lunatic Rave 2 with higher performances and wider capabilities exist, but no other simulator was able to replace the position of Lunatic Rave 2 as the most used simulator, mostly due to compatibility with older formats and the lack of an online ranking system.
bmson
[edit]bmson is a JSON-based format initially developed by wosderge. The original purpose of the format was to make an alternative to BMS that was easy to implement and use by developers, artists and chart creators alike. bmson has no limit on the amount of key sounds one can have in a chart, unlike BMS, which has a hard limit of 1296 key sounds. After the format was proposed, the version 0.26 format was implemented to a couple of BMS players, such as Bemuse and raindrop.[8][9] After bmson's initial implementation, the developers of these games, as well as a few others, worked together to create the bmson version 1.0 technical specification.[10]
See also
[edit]References
[edit]- ^ "BM98Data_format_specification".
- ^ a b "Beginner's Guide to THE BMS OF FIGHTERS". keysounds.net. Retrieved 23 November 2023.
- ^ "BMS形式".
- ^ "BMS command memo".
- ^ "BM98Data_format_specification".
- ^ "Delight Delight Reduplication Support Page". Archived from the original on 27 August 2015. Retrieved 1 September 2015.
- ^ "Uonazo".
- ^ "BMSON support and bms loader refactor · zardoru/raindrop@2d72a7d". GitHub. Retrieved 16 February 2016.
- ^ "bmson support landed on Bemuse - Qiita". Qiita. Retrieved 16 February 2016.
- ^ "Welcome to bmson-spec's documentation! — bmson-spec 1.0.0-beta documentation". bmson-spec.readthedocs.org. Retrieved 16 February 2016.
External links
[edit]- Original BMS format specification by Urao Yane
- BMS command memo
- Be-Music Scripting Museum (in Korean)
Games dedicated for the BMS format
[edit]- BM98 Kikuchan Version Drink Edition (in Japanese)
- nazobmplay (in Japanese)
- rhythm-it (in Korean)
- LunaticRave 2 (in Japanese)
- raindrop
- Bemuse
- beatoraja
Be-Music Source
View on Grokipedia# to define essential elements such as song titles, tempos (e.g., #BPM 130), audio waveforms (via #WAVxx directives), bitmap images for visuals (via #BMPxx, typically 256x256 pixels), and gameplay mechanics including note placements across numbered tracks and channels.[1]
BMS files, identified by extensions like .bms for standard charts, .bme for 7- or 14-key variants, .bml for those incorporating long notes, and .pms for 9-key configurations, enable creators to script comprehensive music experiences that synchronize button presses with audio and visual cues.[2] Originally termed Be-Music Data Format '98, the open specification allows free use and has fostered a dedicated international community of chart designers and players since its inception.[1][2]
Beyond BM98, BMS has powered numerous simulators and standalone games, including Lunatic Rave 2 (a popular engine for advanced charting), Beatoraja (a cross-platform player), and web-based titles like Bemuse, which support custom content creation and playback.[2] Key features such as random sequence loading (#random), conditional logic (#if), and specialized note types—like long notes (LNs) distinct from charge notes—have enabled complex, genre-spanning charts ranging from pop remixes to original doujin music, often showcased in events like The BMS of Fighters competitions organized by the Keysounds music circle.[1][2] This enduring format remains a cornerstone of the doujin rhythm game scene, emphasizing accessibility for hobbyists while supporting professional-level difficulty and innovation.[2]
History and Development
Origins
The Be-Music Source (BMS) file format was developed by Urao Yane, a Japanese programmer, in 1998 specifically for BM98, a freeware simulator emulating Konami's Beatmania arcade rhythm game.[1] This format enabled the creation of custom music charts and visuals within the simulator, allowing users to replicate and practice Beatmania-style gameplay on personal computers.[3] On May 4, 1998, Yane presented a draft titled "Be-Music Data Format" to collaborator NBK, laying the foundational structure for what would become the BMS standard.[3] The following day, May 5, 1998, NBK created the first BMS score file, a HOUSE-music chart, based on the draft, demonstrating the format's initial practical application. BM98 version 1.00 was first exhibited by Yane at the "CIRCO PORTO" gathering in July 1998, with version 1.03 released online in October 1998.[3] This rapid progression from draft to implementation highlighted the format's design for immediate integration into the simulator.[1] BM98's early version imposed several constraints to align closely with Beatmania's mechanics, including support for only 256 sound and image files, indexed via hexadecimal commands such as #WAVxx and #BMPxx.[1] It also limited gameplay to 5 lanes per player side, mimicking the arcade game's 5-key layout, with an additional scratch channel to simulate the turntable.[3] These restrictions ensured compatibility and simplicity in the simulator's resource management.[1] Yane himself confirmed the term "Be-Music Source" as the official designation for the BMS format in its specification document, distinguishing it from earlier references like "Be-Music Data Format."[1]Key Milestones
The release of BM98 in 1998 introduced the first dedicated player for the Be-Music Source (BMS) format, sparking rapid community expansion through shared custom charts and tools for simulating Beatmania gameplay.[1] In the early 2000s, the .bml extension was developed as an enhancement to BMS, enabling the inclusion of long notes that required sustained key holds, thereby broadening expressive possibilities in chart design.[4] The launch of the BMS of Fighters (BOF) contest in 2004 by AOiRO_MANBOW established an annual collaborative event, with submissions exceeding 250 works per year by 2025, driving widespread participation and high-quality BMS production.[5][6] From the mid-2000s onward, Lunatic Rave 2 (LR2) solidified its position as the leading BMS simulator, incorporating extended support for multi-key layouts, visual effects, and integrated online scoring that became essential for competitive play.[7] The bmson format emerged in 2015 as a proposed JSON-structured evolution of BMS, designed to mitigate parsing complexities and scalability issues inherent in the original format while preserving core compatibility.[8] By 2025, integration of BMS-originated tracks into official BEMANI series, notably SOUND VOLTEX, had become routine, with dozens of community compositions licensed and adapted for arcade and console releases, elevating the format's influence.[9]Overview
Purpose and Design
Be-Music Source (BMS) was designed as a simple, text-based file format to enable the creation of custom song charts for Beatmania-style rhythm games, allowing community members to replicate and extend arcade experiences on personal computers. Developed with the intent of providing a freely usable standard for music and rhythm games, it emphasizes accessibility for creators by using plain text commands that can be edited with basic tools, fostering the production of original content without reliance on proprietary software. This approach supports the simulation of real-time gameplay, where notes descend vertically on screen in synchronization with music, optimizing for input timing in a manner tailored to rhythm action mechanics.[1] The format's design principles prioritize modularity to handle diverse elements of a rhythm game chart separately, including audio samples, visual assets, and timing adjustments, all integrated through a linear playback structure across dedicated channels. Audio modularity accommodates WAV files natively for sound effects and key sounds, with later implementations extending support to OGG for compressed playback, enabling efficient loading of multiple tracks without compromising performance. Visual elements, such as Background Animation (BGA) layers, are incorporated via bitmap images to overlay dynamic graphics during playback, enhancing the immersive experience while keeping resource demands manageable. Timing is managed through explicit BPM declarations and channel-based changes, allowing precise control over measure lengths and note spacing to match varying musical tempos.[1][10] BMS draws an analogy to the MIDI protocol as a sequencing system for musical events but is specifically optimized for rhythm games, focusing on real-time player input rather than instrumental performance reproduction. By structuring data as time-indexed commands per channel—such as note triggers, stops, and volume adjustments—it facilitates unlimited custom content creation, from amateur charts to complex productions, thereby building a vibrant creator community around Beatmania-inspired titles. This design goal, articulated by its creator as aspiring for global adoption, has enabled the format's persistence in independent rhythm games and emulators, promoting collaborative music-making and chart-sharing ecosystems.[1][11][12]File Characteristics
Be-Music Source (BMS) files are stored in a plain text format with the .bms file extension, allowing them to be edited using standard text editors or specialized tools.[1][3] The format employs line-based directives that begin with the # symbol, which define headers, metadata, and event placements in a case-insensitive manner; any lines not starting with # are treated as comments and ignored by parsers.[1][3] Primarily, BMS files use Shift-JIS encoding to accommodate Japanese text common in titles and artist names, though modern editors and players, such as IIDXv and HDX, support Unicode via Byte Order Mark (BOM) detection, enabling UTF-8 and other encodings for broader character compatibility.[3] A key attribute contributing to the format's efficiency is its reliance on external WAV files for keysounds, rather than embedding audio data directly. These keysounds are referenced through #WAV directives and limited to 255 slots (indexed from 01 to FF in hexadecimal) in the original specification, with modern extensions supporting up to 1296 slots (01 to ZZ in base-36), which keeps the BMS file lightweight by separating audio assets into companion files.[1][3] As a result, even complex charts with thousands of notes typically produce BMS files under 1 MB in size, as the text-based structure avoids inline media storage.[13] The progression of events in a BMS file follows a linear timeline divided into discrete time divisions, with a default resolution of 192 divisions per musical measure to align notes and commands precisely with rhythm.[3][13] This tick-based system, measured across up to 1000 tracks (000 to 999), supports fine-grained timing without requiring variable resolutions per section, though the absence of built-in compression means file growth scales directly with chart density.[1]File Format
Header Section
The header section of a Be-Music Source (BMS) file comprises metadata commands prefixed with # that establish the chart's fundamental attributes, including song information, tempo, audio assignments, and gameplay parameters. These commands form the initial portion of the file, preceding the data section, and parsers process them to configure the environment before interpreting note placements and events. While the original specification allows header commands to appear anywhere in the file, with the last occurrence near the end of the file (EOF) taking precedence for most fields, practical implementations expect them at the top to ensure orderly parsing.[14][15] Essential metadata fields include #TITLE, which defines the primary song title as a string (e.g., #TITLE "Example Track"), #MAKER for the artist or creator (e.g., #MAKER "Artist Name"), #GENRE to categorize the music (e.g., #GENRE "Techno"), and #SUBTITLE for optional supplementary titles (e.g., #SUBTITLE "Remix Version"). Multiple #SUBTITLE commands are supported in extended BMS formats, allowing layered descriptions, with the last near EOF adopted unless multiplexed for display. The #BPM command specifies the initial beats per minute as an integer from 1 to 255 (default 130), such as #BPM 180, influencing the chart's timing grid from the outset.[14][15] Audio configuration occurs via #WAV commands, assigning up to 255 keysound slots (01 to FF in hexadecimal) with external files, as in #WAV01 drumhit.wav, where the number (01 to FF) indexes the sound for later channel references and the value points to a WAV or compatible audio file in the same directory. Visual setup involves #BMP00 to load the poor-play (fail-state) image (typically a 256x256 bitmap), and #BMP01 and higher for other images used in BGA; backgrounds and animations are managed through data channels referencing these assignments.[14][15] Additional fields encompass #PLAYLEVEL for difficulty rating (integers 1-12, e.g., #PLAYLEVEL 8), #RANK to denote the gauge type (e.g., #RANK 2 for normal gauge behavior), and #TOTAL for the total number of divisions or measures in the chart (e.g., #TOTAL 192, defaulting to 1 if omitted). All headers are case-insensitive and separated by a single space from their values, ensuring they precede data commands like #001 for proper file interpretation.[15]Data Section
The data section forms the core of a Be-Music Source (BMS) file, defining the progression of the musical chart through a series of timed commands and events.[1] It begins after the header and consists of lines formatted as#XXXYY:ZZZZ, where XXX denotes the division number (typically ranging from 001 to 999 or beyond in extended files), YY specifies the channel in hexadecimal (00 to FF), and ZZZZ is a variable-length string of hexadecimal digits (even count), encoding events across the measure subdivision. In note channels, the hex string consists of pairs where the first digit is the keysound index and the second is the position within the measure (divided into 192 units in extended formats), repeated as needed. These lines can appear in any order within the file, as the parser sorts them by division and channel during runtime.[3][1]
Channels in the data section are allocated for specific functions, enabling control over audio, timing, and gameplay elements. Channel 01 handles BGM volume adjustments, allowing multiple lines per division to layer audio sources.[3] Channel 02 defines measure lines and time signatures, such as specifying a 4/4 bar with a value like 04.[1] Channel 03 manages BPM changes, where the hexadecimal values (01 to FF) correspond to BPM rates from 1 to 255, e.g., 78 to set 120 BPM (78 hex = 120 decimal). For note placement, channels 10 through 1F (hexadecimal) are designated for player 1's lanes in extended configurations (original uses 11-17 for 7 keys); similar channels 20 to 2F apply to player 2.[3]
Time in the data section advances sequentially through divisions, which represent subdivisions of the chart timeline aligned to the beat structure defined in the header.[1] Each division processes all specified channels in order, with subsequent divisions following numerically; divisions without explicit lines are implicitly treated as containing empty data, indicating no events or changes.[3] This sequential progression ensures linear chart playback, where the hexadecimal digits in each line's data field encode positions within the division (e.g., 010203 placing notes with keysound 0 at the first, second, and third positions if interpreted as value-position pairs).[1]
Keysounds in the data section reference audio files assigned in the header via hexadecimal indices 00 to FF, supporting up to 256 unique WAV files per BMS chart (with 00 often empty).[3] These indices are embedded in the data digits for channels like 10-1F, triggering the corresponding sound on note hits (e.g., 03 invoking the third WAV file); the limitation to 256 arises from the two-digit hex representation.[1]
Commands and Events
The Be-Music Source (BMS) format employs hexadecimal commands within data lines to control gameplay elements, audio, and visuals across designated channels. Core commands include000000, which denotes a null event or rest with no action taken; values like 01 signaling a note activation on the first key channel (typically 1P key via channel 11). Measures advance implicitly by the next division number, without explicit end markers.[3][1]
Timing in BMS is managed through header directives and channel-specific commands. The #BPM xxx directive sets the global base tempo, defaulting to 130 beats per minute if unspecified, as in #BPM 120 for a 120 BPM track. Runtime changes occur via channel 03, where hex values from 01 to FF adjust the BPM to 1–255, for example, 78 in #00103:78 to set 120 BPM (78 hex = 120 decimal). This allows dynamic tempo shifts aligned to measures.[1][3]
BGA (Background Graphic Animation) visuals are handled primarily through channels 04 and 07. Channel 04 controls the base layer, displaying predefined bitmap images via #BMPxx references, such as 01 in #00104:01 to show BMP01 at the start of measure 1. Channel 07 manages opacity and overlay layers, enabling effects like fading or additional graphics, e.g., 02 to overlay BMP02 with adjustable transparency. These commands facilitate synchronized visual animations with music.[1][3]
Extended commands expand timing precision beyond integer BPM. Channel 08 supports high-precision BPM changes using #BPMxx or #EXBPMxx definitions for real-number values, referenced by index; for instance, #BPM01 100.00 followed by 01 in #00108:01 sets exactly 100.00 BPM. Channel 09 implements stops or pauses, where commands like 05 in #00109:05 reference #STOPxx for scaled durations equivalent to fractions of a note (e.g., xx=1 for a 192nd note pause). These features enable complex rhythmic variations.[16][3]
Long note commands configure extended note behaviors. The #LNTYPE 1 directive enables scratch/long note (LN) types, associating release events with specific channels (e.g., 51–5F for 1P LNs), while #LNTYPE 2 supports alternative formats like MGQ-style. The #LNOBJ xx header assigns wave sounds for LN release or end points, such as #LNOBJ 01 linking to WAV01 for the release audio on LN end. In data lines, LNs are denoted by pairing start notes with end markers, like 01FF on an LN channel to begin a long note with keysound 01 and terminate it with release (FF).[3][1]
Gameplay Elements
Note Types
In Be-Music Source (BMS) files, standard notes represent single-hit inputs that trigger keysounds when pressed at the precise moment a note reaches the judgment line. These notes are placed on numbered channels such as 11–1F (in hexadecimal) for the first player (and 21–2F for the second player in versus modes), with the specific channels mapping to 5–9 keys depending on the gameplay mode selected by the player software. Channels are specified using two hexadecimal digits (00–FF).[3] BMS supports multiple key configurations to emulate various arcade rhythm games, including 5-key and 7-key modes inspired by beatmania, 9-key for Pop'n Music simulations (via PMS extension), 10-key setups, and 14-key double-play modes, all featuring a dedicated scratch channel (e.g., 16 or 26) to simulate turntable rotation through rapid or sustained inputs.[3][11] Long notes, introduced in expanded BMS formats like BML, require players to hold a key or scratch input from a start position (defined on channels such as 51–5F (in hexadecimal) for the first player) until a designated release point (specified via commands like #LNOBJ xx using an object index xx). Variants include standard long notes (LN) on key channels and scratch long notes on the turntable lane, where premature release or overrun results in partial scoring.[3] Mine notes function as invisible penalty elements, typically placed on channels D1–D9 (or E1–E9 for the second player), designed to damage the player's life gauge or trigger a failure sound (#WAV00) if accidentally hit, adding strategic avoidance to gameplay in certain charts.[3] Judgment of note hits depends on timing relative to the judgment line, with ranks assigned based on accuracy windows that vary by player implementation but typically emphasize precision. For example, in the Bemuse player, a perfect judgment (Meticulous) requires input within ±20 ms, great (Precise) within ±50 ms, good within ±100 ms, and misses (Offbeat) beyond ±200 ms under normal settings.[17]Event Types
Event types in Be-Music Source (BMS) encompass non-interactive commands that manage visual presentations, timing pauses, rhythmic structure, audio dynamics, and difficulty configurations, enhancing the overall gameplay experience without requiring player input. BGA (Background Graphic Animation) events provide dynamic visual elements through bitmap (BMP) images loaded via#BMPxx directives. These are assigned to dedicated channels for layering: channel 04 displays the base BGA during normal play, channel 07 overlays additional images on the base layer, channel 06 triggers "poor" animations upon missed notes, and extended channel 0A supports further layering. Opacity levels for these layers are adjusted using channels 0B through 0E, with hexadecimal values ranging from 01 (nearly transparent) to FF (fully opaque). Position and cropping of images can be precisely controlled in extensions like BM98de via commands such as #BGAxx BMPnum x1 y1 x2 y2 dx dy, allowing for advanced positioning and movement effects.[3]
Stop events introduce pauses in playback and note progression, implemented primarily through channel 09 or the #STP header. In channel 09, a command like 090192 halts the game for one beat at a resolution of 192 units per measure, effectively creating dramatic breaks synchronized with the music. The #STPxx n format specifies stop durations in milliseconds or resolution units (where n=1 equals a 192nd note), enabling variable pause lengths across the chart.[3]
Measure and time signature adjustments are handled exclusively by channel 02, which defines the duration of each bar relative to the default 4/4 time. A value of 1.00 maintains a standard quarter-note-based measure, while fractional inputs like 0.75 shift to a 3/4 time signature, dividing the bar lines accordingly to support complex polyrhythms or song structure changes. This channel ensures precise alignment of visual bar indicators with the audio timeline.[3]
Volume and fade controls for the background music (BGM) operate via channel 01, referencing loaded #WAVxx audio files. Commands such as 0100FF set the BGM to maximum volume (FF in hexadecimal), while sequential entries across measures enable smooth fades by incrementing or decrementing volume levels. Some implementations, like forgetalia, utilize channel 97 for direct BGM volume scaling from 01 (minimum) to FF (maximum), facilitating atmospheric transitions without interrupting keysound playback.[3]
Gauge events determine the life bar mechanics and are primarily set by the #RANK field, which configures difficulty levels influencing judgment thresholds and life drain rates: 0 for very hard, 1 for hard, 2 for normal, and 3 for easy. These settings indirectly affect gauge behavior by altering hit accuracy requirements, with harder ranks leading to faster life depletion on misses; player-selectable gauge types such as EASY, NORMAL, HARD, and SUDDEN further modify drain and recovery, where SUDDEN often implements sudden-death rules for high-risk play. The #TOTAL value complements this by scaling recovery speed in EASY and NORMAL modes.[3][13]
Expansions and Variants
Extended BMS Formats
Extended BMS formats represent text-based extensions to the original Be-Music Source (BMS) specification, adapting the core structure for specific gameplay modes while preserving fundamental elements like the measure-based channel system and keysound assignments. These variants primarily expand channel allocations to accommodate additional input types, such as more keys or hold mechanics, enabling simulations of various Konami rhythm games within the BMS ecosystem. All extended formats maintain the original limit of 1296 keysounds, assigned via #WAV commands from 01 to ZZ in base-36 numbering, and support channel numbering up to FF in hexadecimal for broader compatibility across players.[3][18] The .bme (Be-Music Extended) format, proposed by TIX to unify channels for 7-key editing, simulates the 7-key layout of Beatmania IIDX, extending the standard 5-key BMS by incorporating additional key channels for keys 6 and 7 alongside the original keys 1-5 and scratch. In this setup, channels 11-19 correspond to the seven main keys and scratch for single player (11-15: keys 1-5, 16: scratch, 18: key 6, 19: key 7), while 17 handles foot pedal input, with double-play modes utilizing mirrored channels 21-29 for the second player. This unification allows seamless editing in tools like BMSC and compatibility with players supporting IIDX-style gameplay, such as Lunatic Rave 2, without altering the core event or header syntax.[3][18] The .bml (Be-Music Longnote) format, introduced by RDM to support long notes, introduces support for long notes—hold mechanics where players sustain input until the note's end—building directly on BMS or BME structures. It dedicates specific channels for long note ends, such as 51-59 for single-player (61-69 for double-play variants), with starts on primary key channels and often paired with the #LNOBJ command to specify long note types, alongside optional #LNTYPE declarations for note rendering. This extension enables complex patterns requiring timed holds, common in IIDX simulations, while retaining the 7-key (or 5-key) base and ensuring backward compatibility. Implementations like RDM and LR2 fully parse these channels for accurate timing and scoring.[3][18] The .pms (Pop-Music Script) format, developed by Feeling Pomu for 9-key/18-key simulations, adapts BMS for the 9-key symmetric layout of Pop'n Music, remapping channels to simulate the game's colorful, piano-like buttons without dedicated turntables. Primary channels 11-19 handle the first player's nine keys, while 21-29 cover the second player's side in double mode; the #PLAYER command (e.g., #PLAYER 2 for double play) is used for recognition. This pseudo-Pop'n mapping leverages existing BMS invisibility and event channels (e.g., 31-35 for hidden notes) to create balanced, mirrored lanes, supporting up to 18 keys total in versus play and integrating seamlessly with BMS editors for pattern design.[3][18]bmson Format
The bmson format is a JSON-based structure for Be-Music Source charts, released on December 26, 2015, as version 1.0.0-beta to address limitations in the original BMS format, such as fixed keysound counts up to 1296. It employs the .bmson file extension, enabling straightforward parsing and editing via standard JSON tools without the need for custom text parsers required by BMS.[19][20] This format offers several key advantages over traditional BMS, including no inherent limit on keysounds through the use of extensible arrays for notes and audio references, automatic sound mapping that allows dynamic slicing of full audio stems during gameplay rather than pre-sliced samples, and support for arbitrary note counts to accommodate complex charts without structural constraints. These changes simplify workflows for artists, who avoid manual audio preparation, and developers, who benefit from JSON's structured and machine-readable nature.[19] At its core, a bmson file is a single JSON object with a "version" field, an "info" object containing metadata like the song "title" and "init_bpm" as a double-precision float, and arrays for elements such as "sound_channels", "bpm_events", and "stop_events". The "sound_channels" array holds objects each linking a sound file via the "name" field (e.g., a WAV stem) to a "notes" array; each note object specifies timing via "y" (pulse count from the song start), horizontal lane via "x" (integer, e.g., 1-7 for keys), length "l" (0 for tap notes, positive integer pulses for holds), and a "c" flag for note continuation in holds. This design ties notes directly to sounds while using pulse-based timing derived from the initial BPM for precise synchronization.[19] A minimal example bmson file illustrating a single tap note might appear as follows:{
"version": "1.0.0",
"info": {
"title": "Song",
"init_bpm": 120.0
},
"sound_channels": [
{
"name": "kick.wav",
"notes": [
{
"x": 1,
"y": 0,
"l": 0,
"c": false
}
]
}
]
}
{
"version": "1.0.0",
"info": {
"title": "Song",
"init_bpm": 120.0
},
"sound_channels": [
{
"name": "kick.wav",
"notes": [
{
"x": 1,
"y": 0,
"l": 0,
"c": false
}
]
}
]
}
