#ifndef PKE_AUDIO_TYPES_INTERNAL_HPP #define PKE_AUDIO_TYPES_INTERNAL_HPP #include "asset-manager.hpp" #include "pk.h" #include "vendor-glm-include.hpp" #define PKE_AUDIO_MAX_CONCURRENT_COUNT 8 #define PKE_AUDIO_MAX_SPATIAL_DISTANCE 256.f TypeSafeInt_constexpr(pke_audio_flags, uint8_t, 0xFF); TypeSafeInt_constexpr(pke_audio_source, uint8_t, 0x40); const pke_audio_flags pke_audio_flag_none = pke_audio_flags{0x00}; const pke_audio_flags pke_audio_flag_pos_spatial = pke_audio_flags{0x01}; const pke_audio_source pke_audio_source_music = pke_audio_source{0x00}; const pke_audio_source pke_audio_source_ambient = pke_audio_source{0x01}; const pke_audio_source pke_audio_source_voices = pke_audio_source{0x02}; const pke_audio_source pke_audio_source_sfx = pke_audio_source{0x03}; struct pke_audio_obj { AssetHandle handle; // key pke_audio_source source; // key glm::vec3 position_source[PKE_AUDIO_MAX_CONCURRENT_COUNT]; pke_audio_flags flags[PKE_AUDIO_MAX_CONCURRENT_COUNT]; uint32_t play_heads[PKE_AUDIO_MAX_CONCURRENT_COUNT]; uint8_t play_count; }; struct pke_audio_master { pk_arr_t playing_objects; pk_membucket *bkt_transient; float master_volume; float source_volumes[pke_audio_source_T_MAX]; uint32_t channel_count; // mono, stereo, 7.1 std::mutex mtx_buffer; }; extern struct pke_audio_master pke_audio_mstr; #endif /* PKE_AUDIO_TYPES_INTERNAL_HPP */