def _load_eve(lines: List[str], file_path: Path, *, beat_snap: int = 240) -> song.Song: chart = make_chart_from_events(iter_events(lines), beat_snap=beat_snap) dif = guess_difficulty(file_path.stem) or song.Difficulty.EXTREME return song.Song(metadata=song.Metadata(), charts={dif: chart})
def load_memon_0_1_0(path: Path, **kwargs: Any) -> jbt.Song: raw_memon = _load_raw_memon(path) schema = Memon_0_1_0() memon = schema.load(raw_memon) metadata = jbt.Metadata( title=memon["metadata"]["title"], artist=memon["metadata"]["artist"], audio=Path(memon["metadata"]["audio"]), cover=Path(memon["metadata"]["cover"]), ) common_timing = jbt.Timing( events=[ jbt.BPMEvent(time=jbt.BeatsTime(0), BPM=memon["metadata"]["BPM"]) ], beat_zero_offset=jbt.SecondsTime(-memon["metadata"]["offset"]), ) charts: MultiDict[jbt.Chart] = MultiDict() for difficulty, memon_chart in memon["data"].items(): charts.add( difficulty, jbt.Chart( level=memon_chart["level"], notes=[ _load_memon_note_v0(note, memon_chart["resolution"]) for note in memon_chart["notes"] ], ), ) return jbt.Song(metadata=metadata, charts=charts, common_timing=common_timing)
def load_malody_file(raw_dict: dict) -> song.Song: file: malody.Chart = malody.CHART_SCHEMA.load(raw_dict) if file.meta.mode != malody.Mode.PAD: raise ValueError("This file is not a Malody Pad Chart (Malody's jubeat mode)") bgm = find_bgm(file.note) metadata = load_metadata(file.meta, bgm) time_map = load_timing_info(file.time, bgm) timing = time_map.convert_to_timing_info() chart = song.Chart(level=Decimal(0), timing=timing, notes=load_notes(file.note)) dif = file.meta.version or song.Difficulty.EXTREME return song.Song(metadata=metadata, charts={dif: chart})
def memo_compatible_song(draw: DrawFunc) -> song.Song: """Memo only supports one difficulty per file""" diff = draw(st.sampled_from(list(d.value for d in song.Difficulty))) chart = draw( jbst.chart( timing_strat=jbst.timing_info(with_bpm_changes=True), notes_strat=jbst.notes(), )) metadata: song.Metadata = draw(memo_compatible_metadata()) return song.Song( metadata=metadata, charts={diff: chart}, )
def eve_compatible_song(draw: DrawFunc) -> song.Song: """eve only keeps notes, timing info and difficulty, the precision you can get out of it is also severly limited""" diff = draw(st.sampled_from(list(song.Difficulty))) chart = draw( jbst.chart( timing_strat=jbst.timing_info( with_bpm_changes=True, bpm_strat=st.decimals(min_value=50, max_value=300, places=2), beat_zero_offset_strat=st.decimals(min_value=0, max_value=20, places=2), time_strat=jbst.beat_time( min_section=1, max_section=10, denominator_strat=st.sampled_from([4, 3]), ), ), notes_strat=jbst.notes( note_strat=st.one_of( jbst.tap_note(time_strat=simple_beat_strat), jbst.long_note( time_strat=simple_beat_strat, duration_strat=jbst.beat_time( min_numerator=1, max_section=3, denominator_strat=st.sampled_from([4, 3]), ), ), ), beat_time_strat=simple_beat_strat, ), level_strat=st.just(Decimal(0)), )) return song.Song( metadata=song.Metadata(), charts={diff: chart}, )
def malody_song(draw: DrawFunc) -> song.Song: """Malody files only hold one chart and have limited metadata""" diff = draw(difficulty()) chart_ = draw(chart()) metadata_ = draw(metadata()) return song.Song(metadata=metadata_, charts={diff: chart_})