24 SDL_AudioDeviceID *devices = SDL_GetAudioPlaybackDevices(&
count);
31 void *audio_driver =
NULL;
39 if (stop_all_samples) {
56 DTTR_LOG_ERROR(
"Audio device removed, shutting down audio subsystem");
57 int32_t shutdown_result = 0;
70 DTTR_LOG_INFO(
"Audio device connected, reinitializing audio");
83 DTTR_LOG_ERROR(
"No audio playback devices found, skipping audio init");
112 switch (
event->type) {
113 case SDL_EVENT_AUDIO_DEVICE_REMOVED:
116 case SDL_EVENT_AUDIO_DEVICE_ADDED:
126 if (!SDL_InitSubSystem(SDL_INIT_AUDIO)) {
127 DTTR_LOG_ERROR(
"SDL_InitSubSystem(SDL_INIT_AUDIO) failed: %s", SDL_GetError());
158 return imports_ok && patches_ok;
static DTTR_Core_PatchGroup * audio_patch_group
static int32_t run_guarded_audio_hook(int32_t(*original)(), bool stop_all_samples)
static int32_t audio_stop_all_samples_detour()
static DTTR_PCDOGS_F_Audio_StopAllSamples_proto audio_stop_all_samples_original
static DTTR_PCDOGS_F_Audio_InitializeSystem_proto audio_init_system_original
static int32_t audio_stop_all_sounds_detour()
bool dttr_audio_init(const DTTR_Mods_Context *ctx)
static bool has_audio_driver()
static int32_t audio_init_system()
void dttr_audio_handle_device_event(const SDL_Event *event)
static int32_t audio_init_level_audio_detour()
static DTTR_PCDOGS_F_Audio_StopAllSounds_proto audio_stop_all_sounds_original
static void handle_audio_device_added()
static void handle_audio_device_removed()
void dttr_audio_cleanup(const DTTR_Mods_Context *)
static int32_t audio_init_system_detour()
static DTTR_PCDOGS_F_Audio_InitializeLevelAudio_proto audio_init_level_audio_original
static bool has_playback_devices()
DTTR_Graphics_COM_Direct3DDevice7 void DWORD flags DWORD count
void void DWORD HANDLE event
DTTR_Graphics_COM_DirectDrawSurface7 DWORD flags void NULL
DTTR_Result DTTR_Core_PatchGroupRelease(DTTR_Core_PatchGroup **group)
#define DTTR_ARRAY_COUNT(array_)
struct DTTR_Core_PatchGroup DTTR_Core_PatchGroup
#define DTTR_LOG_INFO(...)
#define DTTR_LOG_ERROR(...)
union SDL_Event SDL_Event
DTTR_PCDOGS_API const struct dttr_pcdogs_function_accessor_Audio_InitializeLevelAudio *const DTTR_PCDOGS_F_Audio_InitializeLevelAudio
Accessor object for Audio_InitializeLevelAudio.
DTTR_PCDOGS_API const struct dttr_pcdogs_function_accessor_Audio_ShutdownSystem *const DTTR_PCDOGS_F_Audio_ShutdownSystem
Accessor object for Audio_ShutdownSystem.
DTTR_PCDOGS_API const struct dttr_pcdogs_function_accessor_Audio_StopAllSounds *const DTTR_PCDOGS_F_Audio_StopAllSounds
Accessor object for Audio_StopAllSounds.
int32_t(* DTTR_PCDOGS_F_Audio_StopAllSounds_proto)()
Stops all currently playing game sounds through the active Miles digital driver.
int32_t(* DTTR_PCDOGS_F_Audio_StopAllSamples_proto)()
Stops all active Miles sample playback slots while leaving the audio system initialized.
DTTR_PCDOGS_API const struct dttr_pcdogs_function_accessor_Audio_StopAllSamples *const DTTR_PCDOGS_F_Audio_StopAllSamples
Accessor object for Audio_StopAllSamples.
int32_t(* DTTR_PCDOGS_F_Audio_InitializeLevelAudio_proto)()
Initializes level audio playback state using the active Miles digital driver.
int32_t(* DTTR_PCDOGS_F_Audio_InitializeSystem_proto)()
DTTR_PCDOGS_API const struct DTTR_PCDOGS_D_Audio_InitializeSystem_DigitalDriver_type *const DTTR_PCDOGS_D_Audio_InitializeSystem_DigitalDriver
DTTR_PCDOGS_API const struct dttr_pcdogs_function_accessor_Audio_InitializeSystem *const DTTR_PCDOGS_F_Audio_InitializeSystem
Accessor object for Audio_InitializeSystem.
const DTTR_Core_Context * dttr_sidecar_runtime_context()
bool dttr_mss_core_has_driver()
void dttr_mss_sample_stop_all()
void dttr_mss_sdl_shutdown()
bool dttr_mss_sdl_install_hooks(const DTTR_Mods_Context *ctx)
void dttr_mss_sdl_release_hooks()
static bool dttr_sidecar_install_pcdogs_patch_group(const DTTR_Mods_Context *ctx, const char *label, const DTTR_PCDOGS_T_Patch_Spec *patches, size_t patch_count, DTTR_Core_PatchGroup **group)