X-Git-Url: https://git.artsoft.org/?a=blobdiff_plain;f=src%2Flibgame%2Fsound.c;h=6eb1de14df23ca62529752743f0fd5ef64f406d5;hb=ea6e4698905d7440a265e323d03cf13fc323c44b;hp=a4b31c063adbbcabd80ca89f865649fda9926be4;hpb=1e5cae5e3ab889c3bcba80a065c6d7ba1e6d28a2;p=rocksndiamonds.git diff --git a/src/libgame/sound.c b/src/libgame/sound.c index a4b31c06..6eb1de14 100644 --- a/src/libgame/sound.c +++ b/src/libgame/sound.c @@ -70,6 +70,25 @@ #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 { @@ -132,8 +151,16 @@ 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]; @@ -244,6 +271,11 @@ 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 @@ -799,6 +831,22 @@ 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 */ @@ -823,6 +871,32 @@ 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; @@ -836,6 +910,10 @@ 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; @@ -849,6 +927,10 @@ 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)) { @@ -856,6 +938,10 @@ 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); @@ -865,12 +951,21 @@ 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) { @@ -957,8 +1052,16 @@ 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) { @@ -1305,9 +1408,11 @@ 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) @@ -1533,6 +1638,10 @@ 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) @@ -1817,13 +1926,25 @@ 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); @@ -1986,6 +2107,11 @@ 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, @@ -2183,24 +2309,30 @@ void StopSoundExt(int nr, int state) static void ReloadCustomSounds() { #if 0 - printf("::: reloading sounds '%s' ...\n", artwork.snd_current_identifier); + printf("DEBUG: 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("::: reloading music '%s' ...\n", artwork.mus_current_identifier); + printf("DEBUG: 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)