From e12753d2ec9db83ec08bb9db63902a82fb245cdd Mon Sep 17 00:00:00 2001 From: "Tomas Chvatal (scarabeus)" Date: Wed, 22 Oct 2008 22:50:54 +0200 Subject: X --- src/audio/sound.c~ | 134 +++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 134 insertions(+) create mode 100644 src/audio/sound.c~ (limited to 'src/audio/sound.c~') diff --git a/src/audio/sound.c~ b/src/audio/sound.c~ new file mode 100644 index 0000000..0c6b342 --- /dev/null +++ b/src/audio/sound.c~ @@ -0,0 +1,134 @@ + +#include +#include +#include + +#include "main.h" +#include "list.h" +#include "storage.h" +#include "interface.h" +#include "audio.h" +#include "sound.h" + +static list_t *listStorage; +static bool_t isSoundInit = FALSE; +static bool_t var_isSoundActive = TRUE; +/* + * Return state of sound + */ +bool_t isSoundInicialized() +{ + return isSoundInit; +} +/* + * Audio initialization + */ +void initSound() +{ + if( isAudioInicialized() == FALSE ) { + isSoundInit = FALSE; + return; + } + + listStorage = newStorage(); + isSoundInit = TRUE; + var_isSoundActive = TRUE; + if (isParamFlag("--nosound")) + setSoundActive(FALSE); + if (isParamFlag("--sound")) + setSoundActive(TRUE); +#ifdef DEBUG + printf(_("Initializing sound...\n")); +#endif +} +/* + * Load sound file (Null/mixer) + */ +static Mix_Chunk* loadMixSound(char *file) +{ + Mix_Chunk *new; + char str[STR_PATH_SIZE]; + +#ifdef DEBUG + printf(_("Loading sound file: %s\n"), file); +#endif + sprintf(str, PATH_SOUND "%s", file); + accessExistFile(str); + new = Mix_LoadWAV(str); + if (new == NULL) { + fprintf(stderr, _("Unable to load sound file: %s with error: %s\n"), str, Mix_GetError()); + return NULL; + } + return new; +} + +/* + * Play sound with mixer + */ +static void playMixSound(Mix_Chunk *p) +{ + if (Mix_PlayChannel(-1, p, 0) == -1) { + fprintf(stderr, _("Unable to playback sound with error: %s\n"), Mix_GetError()); + return; + } +} +/* + * Destroy mixer chunk + */ +static void destroySound(void *p) +{ + Mix_FreeChunk((Mix_Chunk *)p); +} +/* + * Add sound to list + */ +void addSound(char *file, char *name, char *group) +{ + Mix_Chunk *new; + + if (isSoundInit == FALSE) + return; + assert( file != NULL ); + assert( name != NULL ); + assert( group != NULL ); + new = loadMixSound(file); + addItemToStorage(listStorage, group, name, new ); +} +/* + * Start playback file from list + */ +void playSound(char *name, char *group) +{ + if (isSoundInit == FALSE || + var_isSoundActive == FALSE) + return; + playMixSound(getItemFromStorage(listStorage, group, name)); +} +/* + * Set if sound is active True/False + */ +void setSoundActive(bool_t n) +{ + var_isSoundActive = n; +} +/* + * Return state of sound + */ +bool_t isSoundActive() +{ + return var_isSoundActive; +} +/* + * Quit all sound stuff + */ +void quitSound() +{ + if( isSoundInit == FALSE ) + return; + destroyStorage(listStorage, destroySound); + isSoundInit = FALSE; +#ifdef DEBUG + printf(_("Quitting sound...\n")); +#endif +} + -- cgit v1.2.3