diff options
| author | Tomas Chvatal (scarabeus) <tomas.chvatal@gmail.com> | 2008-10-22 22:50:54 +0200 |
|---|---|---|
| committer | Tomas Chvatal (scarabeus) <tomas.chvatal@gmail.com> | 2008-10-22 22:50:54 +0200 |
| commit | e12753d2ec9db83ec08bb9db63902a82fb245cdd (patch) | |
| tree | 6e4a63b790d6335f969f88b797a927e0fb25f37a /src/audio/sound.c~ | |
| parent | 0b4d9821c7333b8c4bdf7e0eeb750aef502a1137 (diff) | |
X
Diffstat (limited to 'src/audio/sound.c~')
| -rw-r--r-- | src/audio/sound.c~ | 134 |
1 files changed, 134 insertions, 0 deletions
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 <stdio.h> +#include <stdlib.h> +#include <assert.h> + +#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 +} + |