diff options
| author | realtradam <[email protected]> | 2023-05-09 09:43:34 -0400 |
|---|---|---|
| committer | realtradam <[email protected]> | 2023-05-09 09:43:34 -0400 |
| commit | a4314fafa69cacaa247277b7da8a647c34c4ede3 (patch) | |
| tree | a6f142641f8a99a135bf84bc0783222b02ed8d76 /src/audio/rodeo_audio.c | |
| parent | 2709a71f46acb65535a8ee871a352d2ff1fb82df (diff) | |
| download | RodeoKit-a4314fafa69cacaa247277b7da8a647c34c4ede3.tar.gz RodeoKit-a4314fafa69cacaa247277b7da8a647c34c4ede3.zip | |
audio progress
Diffstat (limited to 'src/audio/rodeo_audio.c')
| -rw-r--r-- | src/audio/rodeo_audio.c | 55 |
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); } |
