From a42641653fa73976517607c0aee9f54eed4d2c46 Mon Sep 17 00:00:00 2001 From: Raimon Zamora Date: Fri, 13 Jan 2023 15:51:00 +0100 Subject: [PATCH] - Remove last remnants of JailAudio --- jail_audio.cpp | 259 ------------------------------------------------- jail_audio.h | 30 ------ 2 files changed, 289 deletions(-) delete mode 100644 jail_audio.cpp delete mode 100644 jail_audio.h diff --git a/jail_audio.cpp b/jail_audio.cpp deleted file mode 100644 index eaa2fd9..0000000 --- a/jail_audio.cpp +++ /dev/null @@ -1,259 +0,0 @@ -#include "jail_audio.h" -#include "stb_vorbis.c" -#include -#include -#include "jfile.h" - -#define JA_MAX_SIMULTANEOUS_CHANNELS 5 - -struct JA_Sound_t { - Uint32 length {0}; - Uint8* buffer {NULL}; -}; - -struct JA_Channel_t { - JA_Sound sound; - int pos {0}; - int times {0}; - JA_Channel_state state { JA_CHANNEL_FREE }; -}; - -struct JA_Music_t { - int samples {0}; - int pos {0}; - int times {0}; - short* output {NULL}; - JA_Music_state state {JA_MUSIC_INVALID}; -}; - -JA_Music current_music{NULL}; -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; -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); - 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); - current_music->pos = (len-size)/2; - if (current_music->times > 0) current_music->times--; - } else { - current_music->pos = 0; - current_music->state = JA_MUSIC_STOPPED; - } - } - } - // Mixar els channels mi amol - 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, JA_volume/2); - channels[i].pos += size; - if (size < len) { - if (channels[i].times != 0) { - SDL_MixAudioFormat(stream + size, channels[i].sound->buffer, AUDIO_S16, len-size, JA_volume/2); - channels[i].pos = len-size; - if (channels[i].times > 0) channels[i].times--; - } else { - JA_StopChannel(i); - } - } - } - } -} - -void JA_Init(const int freq, const SDL_AudioFormat format, const int channels) { - JA_freq = freq; - JA_format = format; - JA_channels = channels; - SDL_AudioSpec audioSpec{JA_freq, JA_format, JA_channels, 0, 1024, 0, 0, audioCallback, NULL}; - if (sdlAudioDevice != 0) SDL_CloseAudioDevice(sdlAudioDevice); - sdlAudioDevice = SDL_OpenAudioDevice(NULL, 0, &audioSpec, NULL, 0); - SDL_PauseAudioDevice(sdlAudioDevice, 0); -} - -void JA_Quit() { - SDL_PauseAudioDevice(sdlAudioDevice, 1); - if (sdlAudioDevice != 0) SDL_CloseAudioDevice(sdlAudioDevice); - sdlAudioDevice = 0; -} - -JA_Music JA_LoadMusic(const char* filename) { - int chan, samplerate; - JA_Music music = new JA_Music_t(); - - int fsize; - Uint8 *buffer = (Uint8*)file_getfilebuffer(filename, fsize); - - // [RZC 28/08/22] Carreguem primer el arxiu en memòria i després el descomprimim. Es algo més rapid. - /* - FILE *f = fopen(filename, "rb"); - fseek(f, 0, SEEK_END); - long fsize = ftell(f); - fseek(f, 0, SEEK_SET); - Uint8 *buffer = (Uint8*)malloc(fsize + 1); - fread(buffer, fsize, 1, f); - fclose(f); - */ - - music->samples = stb_vorbis_decode_memory(buffer, fsize, &chan, &samplerate, &music->output); - free(buffer); - // [RZC 28/08/22] Abans el descomprimiem mentre el teniem obert -// music->samples = stb_vorbis_decode_filename(filename, &chan, &samplerate, &music->output); - - SDL_AudioCVT cvt; - SDL_BuildAudioCVT(&cvt, AUDIO_S16, chan, samplerate, JA_format, JA_channels, JA_freq); - if (cvt.needed) { - cvt.len = music->samples * chan * 2; - cvt.buf = (Uint8 *) SDL_malloc(cvt.len * cvt.len_mult); - SDL_memcpy(cvt.buf, music->output, cvt.len); - SDL_ConvertAudio(&cvt); - free(music->output); - music->output = (short*)cvt.buf; - } - music->pos = 0; - music->state = JA_MUSIC_STOPPED; - - return music; -} - -void JA_PlayMusic(JA_Music music, const int loop) { - if (current_music != NULL) { - current_music->pos = 0; - current_music->state = JA_MUSIC_STOPPED; - } - current_music = music; - current_music->pos = 0; - current_music->state = JA_MUSIC_PLAYING; - current_music->times = loop; -} - -void JA_PauseMusic() { - if (current_music == NULL || current_music->state == JA_MUSIC_INVALID) return; - current_music->state = JA_MUSIC_PAUSED; -} - -void JA_ResumeMusic() { - if (current_music == NULL || current_music->state == JA_MUSIC_INVALID) return; - current_music->state = JA_MUSIC_PLAYING; -} - -void JA_StopMusic() { - if (current_music == NULL || current_music->state == JA_MUSIC_INVALID) return; - current_music->pos = 0; - current_music->state = JA_MUSIC_STOPPED; -} - -JA_Music_state JA_GetMusicState() { - if (current_music == NULL) return JA_MUSIC_INVALID; - return current_music->state; -} - -void JA_DeleteMusic(JA_Music music) { - if (current_music == music) current_music = NULL; - free(music->output); - delete music; -} - -JA_Sound JA_NewSound(Uint8* buffer, Uint32 length) { - JA_Sound sound = new JA_Sound_t(); - sound->buffer = buffer; - sound->length = length; - return sound; -} - -JA_Sound JA_LoadSound(const char* filename) { - JA_Sound sound = new JA_Sound_t(); - SDL_AudioSpec wavSpec; - - //SDL_LoadWAV(filename, &wavSpec, &sound->buffer, &sound->length); - int size; - char *buffer = file_getfilebuffer(filename, size); - SDL_LoadWAV_RW(SDL_RWFromMem(buffer, size),1, &wavSpec, &sound->buffer, &sound->length); - free(buffer); - - SDL_AudioCVT cvt; - SDL_BuildAudioCVT(&cvt, wavSpec.format, wavSpec.channels, wavSpec.freq, JA_format, JA_channels, JA_freq); - cvt.len = sound->length; - cvt.buf = (Uint8 *) SDL_malloc(cvt.len * cvt.len_mult); - SDL_memcpy(cvt.buf, sound->buffer, sound->length); - SDL_ConvertAudio(&cvt); - SDL_FreeWAV(sound->buffer); - sound->buffer = cvt.buf; - sound->length = cvt.len_cvt; - - return sound; -} - -int JA_PlaySound(JA_Sound sound, const int loop) { - int channel = 0; - while (channel < JA_MAX_SIMULTANEOUS_CHANNELS && channels[channel].state != JA_CHANNEL_FREE) { channel++; } - if (channel == JA_MAX_SIMULTANEOUS_CHANNELS) channel = 0; - - channels[channel].sound = sound; - channels[channel].times = loop; - channels[channel].pos = 0; - channels[channel].state = JA_CHANNEL_PLAYING; - return channel; -} - -void JA_DeleteSound(JA_Sound sound) { - for (int i = 0; i < JA_MAX_SIMULTANEOUS_CHANNELS; i++) { - if (channels[i].sound == sound) JA_StopChannel(i); - } - SDL_free(sound->buffer); - delete sound; -} - -void JA_PauseChannel(const int channel) { - if (channel == -1) { - for (int i = 0; i < JA_MAX_SIMULTANEOUS_CHANNELS; i++) { - if (channels[i].state == JA_CHANNEL_PLAYING) channels[i].state = JA_CHANNEL_PAUSED; - } - } else if (channel >= 0 && channel < JA_MAX_SIMULTANEOUS_CHANNELS) { - if (channels[channel].state == JA_CHANNEL_PLAYING) channels[channel].state = JA_CHANNEL_PAUSED; - } -} - -void JA_ResumeChannel(const int channel) { - if (channel == -1) { - for (int i = 0; i < JA_MAX_SIMULTANEOUS_CHANNELS; i++) { - if (channels[i].state == JA_CHANNEL_PAUSED) channels[i].state = JA_CHANNEL_PLAYING; - } - } else if (channel >= 0 && channel < JA_MAX_SIMULTANEOUS_CHANNELS) { - if (channels[channel].state == JA_CHANNEL_PAUSED) channels[channel].state = JA_CHANNEL_PLAYING; - } -} - -void JA_StopChannel(const int channel) { - if (channel == -1) { - for (int i = 0; i < JA_MAX_SIMULTANEOUS_CHANNELS; i++) { - channels[i].state = JA_CHANNEL_FREE; - channels[i].pos = 0; - channels[i].sound = NULL; - } - } else if (channel >= 0 && channel < JA_MAX_SIMULTANEOUS_CHANNELS) { - channels[channel].state = JA_CHANNEL_FREE; - channels[channel].pos = 0; - channels[channel].sound = NULL; - } -} - -JA_Channel_state JA_GetChannelState(const int channel) { - if (channel < 0 || channel >= JA_MAX_SIMULTANEOUS_CHANNELS) return JA_CHANNEL_INVALID; - return channels[channel].state; -} - -int JA_SetVolume(int volume) { - JA_volume = volume > 128 ? 128 : volume < 0 ? 0 : volume; - return JA_volume; -} \ No newline at end of file diff --git a/jail_audio.h b/jail_audio.h deleted file mode 100644 index 7d03400..0000000 --- a/jail_audio.h +++ /dev/null @@ -1,30 +0,0 @@ -#pragma once -#include - -enum JA_Channel_state { JA_CHANNEL_INVALID, JA_CHANNEL_FREE, JA_CHANNEL_PLAYING, JA_CHANNEL_PAUSED }; -enum JA_Music_state { JA_MUSIC_INVALID, JA_MUSIC_PLAYING, JA_MUSIC_PAUSED, JA_MUSIC_STOPPED }; - -typedef struct JA_Sound_t *JA_Sound; -typedef struct JA_Music_t *JA_Music; - -void JA_Init(const int freq, const SDL_AudioFormat format, const int channels); -void JA_Quit(); - -JA_Music JA_LoadMusic(const char* filename); -void JA_PlayMusic(JA_Music music, const int loop = -1); -void JA_PauseMusic(); -void JA_ResumeMusic(); -void JA_StopMusic(); -JA_Music_state JA_GetMusicState(); -void JA_DeleteMusic(JA_Music music); - -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_PauseChannel(const int channel); -void JA_ResumeChannel(const int channel); -void JA_StopChannel(const int channel); -JA_Channel_state JA_GetChannelState(const int channel); -void JA_DeleteSound(JA_Sound sound); - -int JA_SetVolume(int volume); \ No newline at end of file