summaryrefslogtreecommitdiffhomepage
path: root/src
diff options
context:
space:
mode:
authorrealtradam <[email protected]>2023-05-11 23:11:40 -0400
committerrealtradam <[email protected]>2023-05-11 23:11:40 -0400
commitc90255bb076468aa5f8e82361ebae5765facae47 (patch)
tree3793e0716cde638e7e2968c48a5a58b5eb7ede45 /src
parent0edab992ab6ee804c223e30ae9347b3072a750be (diff)
downloadRodeoKit-c90255bb076468aa5f8e82361ebae5765facae47.tar.gz
RodeoKit-c90255bb076468aa5f8e82361ebae5765facae47.zip
implemented some more audio functions
Diffstat (limited to 'src')
-rw-r--r--src/audio/rodeo_audio.c94
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);
}