3 Commits

2 changed files with 20 additions and 9 deletions

View File

@@ -32,6 +32,7 @@ int JA_freq {48000};
SDL_AudioFormat JA_format {AUDIO_S16}; SDL_AudioFormat JA_format {AUDIO_S16};
Uint8 JA_channels {2}; Uint8 JA_channels {2};
int JA_volume = 128; int JA_volume = 128;
SDL_AudioDeviceID sdlAudioDevice = 0;
void audioCallback(void * userdata, uint8_t * stream, int len) { void audioCallback(void * userdata, uint8_t * stream, int len) {
SDL_memset(stream, 0, len); SDL_memset(stream, 0, len);
@@ -74,10 +75,17 @@ void JA_Init(const int freq, const SDL_AudioFormat format, const int channels) {
JA_format = format; JA_format = format;
JA_channels = channels; JA_channels = channels;
SDL_AudioSpec audioSpec{JA_freq, JA_format, JA_channels, 0, 1024, 0, 0, audioCallback, NULL}; SDL_AudioSpec audioSpec{JA_freq, JA_format, JA_channels, 0, 1024, 0, 0, audioCallback, NULL};
SDL_AudioDeviceID sdlAudioDevice = SDL_OpenAudioDevice(NULL, 0, &audioSpec, NULL, 0); if (sdlAudioDevice != 0) SDL_CloseAudioDevice(sdlAudioDevice);
sdlAudioDevice = SDL_OpenAudioDevice(NULL, 0, &audioSpec, NULL, 0);
SDL_PauseAudioDevice(sdlAudioDevice, 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) { JA_Music JA_LoadMusic(const char* filename) {
int chan, samplerate; int chan, samplerate;
JA_Music music = new JA_Music_t(); JA_Music music = new JA_Music_t();
@@ -90,6 +98,7 @@ JA_Music JA_LoadMusic(const char* filename) {
Uint8 *buffer = (Uint8*)malloc(fsize + 1); Uint8 *buffer = (Uint8*)malloc(fsize + 1);
fread(buffer, fsize, 1, f); fread(buffer, fsize, 1, f);
fclose(f); fclose(f);
music->samples = stb_vorbis_decode_memory(buffer, fsize, &chan, &samplerate, &music->output); music->samples = stb_vorbis_decode_memory(buffer, fsize, &chan, &samplerate, &music->output);
free(buffer); free(buffer);
// [RZC 28/08/22] Abans el descomprimiem mentre el teniem obert // [RZC 28/08/22] Abans el descomprimiem mentre el teniem obert
@@ -97,13 +106,14 @@ JA_Music JA_LoadMusic(const char* filename) {
SDL_AudioCVT cvt; SDL_AudioCVT cvt;
SDL_BuildAudioCVT(&cvt, AUDIO_S16, chan, samplerate, JA_format, JA_channels, JA_freq); SDL_BuildAudioCVT(&cvt, AUDIO_S16, chan, samplerate, JA_format, JA_channels, JA_freq);
cvt.len = music->samples * chan * 2; if (cvt.needed) {
cvt.buf = (Uint8 *) SDL_malloc(cvt.len * cvt.len_mult); cvt.len = music->samples * chan * 2;
SDL_memcpy(cvt.buf, music->output, cvt.len); cvt.buf = (Uint8 *) SDL_malloc(cvt.len * cvt.len_mult);
SDL_ConvertAudio(&cvt); SDL_memcpy(cvt.buf, music->output, cvt.len);
free(music->output); SDL_ConvertAudio(&cvt);
music->output = (short*)cvt.buf; free(music->output);
music->output = (short*)cvt.buf;
}
music->pos = 0; music->pos = 0;
music->state = JA_MUSIC_STOPPED; music->state = JA_MUSIC_STOPPED;
@@ -144,7 +154,7 @@ JA_Music_state JA_GetMusicState() {
void JA_DeleteMusic(JA_Music music) { void JA_DeleteMusic(JA_Music music) {
if (current_music == music) current_music = NULL; if (current_music == music) current_music = NULL;
SDL_free(music->output); free(music->output);
delete music; delete music;
} }

View File

@@ -8,6 +8,7 @@ typedef struct JA_Sound_t *JA_Sound;
typedef struct JA_Music_t *JA_Music; typedef struct JA_Music_t *JA_Music;
void JA_Init(const int freq, const SDL_AudioFormat format, const int channels); void JA_Init(const int freq, const SDL_AudioFormat format, const int channels);
void JA_Quit();
JA_Music JA_LoadMusic(const char* filename); JA_Music JA_LoadMusic(const char* filename);
void JA_PlayMusic(JA_Music music, const int loop = -1); void JA_PlayMusic(JA_Music music, const int loop = -1);