diff --git a/src/sound.c b/src/sound.c index f42aec7..0b00c3f 100644 --- a/src/sound.c +++ b/src/sound.c @@ -1,8 +1,13 @@ +/** + * @file sound.c + * + * @brief Handle all the sound details. + */ + #include <sys/stat.h> #include <SDL.h> #include <SDL_mixer.h> -#include <SDL_thread.h> #include "lephisto.h" #include "log.h" @@ -11,31 +16,36 @@ #include "physics.h" #include "sound.h" -#define SOUND_CHANNEL_MAX 256 /* Overkill. */ +#define SOUND_CHANNEL_MAX 256 /**< Number of sound channels to allocate. Overkill. */ -#define SOUND_PREFIX "../snd/sounds/" -#define SOUND_SUFFIX ".wav" +#define SOUND_PREFIX "../snd/sounds/" /**< Prefix of where to find sounds. */ +#define SOUND_SUFFIX ".wav" /**< Suffix of sounds. */ /* Global sound properties. */ -int sound_disabled = 0; /* Whether sound is disabled. */ -static int sound_reserved = 0; /* Amount of reserved channels. */ -static double sound_pos[3]; /* Position of listener. */ +int sound_disabled = 0; /**< Whether sound is disabled. */ +static int sound_reserved = 0; /**< Amount of reserved channels. */ +static double sound_pos[3]; /**< Position of listener. */ /* Give the buffers a name. */ typedef struct alSound_ { - char* name; /* Buffers name. */ - Mix_Chunk* buffer; + char* name; /**< Buffers name. */ + Mix_Chunk* buffer; /**< Buffer data. */ } alSound; /* List of sounds available (All preloaded into a buffer). */ -static alSound* sound_list = NULL; -static int sound_nlist = 0; +static alSound* sound_list = NULL; /**< List of available sounds. */ +static int sound_nlist = 0; /**< Number of available sounds. */ static int sound_makeList(void); static Mix_Chunk* sound_load(char* filename); static void sound_free(alSound* snd); -/* Init the sound subsystem. */ +/** + * @fn int sound_init(void) + * + * @brief Initializes the sound subsystem. + * @return 0 on success. + */ int sound_init(void) { int frequency; Uint16 format; @@ -73,7 +83,11 @@ int sound_init(void) { return 0; } -/* Clean up after the sound system. */ +/** + * @fn void sound_exit(void) + * + * @brief Clean up after the sound subsystem. + */ void sound_exit(void) { int i; @@ -87,7 +101,13 @@ void sound_exit(void) { music_exit(); } -/* Get the buffer to sound of name. */ +/** + * @fn void sound_get(char* name) + * + * @brief Get the buffer to sound of name. + * @param name Name of the sound to get id of. + * @return ID of the sound matching name. + */ int sound_get(char* name) { int i; @@ -102,7 +122,13 @@ int sound_get(char* name) { return -1; } -/* Play the sound. */ +/** + * @fn int sound_play(int sound) + * + * @brief Play the sound in the first available channel. + * @param sound Sound to play. + * @return 0 on success. + */ int sound_play(int sound) { int channel; @@ -119,6 +145,15 @@ int sound_play(int sound) { return 0; } +/** + * @fn int sound_playPos(int sound, double x, double y) + * + * @brief Play a sound based on position. + * @param sound Sound to play. + * @param x X position of sound. + * @param y Y position of sound. + * @return 0 on success. + */ int sound_playPos(int sound, double x, double y) { int channel; double angle, dist; @@ -151,6 +186,16 @@ int sound_playPos(int sound, double x, double y) { return 0; } +/** + * @fn int sound_updateListener(double dir, double x, double y) + * + * @brief Update the sound listener. + * @param dir Direction listener if facing. + * @param x X position of the listener. + * @param y Y position of the listener. + * + * @sa sound_playPos + */ int sound_updateListener(double dir, double x, double y) { sound_pos[0] = x; sound_pos[1] = y; @@ -158,7 +203,11 @@ int sound_updateListener(double dir, double x, double y) { return 0; } -/* Make list of available sounds. */ +/** + * @fn static int sound_makeList(void) + * + * @brief Make the list of available sounds. + */ static int sound_makeList(void) { char** files; uint32_t nfiles, i; @@ -208,13 +257,27 @@ static int sound_makeList(void) { return 0; } -/* Set the volume. */ +/** + * @fn int sound_volume(const double vol) + * + * @brief Set the volume. + * @param vol Volume to set to. + * @return 0 on success. + */ int sound_volume(const double vol) { if(sound_disabled) return 0; return Mix_Volume(-1, MIX_MAX_VOLUME*vol); } -/* Loads a sound into the sound_list. */ +/** + * @fn stastic Mix_Chunk* sound_load(char* filename) + * + * @brief Load a sound into the sound_list. + * @paramfilename Name for the file to load. + * @return The SDL_Mixer of the loaded chunk. + * + * @sa sound_makeList + */ static Mix_Chunk* sound_load(char* filename) { void* wavdata; unsigned int size; @@ -239,6 +302,12 @@ static Mix_Chunk* sound_load(char* filename) { return buffer; } +/** + * @fn static void sound_free(alSound* snd) + * + * @brief Frees the sound. + * @param snd Sound to free. + */ static void sound_free(alSound* snd) { /* Free the stuff. */ if(snd->name) { @@ -250,7 +319,13 @@ static void sound_free(alSound* snd) { snd->buffer = NULL; } -/* Reserve num channels. */ +/** + * @fn int sound_reverse(int num) + * + * @brief Reserve num channels. + * @param num Number of channels to reserve. + * @return 0 on success. + */ int sound_reserve(int num) { int ret; @@ -267,7 +342,15 @@ int sound_reserve(int num) { return 0; } -/* Create a sound group. */ +/** + * @fn int sound_createGroup(int tag, int start, int size) + * + * @brief Create a sound group. + * @param tag Identifier of the group to create. + * @param start Where to start creating the group. + * @param size Size of the group. + * @return 0 on success. + */ int sound_createGroup(int tag, int start, int size) { int ret; @@ -283,7 +366,15 @@ int sound_createGroup(int tag, int start, int size) { return 0; } -/* Play a sound in a group. */ +/** + * @fn int sound_playGroup(int group, int sound, int once) + * + * @brief Play a sound in a group. + * @param group Group to play sound in. + * @param sound Sound to play. + * @param once Whether to play only once. + * @param 0 on success. + */ int sound_playGroup(int group, int sound, int once) { int ret, channel; @@ -303,7 +394,12 @@ int sound_playGroup(int group, int sound, int once) { return 0; } -/* Stop all the sounds in a group. */ +/** + * @fn void sound_stopGroup(int group) + * + * @brief Stop all the sounds in a group. + * @param group Group to stop all it's sounds. + */ void sound_stopGroup(int group) { if(sound_disabled) return;