static void InitLevelInfo(void);
static void InitArtworkInfo(void);
static void InitNetworkServer(void);
+static void InitSoundServer(void);
static void InitSound(void);
static void InitGfx(void);
static void InitGfxBackground(void);
InitArtworkInfo(); /* needed before loading gfx, sound & music */
InitCounter();
- InitSound();
+ InitSoundServer();
InitJoysticks();
InitRND(NEW_RANDOMIZE);
InitLevelInfo();
InitGadgets(); /* needs to know number of level series */
+ InitSound(); /* needs to know current level directory */
InitGfxBackground();
InitToons();
{
int i;
- printf("DEBUG: reloading sounds '%s' [%d] ...\n",
- artwork.sounds_set_current, audio.soundserver_pid);
-
#if 1
+ printf("DEBUG: reloading sounds '%s' ...\n", artwork.sounds_set_current);
+#endif
+
FreeAllSounds();
InitSoundList(NUM_SOUNDS);
for(i=0; i<NUM_SOUNDS; i++)
LoadSoundToList(sound_name[i], i);
-#endif
}
static void ReloadCustomMusic()
{
- printf("DEBUG: reloading music '%s' [%d] ...\n",
- artwork.music_set_current, audio.soundserver_pid);
-
#if 1
+ printf("DEBUG: reloading music '%s' ...\n", artwork.music_set_current);
+#endif
+
FreeAllMusic();
LoadCustomMusic();
-#endif
}
-void InitSound()
+static void InitSoundServer()
{
- int i;
-
OpenAudio();
SetAudioReloadFunctions(ReloadCustomSounds, ReloadCustomMusic);
-#if 1
- InitSoundList(NUM_SOUNDS);
-
- for(i=0; i<NUM_SOUNDS; i++)
- LoadSoundToList(sound_name[i], i);
-
- LoadCustomMusic();
-#endif
-
StartSoundserver();
+}
-#if 0
+static void InitSound()
+{
InitReloadSounds(artwork.snd_current->name);
InitReloadMusic(artwork.mus_current->name);
-#endif
}
-void InitTileClipmasks()
+static void InitTileClipmasks()
{
#if defined(TARGET_X11)
- GC copy_clipmask_gc;
XGCValues clip_gc_values;
unsigned long clip_gc_valuemask;
#if defined(TARGET_X11_NATIVE)
+ GC copy_clipmask_gc;
+
static struct
{
int start;
int i;
StopSounds();
- CloseAudio();
FreeAllSounds();
FreeAllMusic();
+ CloseAudio(); /* called after freeing sounds (needed for SDL) */
FreeTileClipmasks();
for(i=0; i<NUM_BITMAPS; i++)
static boolean InitAudioDevice_HPUX();
#elif defined(PLATFORM_MSDOS)
static void SoundServer_InsertNewSound(struct SoundControl);
-static void SoundServer_StopSound(int);
+static void SoundServer_StopSound(struct SoundControl);
static void SoundServer_StopAllSounds();
#endif
TreeInfo *ti = *ti_ptr;
unsigned long str_size1, str_size2, str_size3;
- printf("B\n");
-
if (leveldir_current == NULL)
leveldir_current = checked_calloc(sizeof(TreeInfo));
- printf("B.1\n");
if (ti == NULL)
ti = *ti_ptr = checked_calloc(sizeof(TreeInfo));
- printf("B.2\n");
if (leveldir_current->fullpath != NULL)
free(leveldir_current->fullpath);
- printf("B.3 ['%s']\n", ti->basepath);
-#if 0
if (ti->basepath != NULL)
free(ti->basepath);
-#endif
- printf("B.4\n");
if (ti->fullpath != NULL)
free(ti->fullpath);
- printf("B.5\n");
-
- printf("C\n");
if (read(audio.soundserver_pipe[0], set_name,
snd_ctrl.data_len) != snd_ctrl.data_len ||
sizeof(unsigned long)) != sizeof(unsigned long))
Error(ERR_EXIT_SOUND_SERVER, "broken pipe -- no sounds");
- printf("D\n");
-
leveldir_current->fullpath = checked_calloc(str_size1);
ti->basepath = checked_calloc(str_size2);
ti->fullpath = checked_calloc(str_size3);
str_size3) != str_size3)
Error(ERR_EXIT_SOUND_SERVER, "broken pipe -- no sounds");
- printf("E\n");
-
InitPlaylist();
close(audio.device_fd);
- printf("X\n");
-
if (snd_ctrl.reload_sounds)
{
artwork.sounds_set_current = set_name;
playing_sounds++;
#if defined(PLATFORM_MSDOS)
- playlist[i].voice = allocate_voice(playlist[i].data_ptr);
+ playlist[i].voice = allocate_voice((SAMPLE *)playlist[i].data_ptr);
if (snd_ctrl.loop)
voice_set_playmode(playlist[i].voice, PLAYMODE_LOOP);
return FALSE;
}
- printf("-> '%s'\n", filename);
-
return Load_WAV(filename);
}
char *filename = getPath2(music_directory, basename);
MusicInfo *mus_info = NULL;
- if (FileIsSound(filename))
+ if (FileIsSound(basename))
mus_info = Load_WAV(filename);
- else if (FileIsMusic(filename))
+ else if (FileIsMusic(basename))
mus_info = Load_MOD(filename);
free(filename);
#if defined(TARGET_SDL)
+ nr = nr % num_music;
+
if (Music[nr]->type == MUS_TYPE_MOD)
{
Mix_PlayMusic(Music[nr]->data_ptr, -1);
static void InitReloadSoundsOrMusic(char *set_name, int type)
{
+#if defined(PLATFORM_UNIX) && !defined(TARGET_SDL)
struct SoundControl snd_ctrl = emptySoundControl;
TreeInfo *ti =
(type == SND_RELOAD_SOUNDS ? artwork.snd_current : artwork.mus_current);
unsigned long str_size1 = strlen(leveldir_current->fullpath) + 1;
unsigned long str_size2 = strlen(ti->basepath) + 1;
unsigned long str_size3 = strlen(ti->fullpath) + 1;
+#endif
if (!audio.sound_available)
return;
- if (leveldir_current == NULL)
- Error(ERR_EXIT, "leveldir_current == NULL");
-
- snd_ctrl.reload_sounds = (type == SND_RELOAD_SOUNDS);
- snd_ctrl.reload_music = (type == SND_RELOAD_MUSIC);
- snd_ctrl.data_len = strlen(set_name) + 1;
-
#if defined(TARGET_SDL) || defined(TARGET_ALLEGRO)
if (type == SND_RELOAD_SOUNDS)
- audio.audio.func_reload_sounds();
+ audio.func_reload_sounds();
else
- audio.audio.func_reload_music();
+ audio.func_reload_music();
#elif defined(PLATFORM_UNIX)
if (audio.soundserver_pid == 0) /* we are child process */
return;
+ if (leveldir_current == NULL) /* should never happen */
+ Error(ERR_EXIT, "leveldir_current == NULL");
+
+ snd_ctrl.reload_sounds = (type == SND_RELOAD_SOUNDS);
+ snd_ctrl.reload_music = (type == SND_RELOAD_MUSIC);
+ snd_ctrl.data_len = strlen(set_name) + 1;
+
if (write(audio.soundserver_pipe[1], &snd_ctrl,
sizeof(snd_ctrl)) < 0 ||
write(audio.soundserver_pipe[1], set_name,
audio.sound_available = audio.sound_enabled = FALSE;
return;
}
-
- printf("A\n");
-
#endif
}
FreeSound(Sound[i]);
free(Sound);
+
Sound = NULL;
+ num_sounds = 0;
}
void FreeAllMusic()
FreeMusic(Music[i]);
free(Music);
+
Music = NULL;
+ num_music = 0;
}
/* THE STUFF ABOVE IS ONLY USED BY THE MAIN PROCESS */