// (c) 1995-2014 by Artsoft Entertainment
// Holger Schemel
// info@artsoft.org
-// http://www.artsoft.org/
+// https://www.artsoft.org/
// ----------------------------------------------------------------------------
// sound.c
// ============================================================================
static void FreeSound(void *);
static void FreeMusic(void *);
static void FreeAllMusic_NoConf(void);
+static void Mixer_StopMusicChannel(void);
static SoundInfo *getSoundInfoEntryFromSoundID(int);
static MusicInfo *getMusicInfoEntryFromMusicID(int);
{
int loops = (IS_LOOP(mixer[audio.music_channel]) ? -1 : 1);
+ // stopping music channel before playing next track seems to be needed to
+ // prevent audio problems that may occur when playing MP3 files on Windows
+ Mixer_StopMusicChannel();
+
// 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);
{
if (!mixer[i].active)
{
- Error(ERR_INFO, "Mixer_InsertSound: Channel %d inactive", i);
- Error(ERR_INFO, "Mixer_InsertSound: This should never happen!");
+ Debug("audio", "Mixer_InsertSound: Channel %d inactive", i);
+ Debug("audio", "Mixer_InsertSound: This should never happen!");
mixer_active_channels--;
}
if ((snd_info->data_ptr = Mix_LoadWAV(filename)) == NULL)
{
- Error(ERR_WARN, "cannot read sound file '%s': %s", filename, Mix_GetError());
+ Warn("cannot read sound file '%s': %s", filename, Mix_GetError());
+
free(snd_info);
+
return NULL;
}
if ((mod_info->data_ptr = Mix_LoadMUS(filename)) == NULL)
{
- Error(ERR_WARN, "cannot read music file '%s': %s", filename, Mix_GetError());
+ Warn("cannot read music file '%s': %s", filename, Mix_GetError());
+
free(mod_info);
+
return NULL;
}
if ((dir = openDirectory(music_directory)) == NULL)
{
- Error(ERR_WARN, "cannot read music directory '%s'", music_directory);
+ Warn("cannot read music directory '%s'", music_directory);
audio.music_available = FALSE;