#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)
+#define SAME_SOUND_NR(x, y) ((x).nr == (y).nr)
+#define SAME_SOUND_DATA(x, y) ((x).data_ptr == (y).data_ptr)
-#define SOUND_VOLUME_FROM_PERCENT(v,p) ((p) < 0 ? SOUND_MIN_VOLUME : \
+#define SOUND_VOLUME_FROM_PERCENT(v, p) ((p) < 0 ? SOUND_MIN_VOLUME : \
(p) > 100 ? (v) : \
(p) * (v) / 100)
#define SOUND_VOLUME_LOOPS(v) SOUND_VOLUME_FROM_PERCENT(v, setup.volume_loops)
#define SOUND_VOLUME_MUSIC(v) SOUND_VOLUME_FROM_PERCENT(v, setup.volume_music)
-#define SETUP_SOUND_VOLUME(v,s) ((s) & SND_CTRL_MUSIC ? \
+#define SETUP_SOUND_VOLUME(v, s) ((s) & SND_CTRL_MUSIC ? \
SOUND_VOLUME_MUSIC(v) : \
(s) & SND_CTRL_LOOP ? \
SOUND_VOLUME_LOOPS(v) : \
if (expire_loop_sounds &&
IS_LOOP(mixer[channel]) && !IS_MUSIC(mixer[channel]) &&
- DelayReached(&mixer[channel].playing_starttime,
- SOUND_LOOP_EXPIRATION_TIME))
+ DelayReachedExt2(&mixer[channel].playing_starttime,
+ SOUND_LOOP_EXPIRATION_TIME, Counter()))
return TRUE;
if (!Mix_Playing(channel))
return NULL;
}
+static int compareMusicInfo(const void *object1, const void *object2)
+{
+ const MusicInfo *mi1 = *((MusicInfo **)object1);
+ const MusicInfo *mi2 = *((MusicInfo **)object2);
+
+ return strcmp(mi1->source_filename, mi2->source_filename);
+}
+
static void LoadCustomMusic_NoConf(void)
{
static boolean draw_init_text = TRUE; // only draw at startup
static char *last_music_directory = NULL;
- char *music_directory = getCustomMusicDirectory();
+ char *music_directory = getCustomMusicDirectory_NoConf();
Directory *dir;
DirectoryEntry *dir_entry;
int num_music = getMusicListSize();
FreeAllMusic_NoConf();
- if ((dir = openDirectory(music_directory)) == NULL)
+ if (music_directory == NULL)
{
- Warn("cannot read music directory '%s'", music_directory);
+ Warn("cannot find music directory with unconfigured music");
- audio.music_available = FALSE;
+ return;
+ }
+ else if ((dir = openDirectory(music_directory)) == NULL)
+ {
+ Warn("cannot read music directory '%s'", music_directory);
return;
}
closeDirectory(dir);
+ // sort music files by filename
+ qsort(Music_NoConf, num_music_noconf, sizeof(MusicInfo *), compareMusicInfo);
+
draw_init_text = FALSE;
}
music_info->num_dynamic_file_list_entries);
}
+int getMusicListSize_NoConf(void)
+{
+ return num_music_noconf;
+}
+
struct FileInfo *getSoundListEntry(int pos)
{
int num_sounds = getSoundListSize();
return mus_info[list_pos];
}
+char *getSoundInfoEntryFilename(int pos)
+{
+ SoundInfo *snd_info = getSoundInfoEntryFromSoundID(pos);
+
+ if (snd_info == NULL)
+ return NULL;
+
+ return getBaseNamePtr(snd_info->source_filename);
+}
+
char *getMusicInfoEntryFilename(int pos)
{
MusicInfo *mus_info = getMusicInfoEntryFromMusicID(pos);
LoadCustomMusic_NoConf();
}
-void InitReloadCustomSounds(char *set_identifier)
+void InitReloadCustomSounds(void)
{
if (!audio.sound_available)
return;
ReloadCustomSounds();
}
-void InitReloadCustomMusic(char *set_identifier)
+void InitReloadCustomMusic(void)
{
if (!audio.music_available)
return;