X-Git-Url: https://git.artsoft.org/?a=blobdiff_plain;f=src%2Flibgame%2Fsound.c;h=f30c1d4cb4b91a58a91b24b535cb64a699e1a68a;hb=b13dc8e30a0c07bea53bf168ae6d1017394d3c22;hp=d31bc586cb5c9c8a46622eb6aca0f219ecaa4d9b;hpb=28f0f8708f4b4f8c4f39f1b23bc5fc7e0fed7579;p=rocksndiamonds.git diff --git a/src/libgame/sound.c b/src/libgame/sound.c index d31bc586..f30c1d4c 100644 --- a/src/libgame/sound.c +++ b/src/libgame/sound.c @@ -152,10 +152,7 @@ struct SoundControl }; typedef struct SoundControl SoundControl; -static struct ArtworkListInfo sound_info; - -static struct ArtworkConfigInfo *sound_config = NULL; -static ListNode *SoundFileList = NULL; +static struct ArtworkListInfo *sound_info = NULL; static SoundInfo **Sound = NULL; static MusicInfo **Music = NULL; static int num_sounds = 0, num_music = 0; @@ -1724,126 +1721,40 @@ static void *Load_WAV(char *filename) return snd_info; } -static void deleteSoundEntry(SoundInfo **snd_info) -{ - if (*snd_info) - { - char *filename = (*snd_info)->source_filename; - -#if 0 - printf("[decrementing reference counter of sound '%s']\n", filename); -#endif - - if (--(*snd_info)->num_references <= 0) - { -#if 0 - printf("[deleting sound '%s']\n", filename); -#endif - - /* - FreeSound(*snd_info); - */ - deleteNodeFromList(&SoundFileList, filename, FreeSound); - } - - *snd_info = NULL; - } -} - -static void replaceSoundEntry(SoundInfo **snd_info, char *filename) +struct FileInfo *getCurrentSoundList() { - ListNode *node; - - /* check if the old and the new sound file are the same */ - if (*snd_info && strcmp((*snd_info)->source_filename, filename) == 0) - { - /* The old and new sound are the same (have the same filename and path). - This usually means that this sound does not exist in this sound set - and a fallback to the existing sound is done. */ - -#if 0 - printf("[sound '%s' already exists (same list entry)]\n", filename); -#endif - - return; - } - - /* delete existing sound file entry */ - deleteSoundEntry(snd_info); - - /* check if the new sound file already exists in the list of sounds */ - if ((node = getNodeFromKey(SoundFileList, filename)) != NULL) - { -#if 0 - printf("[sound '%s' already exists (other list entry)]\n", filename); -#endif - - *snd_info = (SoundInfo *)node->content; - (*snd_info)->num_references++; - } - else if ((*snd_info = Load_WAV(filename)) != NULL) /* load new sound */ - { - (*snd_info)->num_references = 1; - addNodeToList(&SoundFileList, (*snd_info)->source_filename, *snd_info); - } + return sound_info->file_list; } -static void LoadCustomSound(SoundInfo **snd_info, char *basename) +void InitSoundList(struct ConfigInfo *config_list, char *config_suffix_list[], + int num_file_list_entries) { - char *filename = getCustomSoundFilename(basename); - -#if 0 - printf("GOT CUSTOM SOUND FILE '%s'\n", filename); -#endif - - if (strcmp(basename, SND_FILE_UNDEFINED) == 0) - { - deleteSoundEntry(snd_info); - return; - } - - if (filename == NULL) - { - Error(ERR_WARN, "cannot find sound file '%s'", basename); - return; - } + int i; - replaceSoundEntry(snd_info, filename); -} + sound_info = checked_calloc(sizeof(struct ArtworkListInfo)); -void InitSoundList(struct ArtworkConfigInfo *config_list, int num_list_entries) -{ - if (Sound == NULL) - Sound = checked_calloc(num_list_entries * sizeof(SoundInfo *)); + sound_info->type = ARTWORK_TYPE_SOUNDS; - sound_config = config_list; - num_sounds = num_list_entries; + sound_info->num_file_list_entries = num_file_list_entries; + sound_info->num_suffix_list_entries = 0; + for (i=0; config_suffix_list[i] != NULL; i++) + sound_info->num_suffix_list_entries++; - sound_info.type = ARTWORK_TYPE_SOUNDS; - sound_info.num_list_entries = num_list_entries; - sound_info.config_list = config_list; - sound_info.artwork_list = (struct ArtworkListNodeInfo **)Sound; - sound_info.file_list = NULL; - sound_info.load_artwork = Load_WAV; - sound_info.free_artwork = FreeSound; -} + sound_info->file_list = + getFileListFromConfigList(config_list, config_suffix_list, + num_file_list_entries); + sound_info->suffix_list = config_suffix_list; -void LoadSoundToList(char *basename, int list_pos) -{ - if (Sound == NULL || list_pos >= num_sounds) - return; + sound_info->artwork_list = + checked_calloc(num_file_list_entries * sizeof(SoundInfo *)); -#if 0 - printf("loading sound '%s' ... [%d]\n", - basename, getNumNodes(SoundFileList)); -#endif + sound_info->content_list = NULL; - LoadCustomSound(&Sound[list_pos], basename); + sound_info->load_artwork = Load_WAV; + sound_info->free_artwork = FreeSound; -#if 0 - printf("loading sound '%s' done [%d]\n", - basename, getNumNodes(SoundFileList)); -#endif + num_sounds = sound_info->num_file_list_entries; + Sound = (SoundInfo **)sound_info->artwork_list; } static MusicInfo *Load_MOD(char *filename) @@ -2048,52 +1959,14 @@ void StopSoundExt(int nr, int state) HandleSoundRequest(snd_ctrl); } -#if 1 -static void ReloadCustomSounds() -{ - ReloadCustomArtworkFiles(&sound_info); -} -#else static void ReloadCustomSounds() { - static boolean draw_init_text = TRUE; /* only draw at startup */ - int i; - -#if 0 - printf("DEBUG: reloading sounds '%s' ...\n",artwork.snd_current_identifier); -#endif - - LoadArtworkConfig(&sound_info); - - if (draw_init_text) - DrawInitText("Loading sounds:", 120, FC_GREEN); - #if 0 - printf("DEBUG: reloading %d sounds ...\n", num_sounds); + printf("DEBUG: reloading sounds '%s' ...\n", artwork.snd_current_identifier); #endif - for(i=0; i