From debd80f6af90fdc0f9ed40adf3db8f2c15369735 Mon Sep 17 00:00:00 2001 From: Raimon Zamora Date: Thu, 24 Nov 2022 16:10:33 +0100 Subject: [PATCH] - Removed volume per channel - [NEW] JA_SetSoundVolume sets volume for all sound effects - [NEW] JA_SetMusicVolume sets volume for the music - JA_SetVolume works as always: sets volume for both, with sounds volume halved. --- jail_audio.cpp | 29 +++++++++++++++++------------ jail_audio.h | 3 ++- 2 files changed, 19 insertions(+), 13 deletions(-) diff --git a/jail_audio.cpp b/jail_audio.cpp index 38ece31..3e80eaf 100644 --- a/jail_audio.cpp +++ b/jail_audio.cpp @@ -14,7 +14,6 @@ struct JA_Channel_t { JA_Sound sound; int pos {0}; int times {0}; - int volume {64}; JA_Channel_state state { JA_CHANNEL_FREE }; }; @@ -32,18 +31,19 @@ JA_Channel_t channels[JA_MAX_SIMULTANEOUS_CHANNELS]; int JA_freq {48000}; SDL_AudioFormat JA_format {AUDIO_S16}; Uint8 JA_channels {2}; -int JA_volume = 128; +int JA_musicvolume = 128; +int JA_soundvolume = 64; SDL_AudioDeviceID sdlAudioDevice = 0; void audioCallback(void * userdata, uint8_t * stream, int len) { SDL_memset(stream, 0, len); if (current_music != NULL && current_music->state == JA_MUSIC_PLAYING) { const int size = SDL_min(len, current_music->samples*2-current_music->pos); - SDL_MixAudioFormat(stream, (Uint8*)(current_music->output+current_music->pos), AUDIO_S16, size, JA_volume); + SDL_MixAudioFormat(stream, (Uint8*)(current_music->output+current_music->pos), AUDIO_S16, size, JA_musicvolume); current_music->pos += size/2; if (size < len) { if (current_music->times != 0) { - SDL_MixAudioFormat(stream+size, (Uint8*)current_music->output, AUDIO_S16, len-size, JA_volume); + SDL_MixAudioFormat(stream+size, (Uint8*)current_music->output, AUDIO_S16, len-size, JA_musicvolume); current_music->pos = (len-size)/2; if (current_music->times > 0) current_music->times--; } else { @@ -56,11 +56,11 @@ void audioCallback(void * userdata, uint8_t * stream, int len) { for (int i = 0; i < JA_MAX_SIMULTANEOUS_CHANNELS; i++) { if (channels[i].state == JA_CHANNEL_PLAYING) { const int size = SDL_min(len, channels[i].sound->length - channels[i].pos); - SDL_MixAudioFormat(stream, channels[i].sound->buffer + channels[i].pos, AUDIO_S16, size, channels[i].volume); + SDL_MixAudioFormat(stream, channels[i].sound->buffer + channels[i].pos, AUDIO_S16, size, JA_soundvolume); channels[i].pos += size; if (size < len) { if (channels[i].times != 0) { - SDL_MixAudioFormat(stream + size, channels[i].sound->buffer, AUDIO_S16, len-size, channels[i].volume); + SDL_MixAudioFormat(stream + size, channels[i].sound->buffer, AUDIO_S16, len-size, JA_soundvolume); channels[i].pos = len-size; if (channels[i].times > 0) channels[i].times--; } else { @@ -244,13 +244,18 @@ JA_Channel_state JA_GetChannelState(const int channel) { return channels[channel].state; } -int JA_SetChannelVolume(const int channel, int volume) { - if (channel < 0 || channel >= JA_MAX_SIMULTANEOUS_CHANNELS) return JA_CHANNEL_INVALID; - channels[channel].volume = volume > 128 ? 128 : volume < 0 ? 0 : volume; - return channels[channel].volume; +int JA_SetSoundVolume(int volume) { + JA_soundvolume = volume > 128 ? 128 : volume < 0 ? 0 : volume; + return JA_soundvolume; +} + +int JA_SetMusicVolume(int volume) { + JA_musicvolume = volume > 128 ? 128 : volume < 0 ? 0 : volume; + return JA_musicvolume; } int JA_SetVolume(int volume) { - JA_volume = volume > 128 ? 128 : volume < 0 ? 0 : volume; - return JA_volume; + JA_musicvolume = volume > 128 ? 128 : volume < 0 ? 0 : volume; + JA_soundvolume = JA_musicvolume/2; + return JA_musicvolume; } diff --git a/jail_audio.h b/jail_audio.h index d7e09e5..c4e115a 100644 --- a/jail_audio.h +++ b/jail_audio.h @@ -16,6 +16,7 @@ void JA_PauseMusic(); void JA_ResumeMusic(); void JA_StopMusic(); int JA_SetVolume(int volume); +int JA_SetMusicVolume(int volume); JA_Music_state JA_GetMusicState(); void JA_DeleteMusic(JA_Music music); @@ -23,10 +24,10 @@ JA_Sound JA_NewSound(Uint8* buffer, Uint32 length); JA_Sound JA_LoadSound(const char* filename); int JA_PlaySound(JA_Sound sound, const int loop = 0); void JA_DeleteSound(JA_Sound sound); +int JA_SetSoundVolume(int volume); void JA_PauseChannel(const int channel); void JA_ResumeChannel(const int channel); void JA_StopChannel(const int channel); JA_Channel_state JA_GetChannelState(const int channel); -int JA_SetChannelVolume(const int channel, int volume);