X-Git-Url: https://git.artsoft.org/?a=blobdiff_plain;f=src%2Flibgame%2Fsound.c;h=b80cccab57ca3636078e1d8af1e23fb376d2f97e;hb=5ae3fc5d27076677a95153162abcf527c6dc8e63;hp=c8d61a828abbd877fee2c5d641132d970089a470;hpb=942ec4881e3b21c130df9ae105d06c2c633fa192;p=rocksndiamonds.git diff --git a/src/libgame/sound.c b/src/libgame/sound.c index c8d61a82..b80cccab 100644 --- a/src/libgame/sound.c +++ b/src/libgame/sound.c @@ -1,7 +1,7 @@ /*********************************************************** * Artsoft Retro-Game Library * *----------------------------------------------------------* -* (c) 1994-2002 Artsoft Entertainment * +* (c) 1994-2006 Artsoft Entertainment * * Holger Schemel * * Detmolder Strasse 189 * * 33604 Bielefeld * @@ -70,25 +70,6 @@ #define SAME_SOUND_NR(x,y) ((x).nr == (y).nr) #define SAME_SOUND_DATA(x,y) ((x).data_ptr == (y).data_ptr) -#if 0 -struct SoundHeader_SUN -{ - unsigned long magic; - unsigned long hdr_size; - unsigned long data_size; - unsigned long encoding; - unsigned long sample_rate; - unsigned long channels; -}; - -struct SoundHeader_8SVX -{ - char magic_FORM[4]; - unsigned long chunk_size; - char magic_8SVX[4]; -}; -#endif - #if defined(AUDIO_UNIX_NATIVE) struct SoundHeader_WAV { @@ -151,16 +132,8 @@ typedef struct SoundControl SoundControl; static struct ArtworkListInfo *sound_info = NULL; static struct ArtworkListInfo *music_info = NULL; -#if 0 -static SoundInfo **Sound = NULL; -#endif - static MusicInfo **Music_NoConf = NULL; -#if 0 -static int num_sounds = 0; -#endif - static int num_music_noconf = 0; static int stereo_volume[SOUND_MAX_LEFT2RIGHT + 1]; @@ -271,11 +244,6 @@ static boolean ForkAudioProcess(void) if (audio.mixer_pid == 0) /* we are the child process */ audio.mixer_pid = getpid(); -#if 0 - printf("PID: %d [%s]\n", getpid(),(IS_CHILD_PROCESS() ? "child" : "parent")); - Delay(10000 * 0); -#endif - if (IS_CHILD_PROCESS()) Mixer_Main(); /* this function never returns */ else @@ -515,7 +483,7 @@ static void WriteReloadInfoToPipe(char *set_identifier, int type) if (leveldir_current == NULL) /* should never happen */ Error(ERR_EXIT, "leveldir_current == NULL"); - memset(&snd_ctrl, 0, sizeof(SoundControl)); /* to make valgrind happy */ + clear_mem(&snd_ctrl, sizeof(SoundControl)); /* to make valgrind happy */ snd_ctrl.active = FALSE; snd_ctrl.state = type; @@ -569,8 +537,7 @@ static void ReadReloadInfoFromPipe(SoundControl *snd_ctrl) &setup.override_level_sounds : &setup.override_level_music); - if (set_identifier) - free(set_identifier); + checked_free(set_identifier); set_identifier = checked_malloc(snd_ctrl->data_len); @@ -579,16 +546,12 @@ static void ReadReloadInfoFromPipe(SoundControl *snd_ctrl) if (ti == NULL) ti = *ti_ptr = checked_calloc(sizeof(TreeInfo)); - if (leveldir_current->fullpath != NULL) - free(leveldir_current->fullpath); - if (leveldir_current->sounds_path != NULL) - free(leveldir_current->sounds_path); - if (leveldir_current->music_path != NULL) - free(leveldir_current->music_path); - if (ti->basepath != NULL) - free(ti->basepath); - if (ti->fullpath != NULL) - free(ti->fullpath); + + checked_free(leveldir_current->fullpath); + checked_free(leveldir_current->sounds_path); + checked_free(leveldir_current->music_path); + checked_free(ti->basepath); + checked_free(ti->fullpath); if (read(audio.mixer_pipe[0], set_identifier, snd_ctrl->data_len) != snd_ctrl->data_len || @@ -836,22 +799,6 @@ static void Mixer_InsertSound(SoundControl snd_ctrl) int num_sounds = getSoundListSize(); int num_music = getMusicListSize(); -#if 0 - if (IS_MUSIC(snd_ctrl)) - printf("NEW MUSIC %d ARRIVED [%d/%d] [%d ACTIVE CHANNELS]\n", - snd_ctrl.nr, num_music, num_music_noconf, mixer_active_channels); - else - printf("NEW SOUND %d ARRIVED [%d] [%d ACTIVE CHANNELS]\n", - snd_ctrl.nr, num_sounds, mixer_active_channels); -#endif - -#if 0 - /* !!! TEST ONLY !!! */ - if (IS_MUSIC(snd_ctrl)) - snd_ctrl.nr = 0; -#endif - -#if 1 if (IS_MUSIC(snd_ctrl)) { if (snd_ctrl.nr >= num_music) /* invalid music */ @@ -876,32 +823,6 @@ static void Mixer_InsertSound(SoundControl snd_ctrl) snd_info = getSoundInfoEntryFromSoundID(snd_ctrl.nr); } - /* - if (snd_ctrl.nr >= (IS_MUSIC(snd_ctrl) ? num_music : num_sounds)) - return; - */ -#else - if (IS_MUSIC(snd_ctrl)) - { - if (num_music_noconf == 0) - return; - - snd_ctrl.nr = snd_ctrl.nr % num_music_noconf; - } - else if (snd_ctrl.nr >= num_sounds) - return; -#endif - -#if 0 -#if 1 - snd_info = (IS_MUSIC(snd_ctrl) ? getMusicInfoEntryFromMusicID(snd_ctrl.nr) : - getSoundInfoEntryFromSoundID(snd_ctrl.nr)); -#else - snd_info = (IS_MUSIC(snd_ctrl) ? Music_NoConf[snd_ctrl.nr] : - getSoundInfoEntryFromSoundID(snd_ctrl.nr)); -#endif -#endif - if (snd_info == NULL) return; @@ -915,10 +836,6 @@ static void Mixer_InsertSound(SoundControl snd_ctrl) /* play music samples on a dedicated music channel */ if (IS_MUSIC(snd_ctrl)) { -#if 0 - printf("::: slot %d, ptr 0x%08x\n", snd_ctrl.nr, snd_ctrl.data_ptr); -#endif - Mixer_StopMusicChannel(); mixer[audio.music_channel] = snd_ctrl; @@ -932,10 +849,6 @@ static void Mixer_InsertSound(SoundControl snd_ctrl) if (mixer[i].active && SAME_SOUND_DATA(mixer[i], snd_ctrl)) k++; -#if 0 - printf("SOUND %d [CURRENTLY PLAYING %d TIMES]\n", snd_ctrl.nr, k); -#endif - /* reset expiration delay for already playing loop sounds */ if (k > 0 && IS_LOOP(snd_ctrl)) { @@ -943,10 +856,6 @@ static void Mixer_InsertSound(SoundControl snd_ctrl) { if (mixer[i].active && SAME_SOUND_DATA(mixer[i], snd_ctrl)) { -#if 0 - printf("RESETTING EXPIRATION FOR SOUND %d\n", snd_ctrl.nr); -#endif - if (IS_FADING(mixer[i])) Mixer_UnFadeChannel(i); @@ -956,21 +865,12 @@ static void Mixer_InsertSound(SoundControl snd_ctrl) Mixer_SetChannelProperties(i); Mixer_ResetChannelExpiration(i); - -#if 0 - printf("RESETTING VOLUME/STEREO FOR SOUND %d TO %d/%d\n", - snd_ctrl.nr, snd_ctrl.volume, snd_ctrl.stereo_position); -#endif } } return; } -#if 0 - printf("PLAYING NEW SOUND %d\n", snd_ctrl.nr); -#endif - /* don't play sound more than n times simultaneously (with n == 2 for now) */ if (k >= 2) { @@ -1013,8 +913,8 @@ static void Mixer_InsertSound(SoundControl snd_ctrl) { if (!mixer[i].active) { - Error(ERR_RETURN, "Mixer_InsertSound: Channel %d inactive", i); - Error(ERR_RETURN, "Mixer_InsertSound: This should never happen!"); + Error(ERR_INFO, "Mixer_InsertSound: Channel %d inactive", i); + Error(ERR_INFO, "Mixer_InsertSound: This should never happen!"); mixer_active_channels--; } @@ -1033,7 +933,7 @@ static void Mixer_InsertSound(SoundControl snd_ctrl) /* print some debugging information about audio channel usage */ for (i = audio.first_sound_channel; i < audio.num_channels; i++) { - Error(ERR_RETURN, "Mixer_InsertSound: %d [%d]: %ld (%ld)", + Error(ERR_INFO, "Mixer_InsertSound: %d [%d]: %ld (%ld)", i, mixer[i].active, mixer[i].data_len, (long)mixer[i].data_ptr); } #endif @@ -1057,16 +957,8 @@ static void Mixer_InsertSound(SoundControl snd_ctrl) /* add the new sound to the mixer */ for (i = audio.first_sound_channel; i < audio.num_channels; i++) { -#if 0 - printf("CHECKING CHANNEL %d FOR SOUND %d ...\n", i, snd_ctrl.nr); -#endif - if (!mixer[i].active) { -#if 0 - printf("ADDING NEW SOUND %d TO MIXER\n", snd_ctrl.nr); -#endif - #if defined(AUDIO_UNIX_NATIVE) if (snd_info->data_len == 0) { @@ -1255,8 +1147,8 @@ static void Mixer_Main_DSP() max_sample_size = fragment_size / (num_output_channels * sample_bytes); /* first clear the last premixing buffer */ - memset(premix_last_buffer, 0, - max_sample_size * num_output_channels * sizeof(long)); + clear_mem(premix_last_buffer, + max_sample_size * num_output_channels * sizeof(long)); for (i = 0; i < audio.num_channels; i++) { @@ -1413,11 +1305,9 @@ static int Mixer_Main_SimpleAudio(SoundControl snd_ctrl) mixer[i].volume * (long)premix_first_buffer[j] / SOUND_MAX_VOLUME; /* might be needed for u-law /dev/audio */ -#if 1 for (j = 0; j < sample_size; j++) playing_buffer[j] = linear_to_ulaw(premix_first_buffer[j]); -#endif /* delete completed sound entries from the mixer */ if (mixer[i].playing_pos >= mixer[i].data_len) @@ -1643,10 +1533,6 @@ static void *Load_WAV(char *filename) if (!audio.sound_available) return NULL; -#if 0 - printf("loading WAV file '%s'\n", filename); -#endif - snd_info = checked_calloc(sizeof(SoundInfo)); #if defined(TARGET_SDL) @@ -1673,6 +1559,8 @@ static void *Load_WAV(char *filename) #else /* AUDIO_UNIX_NATIVE */ + clear_mem(&header, sizeof(struct SoundHeader_WAV)); /* to make gcc happy */ + if ((file = fopen(filename, MODE_READ)) == NULL) { Error(ERR_WARN, "cannot open sound file '%s'", filename); @@ -1682,7 +1570,7 @@ static void *Load_WAV(char *filename) /* read chunk id "RIFF" */ getFileChunkLE(file, chunk_name, &chunk_size); - if (strcmp(chunk_name, "RIFF") != 0) + if (!strEqual(chunk_name, "RIFF")) { Error(ERR_WARN, "missing 'RIFF' chunk of sound file '%s'", filename); fclose(file); @@ -1692,7 +1580,7 @@ static void *Load_WAV(char *filename) /* read "RIFF" type id "WAVE" */ getFileChunkLE(file, chunk_name, NULL); - if (strcmp(chunk_name, "WAVE") != 0) + if (!strEqual(chunk_name, "WAVE")) { Error(ERR_WARN, "missing 'WAVE' type ID of sound file '%s'", filename); fclose(file); @@ -1702,7 +1590,7 @@ static void *Load_WAV(char *filename) while (getFileChunkLE(file, chunk_name, &chunk_size)) { - if (strcmp(chunk_name, "fmt ") == 0) + if (strEqual(chunk_name, "fmt ")) { if (chunk_size < WAV_HEADER_SIZE) { @@ -1766,7 +1654,7 @@ static void *Load_WAV(char *filename) printf(" Significant bits per sample: %d'\n", header.bits_per_sample); #endif } - else if (strcmp(chunk_name, "data") == 0) + else if (strEqual(chunk_name, "data")) { data_byte_len = chunk_size; @@ -1885,20 +1773,11 @@ void LoadCustomMusic_NoConf(void) struct dirent *dir_entry; int num_music = getMusicListSize(); -#if 0 - int ii; - for (ii = 0; ii < num_music; ii++) - { - struct FileInfo *music = getMusicListEntry(ii); - printf("sound process: music %d: '%s'\n", ii, music->filename); - } -#endif - if (!audio.sound_available) return; if (last_music_directory != NULL && - strcmp(last_music_directory, music_directory) == 0) + strEqual(last_music_directory, music_directory)) return; /* old and new music directory are the same */ if (last_music_directory != NULL) @@ -1915,7 +1794,7 @@ void LoadCustomMusic_NoConf(void) } if (draw_init_text) - DrawInitText("Loading music:", 120, FC_GREEN); + DrawInitText("Loading music", 120, FC_GREEN); while ((dir_entry = readdir(dir)) != NULL) /* loop until last dir entry */ { @@ -1925,15 +1804,12 @@ void LoadCustomMusic_NoConf(void) boolean music_already_used = FALSE; int i; + /* skip all music files that are configured in music config file */ for (i = 0; i < num_music; i++) { struct FileInfo *music = getMusicListEntry(i); -#if 0 - printf("sound process: '%s'\n", music->filename); -#endif - - if (strcmp(basename, music->filename) == 0) + if (strEqual(basename, music->filename)) { music_already_used = TRUE; break; @@ -1943,25 +1819,13 @@ void LoadCustomMusic_NoConf(void) if (music_already_used) continue; -#if 0 - if (FileIsSound(basename) || FileIsMusic(basename)) - printf("DEBUG: loading music '%s' ...\n", basename); -#endif - if (draw_init_text) DrawInitText(basename, 150, FC_YELLOW); filename = getPath2(music_directory, basename); -#if 1 if (FileIsMusic(basename)) mus_info = Load_WAV_or_MOD(filename); -#else - if (FileIsSound(basename)) - mus_info = Load_WAV(filename); - else if (FileIsMusic(basename)) - mus_info = Load_MOD(filename); -#endif free(filename); @@ -1977,10 +1841,6 @@ void LoadCustomMusic_NoConf(void) closedir(dir); draw_init_text = FALSE; - - if (num_music_noconf == 0) - Error(ERR_WARN, "cannot find any valid music files in directory '%s'", - music_directory); } int getSoundListSize() @@ -2056,7 +1916,7 @@ struct PropertyMapping *getMusicListPropertyMapping() } void InitSoundList(struct ConfigInfo *config_list, int num_file_list_entries, - struct ConfigInfo *config_suffix_list, + struct ConfigTypeInfo *config_suffix_list, char **base_prefixes, char **ext1_suffixes, char **ext2_suffixes, char **ext3_suffixes, char **ignore_tokens) @@ -2128,15 +1988,10 @@ void InitSoundList(struct ConfigInfo *config_list, int num_file_list_entries, sound_info->load_artwork = Load_WAV; sound_info->free_artwork = FreeSound; - -#if 0 - num_sounds = sound_info->num_file_list_entries; - Sound = (SoundInfo **)sound_info->artwork_list; -#endif } void InitMusicList(struct ConfigInfo *config_list, int num_file_list_entries, - struct ConfigInfo *config_suffix_list, + struct ConfigTypeInfo *config_suffix_list, char **base_prefixes, char **ext1_suffixes, char **ext2_suffixes, char **ext3_suffixes, char **ignore_tokens) @@ -2257,7 +2112,7 @@ void PlaySoundExt(int nr, int volume, int stereo_position, int state) else if (stereo_position > SOUND_MAX_RIGHT) stereo_position = SOUND_MAX_RIGHT; - memset(&snd_ctrl, 0, sizeof(SoundControl)); /* to make valgrind happy */ + clear_mem(&snd_ctrl, sizeof(SoundControl)); /* to make valgrind happy */ snd_ctrl.active = TRUE; snd_ctrl.nr = nr; @@ -2318,7 +2173,7 @@ void StopSoundExt(int nr, int state) if (!audio.sound_available) return; - memset(&snd_ctrl, 0, sizeof(SoundControl)); /* to make valgrind happy */ + clear_mem(&snd_ctrl, sizeof(SoundControl)); /* to make valgrind happy */ snd_ctrl.active = FALSE; snd_ctrl.nr = nr; @@ -2330,30 +2185,24 @@ void StopSoundExt(int nr, int state) static void ReloadCustomSounds() { #if 0 - printf("DEBUG: reloading sounds '%s' ...\n", artwork.snd_current_identifier); + printf("::: reloading sounds '%s' ...\n", artwork.snd_current_identifier); #endif LoadArtworkConfig(sound_info); ReloadCustomArtworkList(sound_info); - -#if 0 - num_sounds = getSoundListSize(); -#endif } static void ReloadCustomMusic() { #if 0 - printf("DEBUG: reloading music '%s' ...\n", artwork.mus_current_identifier); + printf("::: reloading music '%s' ...\n", artwork.mus_current_identifier); #endif LoadArtworkConfig(music_info); ReloadCustomArtworkList(music_info); -#if 1 /* load all music files from directory not defined in "musicinfo.conf" */ LoadCustomMusic_NoConf(); -#endif } void InitReloadCustomSounds(char *set_identifier) @@ -2400,8 +2249,7 @@ void FreeSound(void *ptr) #endif } - if (sound->source_filename) - free(sound->source_filename); + checked_free(sound->source_filename); free(sound); }