From e81eb2369cbf21ca66fc49d2d09aab270131ea87 Mon Sep 17 00:00:00 2001 From: realtradam Date: Fri, 12 May 2023 14:24:58 -0400 Subject: finish initial audio system --- src/audio/rodeo_audio.c | 85 +++++++++++++++++++++++++++++++++++++++++------ src/audio/rodeo_audio_t.h | 5 +++ 2 files changed, 80 insertions(+), 10 deletions(-) (limited to 'src/audio') diff --git a/src/audio/rodeo_audio.c b/src/audio/rodeo_audio.c index 79cdac4..25b5106 100644 --- a/src/audio/rodeo_audio.c +++ b/src/audio/rodeo_audio.c @@ -11,11 +11,13 @@ #include "SDL_mixer.h" static uint32_t **irodeo_audio_channelPool; -static uint32_t irodeo_audio_channelPool_num; -static uint32_t irodeo_audio_channelPool_size; +//static uint32_t irodeo_audio_channelPool_num; +//static uint32_t irodeo_audio_channelPool_size; +//void +//rodeo_audio_initialize(uint32_t num_sound_pools, uint32_t size_sound_pools) void -rodeo_audio_initialize(uint32_t num_sound_pools, uint32_t size_sound_pools) +rodeo_audio_initialize(uint32_t channels) { if(Mix_OpenAudio(44100, MIX_DEFAULT_FORMAT, 2, 2048) < 0) { @@ -27,8 +29,10 @@ rodeo_audio_initialize(uint32_t num_sound_pools, uint32_t size_sound_pools) } else { - irodeo_audio_channelPool_num = num_sound_pools; - irodeo_audio_channelPool_size = size_sound_pools; + Mix_AllocateChannels((int32_t)channels); + /* + irodeo_audio_channelPool_num = 1; //num_sound_pools; + irodeo_audio_channelPool_size = channels; //size_sound_pools; void *mem_alloc = malloc( @@ -78,9 +82,10 @@ rodeo_audio_initialize(uint32_t num_sound_pools, uint32_t size_sound_pools) ); } } + */ // Lets not explode player's ears, yea? - rodeo_audio_masterVolume_set(0.5f); + rodeo_audio_master_volume_set(0.5f); } } @@ -91,6 +96,7 @@ rodeo_audio_deinitialize(void) Mix_Quit(); } +/* uint32_t irodeo_audio_channelPool_num_get(void) { @@ -102,20 +108,22 @@ irodeo_audio_channelPool_size_get(void) { return irodeo_audio_channelPool_size; } +*/ void -rodeo_audio_masterVolume_set(float volume_level) +rodeo_audio_master_volume_set(float volume_level) { Mix_MasterVolume((int32_t)(volume_level * (float)MIX_MAX_VOLUME)); Mix_VolumeMusic((int32_t)(volume_level * (float)MIX_MAX_VOLUME)); } float -rodeo_audio_masterVolume_get(void) +rodeo_audio_master_volume_get(void) { return ((float)Mix_MasterVolume(-1)) / (float)MIX_MAX_VOLUME; } +/* void rodeo_audio_channelPool_volume_set(uint32_t channel_pool_id, float volume_level) { @@ -131,6 +139,7 @@ rodeo_audio_channelPool_volume_get(uint32_t channel_pool_id) return ((float)Mix_Volume((int32_t)channel_pool_id, -1) / (float)MIX_MAX_VOLUME); } +*/ rodeo_audio_sound_t* rodeo_audio_sound_create_from_path(cstr path) @@ -155,8 +164,64 @@ rodeo_audio_sound_destroy(rodeo_audio_sound_t* sound) free(sound); } +rodeo_audio_music_t* +rodeo_audio_music_create_from_path(cstr path) +{ + rodeo_audio_music_t *sample_music = malloc(sizeof(rodeo_audio_music_t)); + sample_music->sdl_music = Mix_LoadMUS(cstr_str(&path)); + if(NULL == sample_music->sdl_music) + { + rodeo_log( + rodeo_logLevel_error, + "Failed to load music. Mix_Error: %s", + Mix_GetError() + ); + } + return sample_music; +} + +void +rodeo_audio_music_destroy(rodeo_audio_music_t* music) +{ + Mix_FreeMusic(music->sdl_music); + free(music); +} + + +void +rodeo_audio_sound_play(rodeo_audio_sound_t *sound) //, uint32_t channel_pool_id) +{ + Mix_PlayChannel(-1, sound->sdl_sound, 0); +} + +void +rodeo_audio_music_play(rodeo_audio_music_t *music) //, uint32_t channel_pool_id) +{ + rodeo_audio_music_stop(); + Mix_PlayMusic(music->sdl_music, 0); +} + +void +rodeo_audio_music_play_fadeIn(rodeo_audio_music_t *music, uint32_t fade_duration_milliseconds) +{ + rodeo_audio_music_stop(); + Mix_FadeInMusic(music->sdl_music, 0, (int32_t)fade_duration_milliseconds); +} + +void +rodeo_audio_music_stop(void) +{ + Mix_HaltMusic(); +} + +bool +rodeo_audio_music_isPlaying(void) +{ + return Mix_PlayingMusic(); +} + void -rodeo_audio_sound_play(rodeo_audio_sound_t *sound, uint32_t channel_pool_id) +rodeo_audio_music_stop_fadeOut(uint32_t fade_duration_milliseconds) { - Mix_PlayChannel((int32_t)channel_pool_id, sound->sdl_sound, 0); + Mix_FadeOutMusic((int32_t)fade_duration_milliseconds); } diff --git a/src/audio/rodeo_audio_t.h b/src/audio/rodeo_audio_t.h index 6e3ce68..b762cf3 100644 --- a/src/audio/rodeo_audio_t.h +++ b/src/audio/rodeo_audio_t.h @@ -9,3 +9,8 @@ rodeo_audio_sound_t Mix_Chunk *sdl_sound; }; +struct +rodeo_audio_music_t +{ + Mix_Music *sdl_music; +}; -- cgit v1.2.3