diff options
| author | oroborus <oroborus@0ee4d065-81f0-4d1e-b06c-ff20ad07cc3e> | 2008-06-28 16:38:35 +0000 |
|---|---|---|
| committer | oroborus <oroborus@0ee4d065-81f0-4d1e-b06c-ff20ad07cc3e> | 2008-06-28 16:38:35 +0000 |
| commit | 2d776fcd61be168e1ff0ff2e4a5e71835e7cea19 (patch) | |
| tree | 7cf274897bf540d5332d446f583ffd066e4e2e1d /src/audio | |
| parent | b877ae23ac5d380ab3aa48d7724045cf4883b186 (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/Makefile | 17 | ||||
| -rw-r--r-- | src/audio/audio.c | 44 | ||||
| -rw-r--r-- | src/audio/audio.h | 12 | ||||
| -rw-r--r-- | src/audio/music.c | 210 | ||||
| -rw-r--r-- | src/audio/music.h | 36 | ||||
| -rw-r--r-- | src/audio/sound.c | 137 | ||||
| -rw-r--r-- | src/audio/sound.h | 33 |
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 |