10#include <SDL3_mixer/SDL_mixer.h>
44 if (stream == target_stream) {
80 MIX_SetTrackAudio(stream->
track, stream->
audio);
100 }
else if (
streams == stream) {
116 MIX_DestroyTrack(stream->
track);
121 MIX_DestroyAudio(stream->
audio);
130 memset(stream, 0,
sizeof(*stream));
162 sdsmapchars(resolved,
"/",
"\\", 1);
169 "MSS AIL_open_stream(driver=%p, path=\"%s\", stream_mem=%d)",
171 path ? path :
"(null)",
176 DTTR_LOG_TRACE(
"MSS AIL_open_stream -> NULL (invalid path or mixer unavailable)");
189 DTTR_LOG_TRACE(
"MSS AIL_open_stream resolved path=\"%s\"", open_path);
193 if (!stream->
audio) {
195 "MIX_LoadAudio stream failed for %s resolved as %s: %s",
210 if (!stream->
track) {
211 DTTR_LOG_ERROR(
"MIX_CreateTrack stream failed: %s", SDL_GetError());
220 "MSS AIL_open_stream -> stream[%d]=%p track=%p audio=%p",
250 "MSS AIL_start_stream(stream[%d]=%p status=%d loops=%d volume=%d)",
262 "MSS AIL_start_stream stream[%d] played sdl_loops=%d",
289 MIX_PauseTrack(stream->
track);
291 MIX_ResumeTrack(stream->
track);
DTTR_Graphics_COM_DirectDrawSurface7 DWORD flags void NULL
#define DTTR_LOG_TRACE(...)
#define DTTR_LOG_ERROR(...)
bool DTTR_Path_IsWindowsAbsolute(const char *path)
sds dttr_game_data_resolve_media_path(const char *relative)
const char * dttr_game_data_find_data_segment(const char *path)
float dttr_mss_core_master_gain()
bool dttr_mss_core_ensure_mixer()
MIX_Mixer * dttr_mss_core_mixer()
static int dttr_mss_loops_to_sdl(int mss_loop_count)
#define DTTR_MSS_STATUS_PLAYING
#define DTTR_MSS_DEFAULT_VOLUME
void dttr_mss_track_play(MIX_Track *track, int sdl_loops)
#define DTTR_MSS_STREAM_HEADROOM_GAIN
#define DTTR_MSS_STATUS_DONE
float dttr_mss_track_gain(int volume, float master_gain, float headroom)
int dttr_mss_track_status(MIX_Track *track, int previous_status)
#define DTTR_MSS_DEFAULT_LOOP_COUNT
static mss_stream * streams
static void unlink_stream(mss_stream *stream)
void dttr_mss_ail_set_stream_loop_count(void *stream_ptr, int loops)
static sds resolve_stream_path(const char *path)
static mss_stream * find_stream(const void *ptr)
static void apply_stream_track(mss_stream *stream)
static void apply_stream_gain(mss_stream *stream)
static void destroy_stream(mss_stream *stream)
void dttr_mss_ail_set_stream_volume(void *stream_ptr, int volume)
void * dttr_mss_ail_open_stream(void *driver, const char *path, int stream_mem)
void dttr_mss_ail_start_stream(void *stream_ptr)
void dttr_mss_ail_pause_stream(void *stream_ptr, int pause)
void dttr_mss_stream_shutdown_all()
void dttr_mss_ail_close_stream(void *stream_ptr)
void dttr_mss_stream_apply_master_gain()
static void reset_stream_defaults(mss_stream *stream)
static void link_stream(mss_stream *stream)
static int stream_slot(const mss_stream *target_stream)
int dttr_mss_ail_stream_status(void *stream_ptr)
static void destroy_stream_objects(mss_stream *stream)