X-Git-Url: https://git.artsoft.org/?a=blobdiff_plain;f=src%2Flibgame%2Fsound.c;h=0299521267dd802ccd5024467a15590fb286ed22;hb=5ae04ac2ef54f6f164a797c16c9782042cc2ce67;hp=ffb9925b47533b7106e55f672caae4b3c10c64ff;hpb=8458af9ed76d6194de77b184e4e1ba2041e6aa17;p=rocksndiamonds.git diff --git a/src/libgame/sound.c b/src/libgame/sound.c index ffb9925b..02995212 100644 --- a/src/libgame/sound.c +++ b/src/libgame/sound.c @@ -149,9 +149,14 @@ struct SoundControl typedef struct SoundControl SoundControl; static struct ArtworkListInfo *sound_info = NULL; +#if 0 static SoundInfo **Sound = NULL; +#endif static MusicInfo **Music = NULL; -static int num_sounds = 0, num_music = 0; +#if 0 +static int num_sounds = 0; +#endif +static int num_music = 0; static int stereo_volume[SOUND_MAX_LEFT2RIGHT + 1]; @@ -175,6 +180,8 @@ static void ReloadCustomSounds(); static void ReloadCustomMusic(); static void FreeSound(void *); +static SoundInfo *getSoundInfoEntryFromSoundID(int); + /* ------------------------------------------------------------------------- */ /* functions for native (non-SDL) Unix audio/mixer support */ @@ -253,13 +260,15 @@ static boolean ForkAudioProcess(void) return FALSE; } + 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(audio.mixer_pid) ? "child" : "parent")); + printf("PID: %d [%s]\n", getpid(),(IS_CHILD_PROCESS() ? "child" : "parent")); Delay(10000 * 0); #endif - if (IS_CHILD_PROCESS(audio.mixer_pid)) + if (IS_CHILD_PROCESS()) Mixer_Main(); /* this function never returns */ else close(audio.mixer_pipe[0]); /* no reading from pipe needed */ @@ -290,7 +299,7 @@ void UnixCloseAudio(void) if (audio.device_fd) close(audio.device_fd); - if (IS_PARENT_PROCESS(audio.mixer_pid)) + if (IS_PARENT_PROCESS() && HAS_CHILD_PROCESS()) kill(audio.mixer_pid, SIGTERM); } @@ -457,7 +466,7 @@ static void InitAudioDevice(struct AudioFormatInfo *afmt) static void SendSoundControlToMixerProcess(SoundControl *snd_ctrl) { - if (IS_CHILD_PROCESS(audio.mixer_pid)) + if (IS_CHILD_PROCESS()) return; if (write(audio.mixer_pipe[1], snd_ctrl, sizeof(SoundControl)) < 0) @@ -470,7 +479,7 @@ static void SendSoundControlToMixerProcess(SoundControl *snd_ctrl) static void ReadSoundControlFromMainProcess(SoundControl *snd_ctrl) { - if (IS_PARENT_PROCESS(audio.mixer_pid)) + if (IS_PARENT_PROCESS()) return; if (read(audio.mixer_pipe[0], snd_ctrl, sizeof(SoundControl)) @@ -492,7 +501,7 @@ static void WriteReloadInfoToPipe(char *set_identifier, int type) setup.override_level_sounds : setup.override_level_music); - if (IS_CHILD_PROCESS(audio.mixer_pid)) + if (IS_CHILD_PROCESS()) return; if (leveldir_current == NULL) /* should never happen */ @@ -814,6 +823,7 @@ static void Mixer_InsertSound(SoundControl snd_ctrl) { SoundInfo *snd_info; int i, k; + int num_sounds = getSoundListSize(); #if 0 printf("NEW SOUND %d ARRIVED [%d] [%d ACTIVE CHANNELS]\n", @@ -830,7 +840,13 @@ static void Mixer_InsertSound(SoundControl snd_ctrl) else if (snd_ctrl.nr >= num_sounds) return; +#if 0 snd_info = (IS_MUSIC(snd_ctrl) ? Music[snd_ctrl.nr] : Sound[snd_ctrl.nr]); +#else + snd_info = (IS_MUSIC(snd_ctrl) ? Music[snd_ctrl.nr] : + getSoundInfoEntryFromSoundID(snd_ctrl.nr)); +#endif + if (snd_info == NULL) return; @@ -1012,7 +1028,7 @@ static void HandleSoundRequest(SoundControl snd_ctrl) int i; #if defined(AUDIO_UNIX_NATIVE) - if (IS_PARENT_PROCESS(audio.mixer_pid)) + if (IS_PARENT_PROCESS()) { SendSoundControlToMixerProcess(&snd_ctrl); return; @@ -1780,6 +1796,17 @@ struct FileInfo *getSoundListEntry(int pos) &sound_info->dynamic_file_list[list_pos]); } +static SoundInfo *getSoundInfoEntryFromSoundID(int pos) +{ + int num_list_entries = sound_info->num_file_list_entries; + int list_pos = (pos < num_list_entries ? pos : pos - num_list_entries); + SoundInfo **snd_info = + (SoundInfo **)(pos < num_list_entries ? sound_info->artwork_list : + sound_info->dynamic_artwork_list); + + return snd_info[list_pos]; +} + int getSoundListPropertyMappingSize() { return sound_info->num_property_mapping_entries; @@ -1792,9 +1819,9 @@ struct PropertyMapping *getSoundListPropertyMapping() void InitSoundList(struct ConfigInfo *config_list, int num_file_list_entries, struct ConfigInfo *config_suffix_list, - char **base_prefixes, - char **ext1_suffixes, - char **ext2_suffixes) + char **base_prefixes, char **ext1_suffixes, + char **ext2_suffixes, char **ext3_suffixes, + char **ignore_tokens) { int i; @@ -1807,7 +1834,7 @@ void InitSoundList(struct ConfigInfo *config_list, int num_file_list_entries, sound_info->num_dynamic_file_list_entries = 0; sound_info->file_list = - getFileListFromConfigList(config_list, config_suffix_list, + getFileListFromConfigList(config_list, config_suffix_list, ignore_tokens, num_file_list_entries); sound_info->dynamic_file_list = NULL; @@ -1831,9 +1858,19 @@ void InitSoundList(struct ConfigInfo *config_list, int num_file_list_entries, for (i=0; ext2_suffixes[i] != NULL; i++) sound_info->num_ext2_suffixes++; + sound_info->num_ext3_suffixes = 0; + for (i=0; ext3_suffixes[i] != NULL; i++) + sound_info->num_ext3_suffixes++; + + sound_info->num_ignore_tokens = 0; + for (i=0; ignore_tokens[i] != NULL; i++) + sound_info->num_ignore_tokens++; + sound_info->base_prefixes = base_prefixes; sound_info->ext1_suffixes = ext1_suffixes; sound_info->ext2_suffixes = ext2_suffixes; + sound_info->ext3_suffixes = ext3_suffixes; + sound_info->ignore_tokens = ignore_tokens; sound_info->num_property_mapping_entries = 0; @@ -1854,8 +1891,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 } static MusicInfo *Load_MOD(char *filename) @@ -2068,6 +2107,10 @@ static void ReloadCustomSounds() LoadArtworkConfig(sound_info); ReloadCustomArtworkList(sound_info); + +#if 0 + num_sounds = getSoundListSize(); +#endif } static void ReloadCustomMusic()