char *next_music = getMusicInfoEntryFilename(music_nr);
if (!strEqual(curr_music, next_music))
- PlayMusic(music_nr);
+ PlayMusicLoop(music_nr);
}
void PlayLevelSound_EM(int xx, int yy, int element_em, int sample)
#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_PLAY_MUSIC ? \
+#define SETUP_SOUND_VOLUME(v,s) ((s) & SND_CTRL_MUSIC ? \
SOUND_VOLUME_MUSIC(v) : \
- (s) == SND_CTRL_PLAY_LOOP ? \
+ (s) & SND_CTRL_LOOP ? \
SOUND_VOLUME_LOOPS(v) : \
SOUND_VOLUME_SIMPLE(v))
if (mixer[audio.music_channel].type != MUS_TYPE_WAV)
{
+ int loops = (IS_LOOP(mixer[audio.music_channel]) ? -1 : 1);
+
// use short fade-in to prevent "plop" sound for certain music files
// (this may happen when switching on music while playing the game)
Mix_VolumeMusic(mixer[audio.music_channel].volume);
- Mix_FadeInMusic(mixer[audio.music_channel].data_ptr, -1, 100);
+ Mix_FadeInMusic(mixer[audio.music_channel].data_ptr, loops, 100);
#if defined(PLATFORM_WIN32)
// playing MIDI music is broken since Windows Vista, as it sets the volume
PlaySoundMusic(nr);
}
+void PlayMusicLoop(int nr)
+{
+ if (!audio.music_available)
+ return;
+
+ PlaySoundMusicLoop(nr);
+}
+
void PlaySound(int nr)
{
if (!setup.sound_simple)
PlaySoundExt(nr, SOUND_MAX_VOLUME, SOUND_MIDDLE, SND_CTRL_PLAY_MUSIC);
}
+void PlaySoundMusicLoop(int nr)
+{
+ if (!setup.sound_music)
+ return;
+
+ PlaySoundExt(nr, SOUND_MAX_VOLUME, SOUND_MIDDLE, SND_CTRL_PLAY_MUSIC_LOOP);
+}
+
void PlaySoundExt(int nr, int volume, int stereo_position, int state)
{
SoundControl snd_ctrl;
#define SND_CTRL_PLAY_SOUND (SND_CTRL_NONE)
#define SND_CTRL_PLAY_LOOP (SND_CTRL_LOOP)
-#define SND_CTRL_PLAY_MUSIC (SND_CTRL_LOOP | SND_CTRL_MUSIC)
+#define SND_CTRL_PLAY_MUSIC (SND_CTRL_MUSIC)
+#define SND_CTRL_PLAY_MUSIC_LOOP (SND_CTRL_MUSIC | SND_CTRL_LOOP)
#define SND_CTRL_FADE_SOUND (SND_CTRL_FADE)
#define SND_CTRL_FADE_MUSIC (SND_CTRL_FADE | SND_CTRL_MUSIC)
/* sound client functions */
void PlayMusic(int);
+void PlayMusicLoop(int);
void PlaySound(int);
void PlaySoundStereo(int, int);
void PlaySoundLoop(int);
void PlaySoundMusic(int);
+void PlaySoundMusicLoop(int);
void PlaySoundExt(int, int, int, int);
void FadeMusic(void);
void FadeSound(int);