summaryrefslogtreecommitdiff
path: root/src/audio
diff options
context:
space:
mode:
authororoborus <oroborus@0ee4d065-81f0-4d1e-b06c-ff20ad07cc3e>2008-06-28 16:38:35 +0000
committeroroborus <oroborus@0ee4d065-81f0-4d1e-b06c-ff20ad07cc3e>2008-06-28 16:38:35 +0000
commit2d776fcd61be168e1ff0ff2e4a5e71835e7cea19 (patch)
tree7cf274897bf540d5332d446f583ffd066e4e2e1d /src/audio
parentb877ae23ac5d380ab3aa48d7724045cf4883b186 (diff)
- prekopanie adresarovej struktury, prva cast
git-svn-id: http://opensvn.csie.org/tuxanci_ng@77 0ee4d065-81f0-4d1e-b06c-ff20ad07cc3e
Diffstat (limited to 'src/audio')
-rw-r--r--src/audio/Makefile17
-rw-r--r--src/audio/audio.c44
-rw-r--r--src/audio/audio.h12
-rw-r--r--src/audio/music.c210
-rw-r--r--src/audio/music.h36
-rw-r--r--src/audio/sound.c137
-rw-r--r--src/audio/sound.h33
7 files changed, 489 insertions, 0 deletions
diff --git a/src/audio/Makefile b/src/audio/Makefile
new file mode 100644
index 0000000..a5dff01
--- /dev/null
+++ b/src/audio/Makefile
@@ -0,0 +1,17 @@
+
+
+all: audio.o music.o sound.o
+
+audio.o: audio.c audio.h
+ $(CC) $(CFLAGS) -o audio.o -c audio.c
+
+music.o: music.c music.h
+ $(CC) $(CFLAGS) -o music.o -c music.c
+
+sound.o: sound.c sound.h
+ $(CC) $(CFLAGS) -o sound.o -c sound.c
+
+
+
+clean:
+ rm -rf *.o
diff --git a/src/audio/audio.c b/src/audio/audio.c
new file mode 100644
index 0000000..d7f4a9b
--- /dev/null
+++ b/src/audio/audio.c
@@ -0,0 +1,44 @@
+
+#include <stdio.h>
+#include <assert.h>
+#include <SDL_mixer.h>
+
+#include "base/main.h"
+#include "audio/audio.h"
+#include "client/interface.h"
+
+static bool_t isAudioInit = FALSE;
+
+bool_t isAudioInicialized()
+{
+ return isAudioInit;
+}
+
+void initAudio()
+{
+ if( SDL_Init(SDL_INIT_AUDIO) == -1 )
+ {
+ fprintf(stderr, "Nelze inicializovat audio : %s\n", SDL_GetError());
+ return;
+ }
+
+ if( Mix_OpenAudio(MIX_DEFAULT_FREQUENCY, MIX_DEFAULT_FORMAT, 2, 1024) == -1 )
+ {
+ fprintf(stderr, "Nelze inicializovat audio : %s\n", Mix_GetError());
+ return;
+ }
+
+ Mix_AllocateChannels(16);
+ Mix_Volume(-1, MIX_MAX_VOLUME);
+
+ printf("init audio..\n");
+ isAudioInit = TRUE;
+}
+
+void quitAudio()
+{
+ Mix_CloseAudio();
+ isAudioInit = TRUE;
+ printf("quit audio..\n");
+}
+
diff --git a/src/audio/audio.h b/src/audio/audio.h
new file mode 100644
index 0000000..04c58e7
--- /dev/null
+++ b/src/audio/audio.h
@@ -0,0 +1,12 @@
+
+#ifndef AUDIO_H
+
+#define AUDIO_H
+
+#include "base/main.h"
+
+extern bool_t isAudioInicialized();
+extern void initAudio();
+extern void quitAudio();
+
+#endif
diff --git a/src/audio/music.c b/src/audio/music.c
new file mode 100644
index 0000000..90bc5a0
--- /dev/null
+++ b/src/audio/music.c
@@ -0,0 +1,210 @@
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <assert.h>
+
+#include "base/main.h"
+#include "base/list.h"
+#include "base/storage.h"
+
+#include "client/interface.h"
+
+#include "audio/audio.h"
+#include "audio/music.h"
+
+static list_t *listStorage;
+
+static bool_t isMusicInit = FALSE;
+static bool_t var_isMusicActive = TRUE;
+static Mix_Music *currentMusic;
+
+bool_t isMusicInicialized()
+{
+ return isMusicInit;
+}
+
+void initMusic()
+{
+ if( isAudioInicialized() == FALSE )
+ {
+ isMusicInit = FALSE;
+ return;
+ }
+
+ listStorage = newStorage();
+ currentMusic = NULL;
+
+ isMusicInit = TRUE;
+ var_isMusicActive = TRUE;
+
+ if( isParamFlag("--nomusic") )
+ {
+ setMusicActive(FALSE);
+ }
+
+ if( isParamFlag("--music") )
+ {
+ setMusicActive(TRUE);
+ }
+
+ printf("init music..\n");
+}
+
+static Mix_Music* loadMixMusic(char *file)
+{
+ Mix_Music *new;
+ char str[STR_PATH_SIZE];
+
+
+ printf("load music %s..\n", file);
+ sprintf(str, PATH_MUSIC "%s", file);
+
+ accessExistFile(str);
+
+ new = Mix_LoadMUS(str);
+
+ if( new == NULL )
+ {
+ fprintf(stderr, "Nepodarilo sa nacitat hudbu %s\n", file);
+ return NULL;
+ }
+
+ return new;
+}
+
+static void playMixMusic()
+{
+ if( currentMusic != NULL )
+ {
+ Mix_PlayMusic(currentMusic, 1000);
+ }
+}
+
+static void destroyMusic(void *p)
+{
+ Mix_FreeMusic((Mix_Music *)p);
+}
+
+void addMusic(char *file, char *name, char *group)
+{
+ Mix_Music *new;
+
+ if( isMusicInit == FALSE )
+ {
+ return;
+ }
+
+ assert( file != NULL );
+ assert( name != NULL );
+ assert( group != NULL );
+
+ new = loadMixMusic(file);
+
+ addItemToStorage(listStorage, group, name, new );
+}
+
+void stopMusic()
+{
+ if( isMusicInit == FALSE ||
+ var_isMusicActive == FALSE )
+ {
+ return;
+ }
+
+ if( currentMusic != NULL )
+ {
+ printf("stop music..\n");
+ Mix_HaltMusic();
+ currentMusic = NULL;
+ }
+}
+
+void playMusic(char *name, char *group)
+{
+ static char currentMusic_group[STR_SIZE];
+ static char currentMusic_name[STR_SIZE];
+ static int isStrInit = 0;
+
+ if( isStrInit == 0 )
+ {
+ strcpy(currentMusic_group, "none");
+ strcpy(currentMusic_name, "none");
+ isStrInit = 1;
+ }
+
+ if( isMusicInit == FALSE ||
+ var_isMusicActive == FALSE )
+ {
+ return;
+ }
+
+ if( currentMusic != NULL &&
+ strcmp(currentMusic_group, group) == 0 &&
+ strcmp(currentMusic_name, name) == 0 )
+ {
+ return;
+ }
+
+ if( currentMusic != NULL )
+ {
+ stopMusic();
+ }
+
+ currentMusic = getItemFromStorage(listStorage, group, name);
+ strcpy(currentMusic_group, group);
+ strcpy(currentMusic_name, name);
+
+ if( currentMusic != NULL )
+ {
+ printf("play music %s\n", name);
+ playMixMusic();
+ }
+}
+
+void setMusicActive(bool_t n)
+{
+ static Mix_Music *music = NULL;
+
+ if( n == FALSE )
+ {
+ music = currentMusic;
+ stopMusic();
+ }
+
+ if( n == TRUE )
+ {
+ currentMusic = music;
+ playMixMusic();
+ }
+
+ var_isMusicActive = n;
+}
+
+bool_t isMusicActive()
+{
+ return var_isMusicActive;
+}
+
+char* getCurrentMusic()
+{
+ return "unknown";
+}
+
+void delAllMusicInGroup(char *group)
+{
+ delAllItemFromStorage(listStorage, group, destroyMusic);
+}
+
+void quitMusic()
+{
+ if( isMusicInit == FALSE )
+ {
+ return;
+ }
+
+ stopMusic();
+ destroyStorage(listStorage, destroyMusic);
+ isMusicInit = FALSE;
+
+ printf("quit music..\n");
+}
diff --git a/src/audio/music.h b/src/audio/music.h
new file mode 100644
index 0000000..d87f382
--- /dev/null
+++ b/src/audio/music.h
@@ -0,0 +1,36 @@
+
+#ifndef MUSIC_H
+
+#define MUSIC_H
+
+#ifndef NO_SOUND
+
+#include <SDL_mixer.h>
+#include "base/main.h"
+
+#define MUSIC_GROUP_BASE "base"
+#define MUSIC_GROUP_USER "user"
+
+/*
+typedef struct music_struct
+{
+ char *name;
+ int group;
+ Mix_Music *music;
+} music_t;
+*/
+
+extern bool_t isMusicInicialized();
+extern void initMusic();
+extern void addMusic(char *file, char *name, char *group);
+extern void stopMusic();
+extern void playMusic(char *name, char *group);
+extern void setMusicActive(bool_t n);
+extern bool_t isMusicActive();
+extern char* getCurrentMusic();
+extern void delAllMusicInGroup(char *group);
+extern void quitMusic();
+
+#endif
+
+#endif
diff --git a/src/audio/sound.c b/src/audio/sound.c
new file mode 100644
index 0000000..37803c4
--- /dev/null
+++ b/src/audio/sound.c
@@ -0,0 +1,137 @@
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <assert.h>
+
+#include "base/main.h"
+#include "base/list.h"
+#include "base/storage.h"
+
+#include "client/interface.h"
+
+#include "audio/audio.h"
+#include "audio/sound.h"
+
+static list_t *listStorage;
+
+static bool_t isSoundInit = FALSE;
+static bool_t var_isSoundActive = TRUE;
+
+bool_t isSoundInicialized()
+{
+ return isSoundInit;
+}
+
+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);
+ }
+
+ printf("init sound..\n");
+}
+
+static Mix_Chunk* loadMixSound(char *file)
+{
+ Mix_Chunk *new;
+ char str[STR_PATH_SIZE];
+
+
+ printf("load sound %s..\n", file);
+ sprintf(str, PATH_SOUND "%s", file);
+
+ accessExistFile(str);
+
+ new = Mix_LoadWAV(str);
+
+ if( new == NULL )
+ {
+ fprintf(stderr, "Nelze nahrat zvuk %s : %s\n", str, Mix_GetError());
+ return NULL;
+ }
+
+ return new;
+}
+
+
+static void playMixSound(Mix_Chunk *p)
+{
+ if( Mix_PlayChannel(-1, p, 0) == -1 )
+ {
+ fprintf(stderr, "Nelze prehrat zvuk : %s\n", Mix_GetError());
+ return;
+ }
+}
+
+static void destroySound(void *p)
+{
+ Mix_FreeChunk((Mix_Chunk *)p);
+}
+
+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 );
+}
+
+void playSound(char *name, char *group)
+{
+ if( isSoundInit == FALSE ||
+ var_isSoundActive == FALSE )
+ {
+ return;
+ }
+
+ playMixSound( getItemFromStorage(listStorage, group, name) );
+}
+
+void setSoundActive(bool_t n)
+{
+ var_isSoundActive = n;
+}
+
+bool_t isSoundActive()
+{
+ return var_isSoundActive;
+}
+
+void quitSound()
+{
+ if( isSoundInit == FALSE )
+ {
+ return;
+ }
+
+ destroyStorage(listStorage, destroySound);
+ isSoundInit = FALSE;
+ printf("quit sound..\n");
+}
+
diff --git a/src/audio/sound.h b/src/audio/sound.h
new file mode 100644
index 0000000..ec1beb1
--- /dev/null
+++ b/src/audio/sound.h
@@ -0,0 +1,33 @@
+
+#ifndef SOUND_H
+
+#define SOUND_H
+
+#ifndef NO_SOUND
+
+#include <SDL_mixer.h>
+#include "base/main.h"
+
+#define SOUND_GROUP_BASE "base"
+#define SOUND_GROUP_USER "user"
+
+/*
+typedef struct sound_struct
+{
+ char *name;
+ int group;
+ Mix_Chunk *sound;
+} sound_t;
+*/
+
+extern bool_t isSoundInicialized();
+extern void initSound();
+extern void addSound(char *file, char *name, char *group);
+extern void playSound(char *name, char *group);
+extern void setSoundActive(bool_t n);
+extern bool_t isSoundActive();
+extern void quitSound();
+
+#endif
+
+#endif