def convert(sm: SMMapSet) -> List[OsuMap]: """ Converts a SMMapset to possibly multiple osu maps Note that a mapset contains maps, so a list would be expected. SMMap conversion is not possible due to lack of SMMapset Metadata :param sm: :return: """ # I haven't tested with non 4 keys, so it might explode :( osuMapSet: List[OsuMap] = [] for smMap in sm.maps: assert isinstance(smMap, SMMap) hits: List[OsuHit] = [] holds: List[OsuHold] = [] # Note Conversion for hit in smMap.notes.hits(): hits.append(OsuHit(offset=hit.offset, column=hit.column)) for hold in smMap.notes.holds(): holds.append( OsuHold(offset=hold.offset, column=hold.column, _length=hold.length)) bpms: List[Bpm] = [] # Timing Point Conversion for bpm in smMap.bpms: bpms.append(OsuBpm(offset=bpm.offset, bpm=bpm.bpm)) # Extract Metadata osuMap = OsuMap( backgroundFileName=sm.background, title=sm.title, titleUnicode=sm.titleTranslit, artist=sm.artist, artistUnicode=sm.artistTranslit, audioFileName=sm.music, creator=sm.credit, version=f"{smMap.difficulty} {smMap.difficultyVal}", previewTime=int(sm.sampleStart), bpms=OsuBpmList(bpms), notes=OsuNotePkg(hits=OsuHitList(hits), holds=OsuHoldList(holds))) osuMapSet.append(osuMap) return osuMapSet
def convert(o2j: O2JMapSet) -> List[OsuMap]: """ Converts a Mapset to multiple Osu maps Note that a mapset contains maps, so a list would be expected. O2JMap conversion is not possible due to lack of O2JMapset Metadata :param o2j: :return: """ osuMapSet: List[OsuMap] = [] for o2jMap in o2j.maps: assert isinstance(o2jMap, O2JMap) hits: List[OsuHit] = [] holds: List[OsuHold] = [] # Note Conversion for hit in o2jMap.notes.hits(): hits.append(OsuHit(offset=hit.offset, column=hit.column)) for hold in o2jMap.notes.holds(): holds.append( OsuHold(offset=hold.offset, column=hold.column, _length=hold.length)) bpms: List[Bpm] = [] # Timing Point Conversion for bpm in o2jMap.bpms: bpms.append(OsuBpm(offset=bpm.offset, bpm=bpm.bpm)) # Extract Metadata osuMap = OsuMap( title=o2j.title, artist=o2j.artist, creator=o2j.creator, version=f"Level {o2j.level[o2j.maps.index(o2jMap)]}", bpms=OsuBpmList(bpms), circleSize=7, notes=OsuNotePkg(hits=OsuHitList(hits), holds=OsuHoldList(holds))) osuMapSet.append(osuMap) return osuMapSet
def convert(qua: QuaMap) -> OsuMap: """ Converts a Quaver map to an osu map :param qua: :return: """ hits: List[OsuHit] = [] holds: List[OsuHold] = [] # Note Conversion for hit in qua.notes.hits(): hits.append(OsuHit(offset=hit.offset, column=hit.column)) for hold in qua.notes.holds(): holds.append(OsuHold(offset=hold.offset, column=hold.column, _length=hold.length)) bpms: List[Bpm] = [] svs: List[OsuSv] = [] # Timing Point Conversion for bpm in qua.bpms: bpms.append(OsuBpm(offset=bpm.offset, bpm=bpm.bpm)) for sv in qua.svs: svs.append(OsuSv(offset=sv.offset, multiplier=sv.multiplier)) # Extract Metadata osuMap = OsuMap( backgroundFileName=qua.backgroundFile, title=qua.title, circleSize=QuaMapMode.getKeys(qua.mode), titleUnicode=qua.title, artist=qua.artist, artistUnicode=qua.artist, audioFileName=qua.audioFile, creator=qua.creator, version=qua.difficultyName, previewTime=qua.songPreviewTime, bpms=OsuBpmList(bpms), svs=OsuSvList(svs), notes=OsuNotePkg(hits=OsuHitList(hits), holds=OsuHoldList(holds)) ) return osuMap
from reamber.osu.OsuMap import OsuMap import matplotlib.pyplot as plt from reamber.algorithms.analysis.generic.rollingDensity import rollingDensity m = OsuMap() m.readFile("generic/PLANETSHAPER.osu") rollingDensity(m.notes.hits().offsets(), rollingWindowS=2).plot() plt.show()