projects
/
rocksndiamonds.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
fixed element animation when collecting for BD engine
[rocksndiamonds.git]
/
src
/
libgame
/
sound.c
diff --git
a/src/libgame/sound.c
b/src/libgame/sound.c
index 86c5af997e1674cb94f94360ae06d584f0044e2f..5f497c386c56c6dda9088ecfd87940cd3bcfd36c 100644
(file)
--- a/
src/libgame/sound.c
+++ b/
src/libgame/sound.c
@@
-48,10
+48,10
@@
#define SOUND_VOLUME_LEFT(x) (stereo_volume[x])
#define SOUND_VOLUME_RIGHT(x) (stereo_volume[SOUND_MAX_LEFT2RIGHT-x])
#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)
(p) > 100 ? (v) : \
(p) * (v) / 100)
@@
-59,7
+59,7
@@
#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 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) : \
SOUND_VOLUME_MUSIC(v) : \
(s) & SND_CTRL_LOOP ? \
SOUND_VOLUME_LOOPS(v) : \
@@
-141,6
+141,15
@@
static MusicInfo *getMusicInfoEntryFromMusicID(int);
// mixer functions
// ----------------------------------------------------------------------------
// mixer functions
// ----------------------------------------------------------------------------
+static void Mixer_ChannelFinished(int channel)
+{
+ if (!mixer[channel].active)
+ return;
+
+ mixer[channel].active = FALSE;
+ mixer_active_channels--;
+}
+
void Mixer_InitChannels(void)
{
int i;
void Mixer_InitChannels(void)
{
int i;
@@
-148,6
+157,8
@@
void Mixer_InitChannels(void)
for (i = 0; i < audio.num_channels; i++)
mixer[i].active = FALSE;
mixer_active_channels = 0;
for (i = 0; i < audio.num_channels; i++)
mixer[i].active = FALSE;
mixer_active_channels = 0;
+
+ Mix_ChannelFinished(Mixer_ChannelFinished);
}
static void Mixer_ResetChannelExpiration(int channel)
}
static void Mixer_ResetChannelExpiration(int channel)
@@
-247,13
+258,7
@@
static void Mixer_PlayMusicChannel(void)
static void Mixer_StopChannel(int channel)
{
static void Mixer_StopChannel(int channel)
{
- if (!mixer[channel].active)
- return;
-
Mix_HaltChannel(channel);
Mix_HaltChannel(channel);
-
- mixer[channel].active = FALSE;
- mixer_active_channels--;
}
static void Mixer_StopMusicChannel(void)
}
static void Mixer_StopMusicChannel(void)
@@
-519,6
+524,17
@@
void StartMixer(void)
(int)sqrt((float)(SOUND_MAX_LEFT2RIGHT * SOUND_MAX_LEFT2RIGHT - i * i));
}
(int)sqrt((float)(SOUND_MAX_LEFT2RIGHT * SOUND_MAX_LEFT2RIGHT - i * i));
}
+boolean isSoundPlaying(int nr)
+{
+ int i;
+
+ for (i = audio.first_sound_channel; i < audio.num_channels; i++)
+ if (mixer[i].active && mixer[i].nr == nr)
+ return TRUE;
+
+ return FALSE;
+}
+
// THE STUFF ABOVE IS ONLY USED BY THE SOUND SERVER CHILD PROCESS
// ============================================================================
// THE STUFF ABOVE IS ONLY USED BY THE SOUND SERVER CHILD PROCESS
// ============================================================================
@@
-587,6
+603,14
@@
static void *Load_WAV_or_MOD(char *filename)
return NULL;
}
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 void LoadCustomMusic_NoConf(void)
{
static boolean draw_init_text = TRUE; // only draw at startup
@@
-664,6
+688,9
@@
static void LoadCustomMusic_NoConf(void)
closeDirectory(dir);
closeDirectory(dir);
+ // sort music files by filename
+ qsort(Music_NoConf, num_music_noconf, sizeof(MusicInfo *), compareMusicInfo);
+
draw_init_text = FALSE;
}
draw_init_text = FALSE;
}
@@
-679,6
+706,11
@@
int getMusicListSize(void)
music_info->num_dynamic_file_list_entries);
}
music_info->num_dynamic_file_list_entries);
}
+int getMusicListSize_NoConf(void)
+{
+ return num_music_noconf;
+}
+
struct FileInfo *getSoundListEntry(int pos)
{
int num_sounds = getSoundListSize();
struct FileInfo *getSoundListEntry(int pos)
{
int num_sounds = getSoundListSize();