#ifndef JNR_AUDIO_H #define JNR_AUDIO_H #include #include "util/vec2.h" typedef struct Sound { void *chunk; /* Mix_Chunk* */ } Sound; typedef struct Music { void *music; /* Mix_Music* */ } Music; bool audio_init(void); Sound audio_load_sound(const char *path); Music audio_load_music(const char *path); void audio_play_sound(Sound s, int volume); /* 0-128, fire and forget */ void audio_play_music(Music m, bool loop); void audio_stop_music(void); void audio_free_music(Music *m); void audio_set_music_volume(int volume); /* 0-128 */ void audio_shutdown(void); /* ── Looping sounds ────────────────────────────── */ /* Play a sound on loop, returns the channel number (or -1 on failure). * Use audio_stop_channel() to stop it later. */ int audio_play_sound_loop(Sound s, int volume); /* Stop a specific channel (from audio_play_sound_loop). No-op if ch < 0. */ void audio_stop_channel(int ch); /* ── Positional / spatial audio ────────────────── */ /* Set the listener position (call once per frame, typically from camera center) */ void audio_set_listener(Vec2 pos); /* Play a sound at a world position. Volume is attenuated by distance from the * listener and stereo-panned based on horizontal offset. Sounds beyond * max_dist are inaudible. Pass max_dist <= 0 for a sensible default. */ void audio_play_sound_at(Sound s, int base_volume, Vec2 world_pos, float max_dist); #endif /* JNR_AUDIO_H */