#include "sound.h"
#include "misc.h"
#include "setup.h"
+#include "text.h"
/* expiration time (in milliseconds) for sound loops */
#define SOUND_LOOP_EXPIRATION_TIME 200
-#if defined(TARGET_SDL)
/* one second fading interval == 1000 ticks (milliseconds) */
#define SOUND_FADING_INTERVAL 1000
-#define SOUND_MAX_VOLUME SDL_MIX_MAXVOLUME
-#endif
#if defined(AUDIO_STREAMING_DSP)
-#define SOUND_FADING_VOLUME_STEP (PSND_MAX_VOLUME / 40)
+#define SOUND_FADING_VOLUME_STEP (SOUND_MAX_VOLUME / 40)
#define SOUND_FADING_VOLUME_THRESHOLD (SOUND_FADING_VOLUME_STEP * 2)
#endif
#define DEVICENAME_AUDIO "/dev/audio"
#define DEVICENAME_AUDIOCTL "/dev/audioCtl"
+#define SOUND_VOLUME_LEFT(x) (stereo_volume[x])
+#define SOUND_VOLUME_RIGHT(x) (stereo_volume[SOUND_MAX_LEFT2RIGHT-x])
+
+#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
};
#endif
+#if defined(AUDIO_UNIX_NATIVE)
+struct SoundHeader_WAV
+{
+ unsigned short compression_code;
+ unsigned short num_channels;
+ unsigned long sample_rate;
+ unsigned long bytes_per_second;
+ unsigned short block_align;
+ unsigned short bits_per_sample;
+};
+#endif
+
struct AudioFormatInfo
{
boolean stereo; /* availability of stereo sound */
int type;
int format;
- long data_len;
- void *data_ptr;
+ void *data_ptr; /* pointer to first sample (8 or 16 bit) */
+ long data_len; /* number of samples, NOT number of bytes */
};
typedef struct SampleInfo SoundInfo;
typedef struct SampleInfo MusicInfo;
int type;
int format;
- long data_len;
- void *data_ptr;
+ void *data_ptr; /* pointer to first sample (8 or 16 bit) */
+ long data_len; /* number of samples, NOT number of bytes */
-#if defined(PLATFORM_MSDOS)
+#if defined(TARGET_ALLEGRO)
int voice;
#endif
};
static SoundInfo **Sound = NULL;
static MusicInfo **Music = NULL;
static int num_sounds = 0, num_music = 0;
+static int stereo_volume[SOUND_MAX_LEFT2RIGHT + 1];
/* ========================================================================= */
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;
+ boolean override_level_artwork = (type == SND_CTRL_RELOAD_SOUNDS ?
+ setup.override_level_sounds :
+ setup.override_level_music);
if (IS_CHILD_PROCESS(audio.mixer_pid))
return;
sizeof(snd_ctrl)) < 0 ||
write(audio.mixer_pipe[1], set_name,
snd_ctrl.data_len) < 0 ||
+ write(audio.mixer_pipe[1], &override_level_artwork,
+ sizeof(boolean)) < 0 ||
write(audio.mixer_pipe[1], leveldir_current,
sizeof(TreeInfo)) < 0 ||
write(audio.mixer_pipe[1], ti,
TreeInfo *ti = *ti_ptr;
unsigned long str_size1, str_size2, str_size3;
static char *set_name = NULL;
+ boolean *override_level_artwork = (snd_ctrl->state & SND_CTRL_RELOAD_SOUNDS ?
+ &setup.override_level_sounds :
+ &setup.override_level_music);
if (set_name)
free(set_name);
if (read(audio.mixer_pipe[0], set_name,
snd_ctrl->data_len) != snd_ctrl->data_len ||
+ read(audio.mixer_pipe[0], override_level_artwork,
+ sizeof(boolean)) != sizeof(boolean) ||
read(audio.mixer_pipe[0], leveldir_current,
sizeof(TreeInfo)) != sizeof(TreeInfo) ||
read(audio.mixer_pipe[0], ti,
Error(ERR_EXIT_SOUND_SERVER, "broken pipe -- no sounds");
if (snd_ctrl->state & SND_CTRL_RELOAD_SOUNDS)
- artwork.sounds_set_current = set_name;
+ artwork.sounds_set_current_name = set_name;
else
- artwork.music_set_current = set_name;
+ artwork.music_set_current_name = set_name;
}
#endif /* AUDIO_UNIX_NATIVE */
return FALSE;
}
-static void Mixer_PlayChannel(int channel)
+static boolean Mixer_AllocateChannel(int channel)
{
- /* start with inactive channel in case something goes wrong */
- mixer[channel].active = FALSE;
+#if defined(TARGET_ALLEGRO)
+ mixer[channel].voice = allocate_voice((SAMPLE *)mixer[channel].data_ptr);
+ if (mixer[channel].voice < 0)
+ return FALSE;
+#endif
- if (mixer[channel].type != MUS_TYPE_WAV)
- return;
+ return TRUE;
+}
+static void Mixer_SetChannelProperties(int channel)
+{
+#if defined(TARGET_SDL)
+ Mix_Volume(channel, mixer[channel].volume);
+ Mix_SetPanning(channel,
+ SOUND_VOLUME_LEFT(mixer[channel].stereo_position),
+ SOUND_VOLUME_RIGHT(mixer[channel].stereo_position));
+#elif defined(TARGET_ALLEGRO)
+ voice_set_volume(mixer[channel].voice, mixer[channel].volume);
+ voice_set_pan(mixer[channel].voice, mixer[channel].stereo_position);
+#endif
+}
+
+static void Mixer_StartChannel(int channel)
+{
#if defined(TARGET_SDL)
- Mix_Volume(channel, SOUND_MAX_VOLUME);
Mix_PlayChannel(channel, mixer[channel].data_ptr,
IS_LOOP(mixer[channel]) ? -1 : 0);
-#elif defined(PLATFORM_MSDOS)
- mixer[channel].voice = allocate_voice((SAMPLE *)mixer[channel].data_ptr);
- if (mixer[channel].voice < 0)
- return;
-
+#elif defined(TARGET_ALLEGRO)
if (IS_LOOP(mixer[channel]))
voice_set_playmode(mixer[channel].voice, PLAYMODE_LOOP);
- voice_set_volume(mixer[channel].voice, mixer[channel].volume);
- voice_set_pan(mixer[channel].voice, mixer[channel].stereo_position);
voice_start(mixer[channel].voice);
#endif
+}
+
+static void Mixer_PlayChannel(int channel)
+{
+ /* start with inactive channel in case something goes wrong */
+ mixer[channel].active = FALSE;
+
+ if (mixer[channel].type != MUS_TYPE_WAV)
+ return;
+
+ if (!Mixer_AllocateChannel(channel))
+ return;
+
+ Mixer_SetChannelProperties(channel);
+ Mixer_StartChannel(channel);
Mixer_ResetChannelExpiration(channel);
#if defined(TARGET_SDL)
Mix_HaltChannel(channel);
-#elif defined(PLATFORM_MSDOS)
+#elif defined(TARGET_ALLEGRO)
voice_set_volume(mixer[channel].voice, 0);
deallocate_voice(mixer[channel].voice);
#endif
#if defined(TARGET_SDL)
Mix_FadeOutChannel(channel, SOUND_FADING_INTERVAL);
-#elif defined(PLATFORM_MSDOS)
+#elif defined(TARGET_ALLEGRO)
if (voice_check(mixer[channel].voice))
voice_ramp_volume(mixer[channel].voice, SOUND_FADING_INTERVAL, 0);
#endif
return;
mixer[channel].state &= ~SND_CTRL_FADE;
- mixer[channel].volume = PSND_MAX_VOLUME;
+ mixer[channel].volume = SOUND_MAX_VOLUME;
#if defined(TARGET_SDL)
Mix_ExpireChannel(channel, -1);
- Mix_Volume(channel, SOUND_MAX_VOLUME);
+ Mix_Volume(channel, mixer[channel].volume);
#elif defined(TARGET_ALLEGRO)
voice_stop_volumeramp(mixer[channel].voice);
voice_ramp_volume(mixer[channel].voice, SOUND_FADING_INTERVAL,
/* play music samples on a dedicated music channel */
if (IS_MUSIC(snd_ctrl))
{
+#if 0
+ printf("PLAY MUSIC WITH VOLUME/STEREO %d/%d\n",
+ snd_ctrl.volume, snd_ctrl.stereo_position);
+#endif
+
mixer[audio.music_channel] = snd_ctrl;
Mixer_PlayMusicChannel();
return;
}
- /* check if sound is already being played (and how often) */
+ /* check if (and how often) this sound sample is already playing */
for (k=0, i=audio.first_sound_channel; i<audio.num_channels; i++)
- if (mixer[i].active && mixer[i].nr == snd_ctrl.nr)
+ if (mixer[i].active && SAME_SOUND_DATA(mixer[i], snd_ctrl))
k++;
#if 0
{
for(i=audio.first_sound_channel; i<audio.num_channels; i++)
{
- if (mixer[i].active && mixer[i].nr == snd_ctrl.nr)
+ 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 1
- Mixer_ResetChannelExpiration(i);
-#endif
if (IS_FADING(mixer[i]))
Mixer_UnFadeChannel(i);
+
+ /* restore settings like volume and stereo position */
+ mixer[i].volume = snd_ctrl.volume;
+ mixer[i].stereo_position = snd_ctrl.stereo_position;
+
+ 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)
{
int playing_time = playing_current - mixer[i].playing_starttime;
int actual;
- if (!mixer[i].active || mixer[i].nr != snd_ctrl.nr)
+ if (!mixer[i].active || !SAME_SOUND_NR(mixer[i], snd_ctrl))
continue;
actual = 1000 * playing_time / mixer[i].data_len;
}
for(i=audio.first_sound_channel; i<audio.num_channels; i++)
- if (mixer[i].nr == snd_ctrl.nr || ALL_SOUNDS(snd_ctrl))
+ if (SAME_SOUND_NR(mixer[i], snd_ctrl) || ALL_SOUNDS(snd_ctrl))
Mixer_FadeChannel(i);
}
else if (IS_STOPPING(snd_ctrl)) /* stop existing sound or music */
}
for(i=audio.first_sound_channel; i<audio.num_channels; i++)
- if (mixer[i].nr == snd_ctrl.nr || ALL_SOUNDS(snd_ctrl))
+ if (SAME_SOUND_NR(mixer[i], snd_ctrl) || ALL_SOUNDS(snd_ctrl))
Mixer_StopChannel(i);
#if defined(AUDIO_UNIX_NATIVE)
void StartMixer(void)
{
+ int i;
+
#if 0
SDL_version compile_version;
const SDL_version *link_version;
if (!audio.sound_available)
return;
+ /* initialize stereo position conversion information */
+ for(i=0; i<=SOUND_MAX_LEFT2RIGHT; i++)
+ stereo_volume[i] =
+ (int)sqrt((float)(SOUND_MAX_LEFT2RIGHT * SOUND_MAX_LEFT2RIGHT - i * i));
+
#if defined(AUDIO_UNIX_NATIVE)
if (!ForkAudioProcess())
audio.sound_available = FALSE;
#if defined(AUDIO_STREAMING_DSP)
static void Mixer_Main_DSP()
{
- static int stereo_volume[PSND_MAX_LEFT2RIGHT + 1];
- static boolean stereo_volume_calculated = FALSE;
static short premix_first_buffer[SND_BLOCKSIZE];
static short premix_left_buffer[SND_BLOCKSIZE];
static short premix_right_buffer[SND_BLOCKSIZE];
int max_sample_size;
int i, j;
- if (!stereo_volume_calculated)
- {
- for(i=0; i<=PSND_MAX_LEFT2RIGHT; i++)
- stereo_volume[i] =
- (int)sqrt((float)(PSND_MAX_LEFT2RIGHT * PSND_MAX_LEFT2RIGHT - i * i));
-
- stereo_volume_calculated = TRUE;
- }
-
if (!mixer_active_channels)
return;
mixer[i].volume -= SOUND_FADING_VOLUME_STEP;
/* adjust volume of actual sound sample */
- if (mixer[i].volume != PSND_MAX_VOLUME)
+ if (mixer[i].volume != SOUND_MAX_VOLUME)
for(j=0; j<sample_size; j++)
premix_first_buffer[j] =
- (mixer[i].volume * (long)premix_first_buffer[j])
- >> PSND_MAX_VOLUME_BITS;
+ mixer[i].volume * (long)premix_first_buffer[j] / SOUND_MAX_VOLUME;
/* fill the last mixing buffer with stereo or mono sound */
if (stereo)
{
- int middle_pos = PSND_MAX_LEFT2RIGHT / 2;
- int left_volume = stereo_volume[middle_pos + mixer[i].stereo_position];
- int right_volume= stereo_volume[middle_pos - mixer[i].stereo_position];
+ int left_volume = SOUND_VOLUME_LEFT(mixer[i].stereo_position);
+ int right_volume = SOUND_VOLUME_RIGHT(mixer[i].stereo_position);
for(j=0; j<sample_size; j++)
{
premix_left_buffer[j] =
- (left_volume * premix_first_buffer[j])
- >> PSND_MAX_LEFT2RIGHT_BITS;
+ left_volume * premix_first_buffer[j] / SOUND_MAX_LEFT2RIGHT;
premix_right_buffer[j] =
- (right_volume * premix_first_buffer[j])
- >> PSND_MAX_LEFT2RIGHT_BITS;
+ right_volume * premix_first_buffer[j] / SOUND_MAX_LEFT2RIGHT;
premix_last_buffer[2 * j + 0] += premix_left_buffer[j];
premix_last_buffer[2 * j + 1] += premix_right_buffer[j];
premix_first_buffer);
/* adjust volume of actual sound sample */
- if (mixer[i].volume != PSND_MAX_VOLUME)
+ if (mixer[i].volume != SOUND_MAX_VOLUME)
for(j=0; j<sample_size; j++)
premix_first_buffer[j] =
- (mixer[i].volume * (long)premix_first_buffer[j])
- >> PSND_MAX_VOLUME_BITS;
+ mixer[i].volume * (long)premix_first_buffer[j] / SOUND_MAX_VOLUME;
/* might be needed for u-law /dev/audio */
#if 0
static SoundInfo *Load_WAV(char *filename)
{
SoundInfo *snd_info;
-#if !defined(TARGET_SDL) && !defined(PLATFORM_MSDOS)
+#if defined(AUDIO_UNIX_NATIVE)
+ struct SoundHeader_WAV header;
+#if 0
byte sound_header_buffer[WAV_HEADER_SIZE];
+ int i;
+#endif
char chunk_name[CHUNK_ID_LEN + 1];
int chunk_size;
FILE *file;
- int i;
#endif
if (!audio.sound_available)
}
/* read chunk id "RIFF" */
- getFileChunk(file, chunk_name, &chunk_size, BYTE_ORDER_LITTLE_ENDIAN);
+ getFileChunkLE(file, chunk_name, &chunk_size);
if (strcmp(chunk_name, "RIFF") != 0)
{
Error(ERR_WARN, "missing 'RIFF' chunk of sound file '%s'", filename);
}
/* read "RIFF" type id "WAVE" */
- getFileChunk(file, chunk_name, NULL, BYTE_ORDER_LITTLE_ENDIAN);
+ getFileChunkLE(file, chunk_name, NULL);
if (strcmp(chunk_name, "WAVE") != 0)
{
Error(ERR_WARN, "missing 'WAVE' type ID of sound file '%s'", filename);
return NULL;
}
- while (getFileChunk(file, chunk_name, &chunk_size, BYTE_ORDER_LITTLE_ENDIAN))
+ while (getFileChunkLE(file, chunk_name, &chunk_size))
{
if (strcmp(chunk_name, "fmt ") == 0)
{
- /* read header information */
- for (i=0; i < MIN(chunk_size, WAV_HEADER_SIZE); i++)
- sound_header_buffer[i] = fgetc(file);
+ if (chunk_size < WAV_HEADER_SIZE)
+ {
+ Error(ERR_WARN, "sound file '%s': chunk 'fmt ' too short", filename);
+ fclose(file);
+ free(snd_info);
+ return NULL;
+ }
+
+ header.compression_code = getFile16BitLE(file);
+ header.num_channels = getFile16BitLE(file);
+ header.sample_rate = getFile32BitLE(file);
+ header.bytes_per_second = getFile32BitLE(file);
+ header.block_align = getFile16BitLE(file);
+ header.bits_per_sample = getFile16BitLE(file);
if (chunk_size > WAV_HEADER_SIZE)
ReadUnusedBytesFromFile(file, chunk_size - WAV_HEADER_SIZE);
+
+ if (header.compression_code != 1)
+ {
+ Error(ERR_WARN, "sound file '%s': compression code %d not supported",
+ filename, header.compression_code);
+ fclose(file);
+ free(snd_info);
+ return NULL;
+ }
+
+ if (header.num_channels != 1)
+ {
+ Error(ERR_WARN, "sound file '%s': number of %d channels not supported",
+ filename, header.num_channels);
+ fclose(file);
+ free(snd_info);
+ return NULL;
+ }
+
+ if (header.bits_per_sample != 8 && header.bits_per_sample != 16)
+ {
+ Error(ERR_WARN, "sound file '%s': %d bits per sample not supported",
+ filename, header.bits_per_sample);
+ fclose(file);
+ free(snd_info);
+ return NULL;
+ }
+
+ /* warn, but accept wrong sample rate (may be only slightly different) */
+ if (header.sample_rate != DEFAULT_AUDIO_SAMPLE_RATE)
+ Error(ERR_WARN, "sound file '%s': wrong sample rate %d instead of %d",
+ filename, header.sample_rate, DEFAULT_AUDIO_SAMPLE_RATE);
+
+#if 0
+ printf("WAV file: '%s'\n", filename);
+ printf(" Compression code: %d'\n", header.compression_code);
+ printf(" Number of channels: %d'\n", header.num_channels);
+ printf(" Sample rate: %ld'\n", header.sample_rate);
+ printf(" Average bytes per second: %ld'\n", header.bytes_per_second);
+ printf(" Block align: %d'\n", header.block_align);
+ printf(" Significant bits per sample: %d'\n", header.bits_per_sample);
+#endif
}
else if (strcmp(chunk_name, "data") == 0)
{
return NULL;
}
- snd_info->format = AUDIO_FORMAT_U8;
+ if (header.bits_per_sample == 8)
+ snd_info->format = AUDIO_FORMAT_U8;
+ else /* header.bits_per_sample == 16 */
+ {
+ snd_info->format = AUDIO_FORMAT_S16;
+ snd_info->data_len /= 2; /* correct number of samples */
+ }
#endif /* AUDIO_UNIX_NATIVE */
{
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);
void LoadCustomMusic(void)
{
+ static boolean draw_init_text = TRUE; /* only draw at startup */
+ static char *last_music_directory = NULL;
char *music_directory = getCustomMusicDirectory();
DIR *dir;
struct dirent *dir_entry;
if (!audio.sound_available)
return;
+ if (last_music_directory != NULL &&
+ strcmp(last_music_directory, music_directory) == 0)
+ return; /* old and new music directory are the same */
+
+ last_music_directory = music_directory;
+
+ FreeAllMusic();
+
if ((dir = opendir(music_directory)) == NULL)
{
Error(ERR_WARN, "cannot read music directory '%s'", music_directory);
return;
}
+ if (draw_init_text)
+ DrawInitText("Loading music:", 120, FC_GREEN);
+
while ((dir_entry = readdir(dir)) != NULL) /* loop until last dir entry */
{
char *basename = dir_entry->d_name;
char *filename = getPath2(music_directory, basename);
MusicInfo *mus_info = NULL;
+ if (draw_init_text)
+ DrawInitText(basename, 150, FC_YELLOW);
+
if (FileIsSound(basename))
mus_info = Load_WAV(filename);
else if (FileIsMusic(basename))
closedir(dir);
+ draw_init_text = FALSE;
+
if (num_music == 0)
Error(ERR_WARN, "cannot find any valid music files in directory '%s'",
music_directory);
void PlaySound(int nr)
{
- PlaySoundExt(nr, PSND_MAX_VOLUME, PSND_MIDDLE, SND_CTRL_PLAY_SOUND);
+ PlaySoundExt(nr, SOUND_MAX_VOLUME, SOUND_MIDDLE, SND_CTRL_PLAY_SOUND);
}
void PlaySoundStereo(int nr, int stereo_position)
{
- PlaySoundExt(nr, PSND_MAX_VOLUME, stereo_position, SND_CTRL_PLAY_SOUND);
+ PlaySoundExt(nr, SOUND_MAX_VOLUME, stereo_position, SND_CTRL_PLAY_SOUND);
}
void PlaySoundLoop(int nr)
{
- PlaySoundExt(nr, PSND_MAX_VOLUME, PSND_MIDDLE, SND_CTRL_PLAY_LOOP);
+ PlaySoundExt(nr, SOUND_MAX_VOLUME, SOUND_MIDDLE, SND_CTRL_PLAY_LOOP);
}
void PlaySoundMusic(int nr)
{
- PlaySoundExt(nr, PSND_MAX_VOLUME, PSND_MIDDLE, SND_CTRL_PLAY_MUSIC);
+ PlaySoundExt(nr, SOUND_MAX_VOLUME, SOUND_MIDDLE, SND_CTRL_PLAY_MUSIC);
}
void PlaySoundExt(int nr, int volume, int stereo_position, int state)
audio.sound_deactivated)
return;
- if (volume < PSND_MIN_VOLUME)
- volume = PSND_MIN_VOLUME;
- else if (volume > PSND_MAX_VOLUME)
- volume = PSND_MAX_VOLUME;
+ if (volume < SOUND_MIN_VOLUME)
+ volume = SOUND_MIN_VOLUME;
+ else if (volume > SOUND_MAX_VOLUME)
+ volume = SOUND_MAX_VOLUME;
- if (stereo_position < PSND_MAX_LEFT)
- stereo_position = PSND_MAX_LEFT;
- else if (stereo_position > PSND_MAX_RIGHT)
- stereo_position = PSND_MAX_RIGHT;
+ if (stereo_position < SOUND_MAX_LEFT)
+ stereo_position = SOUND_MAX_LEFT;
+ else if (stereo_position > SOUND_MAX_RIGHT)
+ stereo_position = SOUND_MAX_RIGHT;
snd_ctrl.active = TRUE;
snd_ctrl.nr = nr;
struct SetupFileList *setup_file_list;
int i;
+#if 0
+ printf("GOT CUSTOM SOUND CONFIG FILE '%s'\n", filename);
+#endif
+
/* always start with reliable default values */
for (i=0; i<num_sounds; i++)
sound_effect[i].filename = NULL;
freeSetupFileList(setup_file_list);
-#if 1
+#if 0
for (i=0; i<num_sounds; i++)
{
printf("'%s' ", sound_effect[i].text);
static void ReloadCustomSounds()
{
+ static boolean draw_init_text = TRUE; /* only draw at startup */
int i;
#if 0
- printf("DEBUG: reloading sounds '%s' ...\n", artwork.sounds_set_current);
+ printf("DEBUG: reloading sounds '%s' ...\n",artwork.sounds_set_current_name);
#endif
LoadSoundsInfo();
+ if (draw_init_text)
+ DrawInitText("Loading sounds:", 120, FC_GREEN);
+
#if 0
printf("DEBUG: reloading %d sounds ...\n", num_sounds);
#endif
for(i=0; i<num_sounds; i++)
{
+ if (draw_init_text)
+ DrawInitText(sound_effect[i].text, 150, FC_YELLOW);
+
if (sound_effect[i].filename)
LoadSoundToList(sound_effect[i].filename, i);
else
LoadSoundToList(sound_effect[i].default_filename, i);
}
+ draw_init_text = FALSE;
+
/*
printf("list size == %d\n", getNumNodes(SoundFileList));
*/
static void ReloadCustomMusic()
{
#if 0
- printf("DEBUG: reloading music '%s' ...\n", artwork.music_set_current);
+ printf("DEBUG: reloading music '%s' ...\n", artwork.music_set_current_name);
#endif
+#if 0
+ /* this is done directly in LoadCustomMusic() now */
FreeAllMusic();
+#endif
LoadCustomMusic();
}
if (!audio.sound_available)
return;
-#if defined(TARGET_SDL) || defined(TARGET_ALLEGRO)
- ReloadCustomSounds();
-#elif defined(AUDIO_UNIX_NATIVE)
+#if defined(AUDIO_UNIX_NATIVE)
WriteReloadInfoToPipe(set_name, SND_CTRL_RELOAD_SOUNDS);
+#else
+ ReloadCustomSounds();
#endif
}
if (!audio.music_available)
return;
-#if defined(TARGET_SDL) || defined(TARGET_ALLEGRO)
- ReloadCustomMusic();
-#elif defined(AUDIO_UNIX_NATIVE)
+#if defined(AUDIO_UNIX_NATIVE)
WriteReloadInfoToPipe(set_name, SND_CTRL_RELOAD_MUSIC);
+#else
+ ReloadCustomMusic();
#endif
}