summaryrefslogtreecommitdiff
path: root/src/audio/sound.c~
diff options
context:
space:
mode:
authorTomas Chvatal (scarabeus) <tomas.chvatal@gmail.com>2008-10-22 22:50:54 +0200
committerTomas Chvatal (scarabeus) <tomas.chvatal@gmail.com>2008-10-22 22:50:54 +0200
commite12753d2ec9db83ec08bb9db63902a82fb245cdd (patch)
tree6e4a63b790d6335f969f88b797a927e0fb25f37a /src/audio/sound.c~
parent0b4d9821c7333b8c4bdf7e0eeb750aef502a1137 (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
+}
+