diff options
| author | realtradam <[email protected]> | 2023-05-11 23:11:40 -0400 |
|---|---|---|
| committer | realtradam <[email protected]> | 2023-05-11 23:11:40 -0400 |
| commit | c90255bb076468aa5f8e82361ebae5765facae47 (patch) | |
| tree | 3793e0716cde638e7e2968c48a5a58b5eb7ede45 /src | |
| parent | 0edab992ab6ee804c223e30ae9347b3072a750be (diff) | |
| download | RodeoKit-c90255bb076468aa5f8e82361ebae5765facae47.tar.gz RodeoKit-c90255bb076468aa5f8e82361ebae5765facae47.zip | |
implemented some more audio functions
Diffstat (limited to 'src')
| -rw-r--r-- | src/audio/rodeo_audio.c | 94 |
1 files changed, 82 insertions, 12 deletions
diff --git a/src/audio/rodeo_audio.c b/src/audio/rodeo_audio.c index 0adb3eb..79cdac4 100644 --- a/src/audio/rodeo_audio.c +++ b/src/audio/rodeo_audio.c @@ -10,10 +10,12 @@ #include "SDL.h" #include "SDL_mixer.h" -static int32_t **irodeo_audio_channelPool; +static uint32_t **irodeo_audio_channelPool; +static uint32_t irodeo_audio_channelPool_num; +static uint32_t irodeo_audio_channelPool_size; void -rodeo_audio_initialize(int32_t num_sound_pools, int32_t size_sound_pools) +rodeo_audio_initialize(uint32_t num_sound_pools, uint32_t size_sound_pools) { if(Mix_OpenAudio(44100, MIX_DEFAULT_FORMAT, 2, 2048) < 0) { @@ -25,20 +27,59 @@ rodeo_audio_initialize(int32_t num_sound_pools, int32_t size_sound_pools) } else { - irodeo_audio_channelPool = malloc((uint32_t)(num_sound_pools * size_sound_pools) * sizeof(int32_t)); - Mix_AllocateChannels(num_sound_pools * size_sound_pools); + irodeo_audio_channelPool_num = num_sound_pools; + irodeo_audio_channelPool_size = size_sound_pools; - int32_t temp_channel_id = 0; - for(int i = 0; i < num_sound_pools; ++i) + void *mem_alloc = + malloc( + ((irodeo_audio_channelPool_num) * sizeof(intptr_t)) + + ((irodeo_audio_channelPool_num * irodeo_audio_channelPool_size) * sizeof(uint32_t) + )); + + irodeo_audio_channelPool = mem_alloc; + + uint32_t *channelPool = (uint32_t*)(irodeo_audio_channelPool + ((irodeo_audio_channelPool_num) * sizeof(intptr_t))); + + { + int32_t allocated_channels = + Mix_AllocateChannels(( + int32_t)irodeo_audio_channelPool_num * (int32_t)irodeo_audio_channelPool_size + ); + + rodeo_log( + rodeo_logLevel_info, + "Number of channels opened: %d", + allocated_channels + ); + } + + uint32_t temp_channel_id = 0; + for(uint32_t i = 0; i < irodeo_audio_channelPool_num; ++i) { - //irodeo_audio_channelPool[i] = - for(int j = 0; j < size_sound_pools; ++j) + irodeo_audio_channelPool[i] = + channelPool + (i * sizeof(uint32_t)); + + for(uint32_t j = 0; j < irodeo_audio_channelPool_size; ++j) { irodeo_audio_channelPool[i][j] = temp_channel_id; temp_channel_id += 1; } + + int32_t assigning_tag_status = Mix_GroupChannel( + (int32_t)temp_channel_id, + (int32_t)i + ); + if(0 == assigning_tag_status) + { + rodeo_log( + rodeo_logLevel_error, + "Failed to assign tag to sound channel. Mix_Error: %s", + Mix_GetError() + ); + } } + // Lets not explode player's ears, yea? rodeo_audio_masterVolume_set(0.5f); } } @@ -46,14 +87,27 @@ rodeo_audio_initialize(int32_t num_sound_pools, int32_t size_sound_pools) void rodeo_audio_deinitialize(void) { + free(irodeo_audio_channelPool); Mix_Quit(); } +uint32_t +irodeo_audio_channelPool_num_get(void) +{ + return irodeo_audio_channelPool_num; +} + +uint32_t +irodeo_audio_channelPool_size_get(void) +{ + return irodeo_audio_channelPool_size; +} + void rodeo_audio_masterVolume_set(float volume_level) { - Mix_MasterVolume((int32_t)(volume_level * 128)); - Mix_VolumeMusic((int32_t)(volume_level * 128)); + Mix_MasterVolume((int32_t)(volume_level * (float)MIX_MAX_VOLUME)); + Mix_VolumeMusic((int32_t)(volume_level * (float)MIX_MAX_VOLUME)); } float @@ -62,6 +116,22 @@ rodeo_audio_masterVolume_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) +{ + for(uint32_t i = 0; i < irodeo_audio_channelPool_size; i += 1) + { + Mix_Volume((int32_t)irodeo_audio_channelPool[channel_pool_id][i], (int32_t)(volume_level * (float)MIX_MAX_VOLUME)); + } +} + +float +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) { @@ -86,7 +156,7 @@ rodeo_audio_sound_destroy(rodeo_audio_sound_t* sound) } void -rodeo_audio_sound_play(rodeo_audio_sound_t *sound, int32_t pool_id) +rodeo_audio_sound_play(rodeo_audio_sound_t *sound, uint32_t channel_pool_id) { - Mix_PlayChannel(pool_id, sound->sdl_sound, 0); + Mix_PlayChannel((int32_t)channel_pool_id, sound->sdl_sound, 0); } |
