#ifndef PKE_AT_PKE_AT_SETLIST_TYPES_HPP #define PKE_AT_PKE_AT_SETLIST_TYPES_HPP #include enum PKE_AT_SECTION_TYPE_INDEX { PKE_AT_SECTION_TYPE_INDEX_NONE, PKE_AT_SECTION_TYPE_INDEX_VERSE, PKE_AT_SECTION_TYPE_INDEX_CHORUS, PKE_AT_SECTION_TYPE_INDEX_BRIDGE, PKE_AT_SECTION_TYPE_INDEX_INTRO, PKE_AT_SECTION_TYPE_INDEX_OUTRO, PKE_AT_SECTION_TYPE_INDEX_END, PKE_AT_SECTION_TYPE_INDEX_ENDING = PKE_AT_SECTION_TYPE_INDEX_END, PKE_AT_SECTION_TYPE_INDEX_INSTRUMENTAL, PKE_AT_SECTION_TYPE_INDEX_INTERLUDE, PKE_AT_SECTION_TYPE_INDEX_REFRAIN, PKE_AT_SECTION_TYPE_INDEX_TAG, PKE_AT_SECTION_TYPE_INDEX_COUNT, }; struct pke_at_section_type { enum PKE_AT_SECTION_TYPE_INDEX section_type_index = PKE_AT_SECTION_TYPE_INDEX_NONE; AssetKey title_key; AssetHandle title_handle = AssetHandle_MAX; }; struct pke_at_section_details { pk_uuid song_uuid; uint8_t sequence; uint8_t beats_per_bar = 0; uint8_t bar_count = 0; enum PKE_AT_SECTION_TYPE_INDEX section_type_index = PKE_AT_SECTION_TYPE_INDEX_NONE; }; struct pke_at_section { pke_at_section_details details{}; }; enum PKE_AT_KEY_INDEX { PKE_AT_KEY_INDEX_NONE = 0, PKE_AT_KEY_INDEX_C, PKE_AT_KEY_INDEX_C_SHARP, PKE_AT_KEY_INDEX_D_FLAT, PKE_AT_KEY_INDEX_D, PKE_AT_KEY_INDEX_D_SHARP, PKE_AT_KEY_INDEX_E_FLAT, PKE_AT_KEY_INDEX_E, PKE_AT_KEY_INDEX_F, PKE_AT_KEY_INDEX_F_SHARP, PKE_AT_KEY_INDEX_G_FLAT, PKE_AT_KEY_INDEX_G, PKE_AT_KEY_INDEX_G_SHARP, PKE_AT_KEY_INDEX_A_FLAT, PKE_AT_KEY_INDEX_A, PKE_AT_KEY_INDEX_A_SHARP, PKE_AT_KEY_INDEX_B_FLAT, PKE_AT_KEY_INDEX_B, PKE_AT_KEY_INDEX_COUNT, }; struct pke_at_song_details { pk_uuid uuid; enum PKE_AT_KEY_INDEX key; long ccli; pk_cstr title; pk_cstr arrangement; uint8_t bpm; }; struct pke_at_song { struct pke_at_song_details details{}; float calculated_delta = 0.f; pk_arr_t sections; }; struct pke_at_setlist_details { pk_uuid uuid; pk_cstr title; }; struct pke_at_setlist { struct pke_at_setlist_details details{}; pk_arr_t tracks; }; struct pke_at_setlist_song_details { pk_uuid setlist_uuid; pk_uuid song_uuid; }; struct pke_at_setlist_song { struct pke_at_setlist_song_details details{}; }; struct pke_at_key { const char *name; float mtrnm_hz_beat; float mtrnm_hz_down_beat; AssetHandle mtrnm_beat_asset_handle = AssetHandle_MAX; AssetHandle mtrnm_down_beat_asset_handle = AssetHandle_MAX; }; extern struct pke_at_key g_keys[PKE_AT_KEY_INDEX_COUNT]; #endif /* PKE_AT_PKE_AT_SETLIST_TYPES_HPP */