summaryrefslogtreecommitdiffhomepage
path: root/src/audio/rodeo_audio.c
diff options
context:
space:
mode:
authorrealtradam <[email protected]>2023-05-09 09:43:34 -0400
committerrealtradam <[email protected]>2023-05-09 09:43:34 -0400
commita4314fafa69cacaa247277b7da8a647c34c4ede3 (patch)
treea6f142641f8a99a135bf84bc0783222b02ed8d76 /src/audio/rodeo_audio.c
parent2709a71f46acb65535a8ee871a352d2ff1fb82df (diff)
downloadRodeoKit-a4314fafa69cacaa247277b7da8a647c34c4ede3.tar.gz
RodeoKit-a4314fafa69cacaa247277b7da8a647c34c4ede3.zip
audio progress
Diffstat (limited to 'src/audio/rodeo_audio.c')
-rw-r--r--src/audio/rodeo_audio.c55
1 files changed, 45 insertions, 10 deletions
diff --git a/src/audio/rodeo_audio.c b/src/audio/rodeo_audio.c
index 34d0f33..0adb3eb 100644
--- a/src/audio/rodeo_audio.c
+++ b/src/audio/rodeo_audio.c
@@ -3,15 +3,17 @@
// public
#include "rodeo/audio.h"
#include "rodeo/log.h"
+// private
+#include "audio/rodeo_audio_t.h"
// -- external --
#include "SDL.h"
#include "SDL_mixer.h"
-Mix_Chunk *sample_sound = NULL;
+static int32_t **irodeo_audio_channelPool;
void
-rodeo_audio_initialize(void)
+rodeo_audio_initialize(int32_t num_sound_pools, int32_t size_sound_pools)
{
if(Mix_OpenAudio(44100, MIX_DEFAULT_FORMAT, 2, 2048) < 0)
{
@@ -21,6 +23,24 @@ rodeo_audio_initialize(void)
SDL_GetError()
);
}
+ else
+ {
+ irodeo_audio_channelPool = malloc((uint32_t)(num_sound_pools * size_sound_pools) * sizeof(int32_t));
+ Mix_AllocateChannels(num_sound_pools * size_sound_pools);
+
+ int32_t temp_channel_id = 0;
+ for(int i = 0; i < num_sound_pools; ++i)
+ {
+ //irodeo_audio_channelPool[i] =
+ for(int j = 0; j < size_sound_pools; ++j)
+ {
+ irodeo_audio_channelPool[i][j] = temp_channel_id;
+ temp_channel_id += 1;
+ }
+ }
+
+ rodeo_audio_masterVolume_set(0.5f);
+ }
}
void
@@ -30,10 +50,24 @@ rodeo_audio_deinitialize(void)
}
void
-rodeo_audio_loadSample(void)
+rodeo_audio_masterVolume_set(float volume_level)
+{
+ Mix_MasterVolume((int32_t)(volume_level * 128));
+ Mix_VolumeMusic((int32_t)(volume_level * 128));
+}
+
+float
+rodeo_audio_masterVolume_get(void)
+{
+ return ((float)Mix_MasterVolume(-1)) / (float)MIX_MAX_VOLUME;
+}
+
+rodeo_audio_sound_t*
+rodeo_audio_sound_create_from_path(cstr path)
{
- sample_sound = Mix_LoadWAV("assets/sample.wav");
- if(NULL == sample_sound)
+ rodeo_audio_sound_t *sample_sound = malloc(sizeof(rodeo_audio_sound_t));
+ sample_sound->sdl_sound = Mix_LoadWAV(cstr_str(&path));
+ if(NULL == sample_sound->sdl_sound)
{
rodeo_log(
rodeo_logLevel_error,
@@ -41,17 +75,18 @@ rodeo_audio_loadSample(void)
Mix_GetError()
);
}
+ return sample_sound;
}
void
-rodeo_audio_freeSample(void)
+rodeo_audio_sound_destroy(rodeo_audio_sound_t* sound)
{
- Mix_FreeChunk(sample_sound);
- sample_sound = NULL;
+ Mix_FreeChunk(sound->sdl_sound);
+ free(sound);
}
void
-rodeo_audio_playSample(void)
+rodeo_audio_sound_play(rodeo_audio_sound_t *sound, int32_t pool_id)
{
- Mix_PlayChannel(-1, sample_sound, 0);
+ Mix_PlayChannel(pool_id, sound->sdl_sound, 0);
}