107 lines
2.2 KiB
C++
107 lines
2.2 KiB
C++
#ifdef __MIPSEL__
|
|
#include "jail_audio.h"
|
|
#include "SDL_mixer.h"
|
|
|
|
struct JA_Sound_t {
|
|
Mix_Chunk *mix_chunk;
|
|
};
|
|
|
|
struct JA_Music_t {
|
|
Mix_Music* mix_music;
|
|
};
|
|
|
|
JA_Music current_music{NULL};
|
|
|
|
void JA_Init(const int freq, const SDL_AudioFormat format, const int channels) {
|
|
Mix_OpenAudio(MIX_DEFAULT_FREQUENCY, MIX_DEFAULT_FORMAT, 2, 1024);
|
|
Mix_AllocateChannels(8);
|
|
}
|
|
|
|
JA_Music JA_LoadMusic(const char* filename) {
|
|
int chan, samplerate;
|
|
JA_Music music = new JA_Music_t();
|
|
music->mix_music = Mix_LoadMUS(filename);
|
|
return music;
|
|
}
|
|
|
|
void JA_PlayMusic(JA_Music music, const int loop) {
|
|
if (current_music == music) return;
|
|
if (current_music != NULL) {
|
|
Mix_HaltMusic();
|
|
}
|
|
current_music = music;
|
|
Mix_PlayMusic(music->mix_music, loop);
|
|
}
|
|
|
|
void JA_PauseMusic() {
|
|
Mix_PauseMusic();
|
|
}
|
|
|
|
void JA_ResumeMusic() {
|
|
Mix_ResumeMusic();
|
|
}
|
|
|
|
void JA_StopMusic() {
|
|
Mix_HaltMusic();
|
|
}
|
|
|
|
JA_Music_state JA_GetMusicState() {
|
|
if (current_music == NULL) return JA_MUSIC_INVALID;
|
|
if (Mix_PausedMusic()) {
|
|
return JA_MUSIC_PAUSED;
|
|
} else if (Mix_PlayingMusic()) {
|
|
return JA_MUSIC_PLAYING;
|
|
} else {
|
|
return JA_MUSIC_STOPPED;
|
|
}
|
|
}
|
|
|
|
void JA_DeleteMusic(JA_Music music) {
|
|
if (current_music == music) {
|
|
Mix_HaltMusic();
|
|
current_music = NULL;
|
|
}
|
|
Mix_FreeMusic(music->mix_music);
|
|
delete music;
|
|
}
|
|
|
|
JA_Sound JA_LoadSound(const char* filename) {
|
|
JA_Sound sound = new JA_Sound_t();
|
|
sound->mix_chunk = Mix_LoadWAV(filename);
|
|
return sound;
|
|
}
|
|
|
|
int JA_PlaySound(JA_Sound sound, const int loop) {
|
|
int channel = Mix_PlayChannel(-1, sound->mix_chunk, loop);
|
|
return channel;
|
|
}
|
|
|
|
void JA_DeleteSound(JA_Sound sound) {
|
|
Mix_FreeChunk(sound->mix_chunk);
|
|
delete sound;
|
|
}
|
|
|
|
void JA_PauseChannel(const int channel) {
|
|
Mix_Pause(channel);
|
|
}
|
|
|
|
void JA_ResumeChannel(const int channel) {
|
|
Mix_Resume(channel);
|
|
}
|
|
|
|
void JA_StopChannel(const int channel) {
|
|
Mix_HaltChannel(channel);
|
|
}
|
|
|
|
JA_Channel_state JA_GetChannelState(const int channel) {
|
|
if (Mix_Paused(channel)) {
|
|
return JA_CHANNEL_PAUSED;
|
|
} else if (Mix_Playing(channel)) {
|
|
return JA_CHANNEL_PLAYING;
|
|
} else {
|
|
return JA_CHANNEL_FREE;
|
|
}
|
|
}
|
|
|
|
#endif
|