35 AudioSystem()
noexcept;
36 ~AudioSystem()
noexcept;
39 static auto get()
noexcept -> AudioSystem&;
49 void unloadBank(FMOD_STUDIO_BANK*)
const;
51 void updateListenerAttributes(
52 int id, glm::vec3 pos, glm::vec3 velocity, glm::vec3 forward, glm::vec3 up, std::optional<glm::vec3> attenuation_override
54 void updateListenerWeight(
int id,
float weight);
55 void setListenerPosition(
int index, glm::vec3 pos);
57 auto listenerPositions()
const ->
const std::vector<glm::vec3>&;
63 void playEvent(std::string_view guid_str);
64 void stopEvent(std::string_view guid_str,
bool allow_fadeout);
65 void pauseEvent(std::string_view guid_str,
bool value);
66 void setParameter(std::string_view guid_str, std::string_view name,
float value);
67 void setParameter(std::string_view guid_str, std::string_view name,
bool value);
68 void setVolume(std::string_view guid_str,
float volume);
69 void setPitch(std::string_view guid_str,
float pitch);
71 auto isEventPlaying(std::string_view guid_str) -> bool;
74 void setVcaVolume(std::string_view guid_str,
float volume);
75 void setBusVolume(std::string_view guid_str,
float volume);
76 void setPortVolume(std::string_view guid_str,
float volume);
79 void setSnapshotIntensity(std::string_view guid_str,
float intensity);
80 void setSnapshotEnabled(std::string_view guid_str,
bool enabled);
83 auto playEvent3D(std::string_view guid_str) -> uint64_t;
84 void stopEvent3D(uint64_t instance_id,
bool allow_fadeout);
86 uint64_t instance_id,
const glm::vec3& pos,
const glm::vec3& vel,
const glm::vec3& fwd,
const glm::vec3& up
88 void set3DMinMaxDistance(uint64_t instance_id,
float min_distance,
float max_distance);
89 void pauseEvent(uint64_t instance_id,
bool value);
90 void setParameter(uint64_t instance_id, std::string_view name,
float value);
91 void setParameter(uint64_t instance_id, std::string_view name,
bool value);
92 void setVolume(uint64_t instance_id,
float volume);
93 void setPitch(uint64_t instance_id,
float pitch);
95 auto isEventPlaying(uint64_t instance_id) -> bool;
96 void set3DOverrideAttenuation(uint64_t instance_id,
float min_distance,
float max_distance);
98 void keyOffEvent(uint64_t instance_id);
100 auto getTimelinePosition(uint64_t instance_id) -> int;
101 void setTimelinePosition(uint64_t instance_id,
int ms);
102 void setParameterByID(uint64_t instance_id, FMOD_STUDIO_PARAMETER_ID
id,
float value);
104 auto getPlaybackState(uint64_t instance_id) -> FMOD_STUDIO_PLAYBACK_STATE;
107 auto getRawInstance(uint64_t instance_id) -> FMOD_STUDIO_EVENTINSTANCE*;
110 static inline AudioSystem* instance =
nullptr;
111 FMOD_STUDIO_SYSTEM* m_system =
nullptr;
112 FMOD_SYSTEM* m_core_system =
nullptr;
116 auto loadMasterBanks() -> bool;
118 bool m_master_banks_loaded =
false;
120 bool m_retry_master_banks =
false;
124 auto loadBankData(
const std::vector<uint8_t>& data)
const -> FMOD_STUDIO_BANK*;
126 std::unordered_map<std::string, FMOD_STUDIO_EVENTINSTANCE*> m_active_instances;
127 auto getOrCreateInstance(std::string_view guid_str) -> FMOD_STUDIO_EVENTINSTANCE*;
129 void keepOnListener(FMOD_STUDIO_EVENTINSTANCE* inst)
const;
131 uint64_t m_next_instance_id = 1;
132 std::unordered_map<uint64_t, FMOD_STUDIO_EVENTINSTANCE*> m_instances_3d;
134 std::unordered_map<std::string, FMOD_STUDIO_EVENTINSTANCE*>
135 m_snapshot_instances;
137 std::vector<glm::vec3> m_listener_positions;
138 std::vector<toast::Box<toast::AudioListener>> m_listeners;
139 std::mutex m_listeners_mutex;
141 std::vector<toast::Box<toast::AudioVolume>> m_volumes;
142 std::mutex m_volumes_mutex;