#pragma once #include #include #include #include #include namespace engine::models::sheetsage { struct SheetSage2Note { int pitch = 0; int track = 0; int duration_bin = 0; int duration_steps = 0; }; struct SheetSage2Event { int64_t subbeat = 0; int64_t source_subbeat = 0; int64_t global_subbeat = 0; int window_index = 0; float window_start = 0.0F; float time = 0.0F; std::optional timestamp; std::optional> meter; std::optional eighth_position; std::optional structure; std::optional key; std::optional chord; std::vector notes; std::vector note_end_times; std::vector timestamp_tokens; std::vector rhythm_tokens; std::vector structure_tokens; std::vector key_tokens; std::vector chord_tokens; std::vector melody_tokens; }; int64_t sheetsage2_structure_label_count(); int64_t sheetsage2_duration_bin_count(); std::string sheetsage2_structure_label(int64_t index); std::string sheetsage2_key_label(int64_t index); std::string sheetsage2_chord_label(bool full_chord, int64_t index); SheetSage2Note sheetsage2_note_from_pitch_duration(int pitch_id, int64_t duration_bin); std::string events_to_abc(const std::vector & events, double duration); std::string events_json(const std::vector & events); } // namespace engine::models::sheetsage