Chronomia is a tool to convert BPM layouts and other tools from Osu!, Clone Hero, Be-Music Source, K-Shoot Mania and Stepmania into SRTB files for use with Spin Rhythm.
- BPM conversion
- Editor bookmarks to cue points
- Break points to cue points
- Hit objects to tap notes
- Sliders to match streams
- Sliders to Spin Rhythm sliders
- Title to Song Name
- Artist to Artist
- Source to Subtitle
- BPM conversion
- Hit objects to tap notes
- TITLE to Song Name
- ARTIST to Artist
- GENRE to Subtitle
- BPM conversion
- FX-L to beats (On expert)
- FX-R to beats (On XD)
- VOL-L to slides (On expert)
- VOL-R to slides (On XD)
- TITLE to Song Name
- ARTIST to Artist
- ILLUS to Subtitle
- BPM conversion
- Notes to matches
- TITLE to Song Name
- ARTIST to Artist
- SUBTITLE to Subtitle
- BPM conversion
- Notes to matches
- Song Name
- Artist
If you have knowledge of a common rhythm game format, contribute! We recommend looking at the current importers for what the format expected from an importer is. You can see these in the SM and Chart implementations.
All files should have a clearly named import function ie importSM
or importChart
, these functions are expected to take in an options table and the actual file data.
File data is a string containing the raw file passed in.
Options is an object formatted like the following: (Import/Export specifies when the variable is used, you probably don't need to worry about export options.)
{
bpm: {
base: boolean, // Whether to output a base BPM, export
changes: boolean, // Whether to output BPM changes, export
offset: boolean // Whether to output chart offset, export
}
cue: {
osu: {
bookmark: boolean, // Whether to use osu editor bookmarks as cues, import
break: boolean // Whether to use map break times as cues, import
}
}
note: {
base: boolean, // Whether to attempt to place notes in the converts. Import.
ksm: {
fxL: boolean, // Whether to place FX-L notes. Import.
fxR: boolean, // Whether to place FX-R notes. Import.
volL: boolean, // Whether to place Vol-L lasers. Import.
volR: boolean // Whether to place Vol-R lasers. Import.
},
osu: {
slider: boolean, // Whether to place Osu sliders. Import.
},
bms: {
scratch: boolean, // Whether to place IIDX scratch notes. Import.
}
}
meta: {
title: boolean, // Whether to use the song title in the meta. Import.
subtitle: boolean, // Whether to use the song subtitle in the meta. Export.
artist: boolean // Whether to use the artist in the meta. Export.
}
}
You should then process the file according to the options and return an object with the format:
{
name: string, // Meta name
subtitle: string, // Meta subtitle
artist: string, // Meta artist
bpm: number, // Base bpm to use for when changes are off
offset: number, // Number to globally offset bpm changes by
bpmChanges: [ // Array of BPM changes
{
beat: number, // Time in beats the BPM change occurs at.
bpm: number, // The BPM it changes to.
absolute: number // The time in seconds the BPM change occurs at.
}
],
notes:[ // Array of notes, yet to be defined in format.
],
cues:[ // Array of cues/bookmarks/labels
{
name: string, // Name associated with it
absolute: number // Absolute time it occurs
}
]
}
You can then add your converter to the case list at https://github.com/LavenderTheGreat/chronomia/blob/master/index.js#L55 and the appropriate function to load below.
Then add your script to the head of https://github.com/LavenderTheGreat/chronomia/blob/master/index.html around the rest of the converters and submit your PR.
An example of a good PR can be found at the .chart PR: #1