7#include <SDL3_mixer/SDL_mixer.h>
15#define DTTR_MSS_STATUS_DONE 2
16#define DTTR_MSS_STATUS_PLAYING 4
17#define DTTR_MSS_STATUS_STOPPED 8
19#define DTTR_MSS_PREF_DIG_MIXER_CHANNELS 1
20#define DTTR_MSS_PREF_DIG_DEFAULT_VOLUME 2
21#define DTTR_MSS_DEFAULT_MIXER_CHANNELS 64
22#define DTTR_MSS_DEFAULT_LOOP_COUNT 1
23#define DTTR_MSS_DEFAULT_MASTER_GAIN 1.0f
24#define DTTR_MSS_DEFAULT_PAN 64
25#define DTTR_MSS_DEFAULT_VOLUME 127
27#define DTTR_MSS_WAVE_FORMAT_PCM 1
29#define DTTR_MSS_DEFAULT_RATE 22050
30#define DTTR_MSS_MIXER_CHANNELS 2
31#define DTTR_MSS_MIXER_FORMAT SDL_AUDIO_F32
32#define DTTR_MSS_MIXER_RATE DTTR_MSS_DEFAULT_RATE
33#define DTTR_MSS_MAX_VOLUME 127.0f
34#define DTTR_MSS_PREFERENCES_CAPACITY 64
35#define DTTR_MSS_STREAM_HEADROOM_GAIN 1.0f
66 return bits_per_sample == 8 || bits_per_sample == 16;
74 return pan >= 63 ? 128 : pan * 2;
78 const int clamped_pan = pan < 0 ? 0 : (pan > 127 ? 127 : pan);
89 if (mss_loop_count <= 0) {
90 return mss_loop_count == 0 ? -1 : 0;
93 return mss_loop_count - 1;
135 const void *file_image,
162 const void *file_image,
DTTR_Graphics_COM_Direct3DDevice7 void DWORD flags DWORD count
static int preferences[DTTR_MSS_PREFERENCES_CAPACITY]
void dttr_mss_ail_shutdown()
void dttr_mss_core_reset_driver_open_count()
void dttr_mss_sample_stop_all()
void dttr_mss_core_set_desired_spec(const SDL_AudioSpec *spec)
#define DTTR_MSS_PREF_DIG_DEFAULT_VOLUME
void dttr_mss_core_set_master_gain(float gain)
float dttr_mss_core_sample_headroom_gain()
int dttr_mss_ail_sample_status(void *sample)
float dttr_mss_track_frequency_ratio(int rate, int reference_rate)
void dttr_mss_sample_shutdown_all()
void dttr_mss_core_ensure_preferences()
static int dttr_mss_loops_to_sdl(int mss_loop_count)
int dttr_mss_ail_stream_status(void *stream)
float dttr_mss_core_master_gain()
void dttr_mss_ail_start_sample(void *sample)
void dttr_mss_ail_set_sample_pan(void *sample, int pan)
void dttr_mss_ail_waveOutClose(void *driver)
void dttr_mss_ail_set_sample_playback_rate(void *sample, int rate)
void dttr_mss_wave_free(void *ptr)
int dttr_mss_ail_sample_playback_rate(void *sample)
float dttr_mss_core_sample_preemphasis()
void * dttr_mss_ail_open_stream(void *driver, const char *path, int stream_mem)
void dttr_mss_sdl_shutdown()
void dttr_mss_ail_pause_stream(void *stream, int pause)
void dttr_mss_track_apply_pan(MIX_Track *track, int pan)
static void dttr_mss_pan_to_stereo_bytes(int pan, int *left_out, int *right_out)
void dttr_mss_ail_start_stream(void *stream)
#define DTTR_MSS_DEFAULT_VOLUME
uint32_t dttr_mss_wave_read_u32le(const uint8_t *p)
int dttr_mss_core_set_preference(unsigned int preference, int value)
int dttr_mss_ail_startup()
static void dttr_mss_reset_preferences(int *preferences, size_t count)
void dttr_mss_core_decrement_driver_open_count()
SDL_AudioSpec dttr_mss_core_mixer_spec()
bool dttr_mss_core_ensure_mixer()
static int dttr_mss_pan_table_byte(int pan)
void dttr_mss_ail_set_digital_master_volume(void *driver, int volume)
void dttr_mss_track_play(MIX_Track *track, int sdl_loops)
void dttr_mss_ail_set_stream_loop_count(void *stream, int loops)
bool dttr_mss_wave_parse(const void *file_image, mss_wave_info *info)
void dttr_mss_stream_shutdown_all()
float dttr_mss_track_gain(int volume, float master_gain, float headroom)
int dttr_mss_ail_set_preference(unsigned int preference, int value)
bool dttr_mss_sdl_install_hooks(const DTTR_Mods_Context *ctx)
void dttr_mss_ail_set_sample_loop_count(void *sample, int loops)
void dttr_mss_ail_release_sample_handle(void *sample)
static bool dttr_mss_sample_rate_pauses_playback(int rate)
size_t dttr_mss_wave_riff_size(const void *file_image)
void dttr_mss_ail_stop_sample(void *sample)
void dttr_mss_stream_apply_master_gain()
#define DTTR_MSS_PREF_DIG_MIXER_CHANNELS
void dttr_mss_ail_close_stream(void *stream)
void dttr_mss_core_destroy_mixer()
void dttr_mss_core_increment_driver_open_count()
void dttr_mss_ail_init_sample(void *sample)
void dttr_mss_sample_apply_master_gain()
bool dttr_mss_wave_decode_f32(const void *file_image, size_t size, mss_wave_info *info, float **frames_out)
void dttr_mss_sdl_release_hooks()
void * dttr_mss_ail_allocate_sample_handle(void *driver)
#define DTTR_MSS_DEFAULT_MIXER_CHANNELS
uint16_t dttr_mss_wave_read_u16le(const uint8_t *p)
void dttr_mss_ail_set_sample_volume(void *sample, int volume)
bool dttr_mss_core_ensure_mix_initialized()
static bool dttr_mss_wave_bits_supported(uint16_t bits_per_sample)
int dttr_mss_core_get_preference(unsigned int preference)
int dttr_mss_core_driver_open_count()
MIX_Mixer * dttr_mss_core_mixer()
void dttr_mss_ail_set_stream_volume(void *stream, int volume)
int dttr_mss_wave_rate(const mss_wave_info *info)
bool dttr_mss_core_has_driver()
int dttr_mss_track_status(MIX_Track *track, int previous_status)
int dttr_mss_ail_get_preference(unsigned int preference)
int dttr_mss_ail_waveOutOpen(void **driver_out, void *wave_out, int device_id, const void *format)
void dttr_mss_core_reset_preferences()
int dttr_mss_ail_set_sample_file(void *sample, const void *file_image, int block)
void dttr_mss_ail_end_sample(void *sample)