X-Git-Url: https://git.artsoft.org/?p=rocksndiamonds.git;a=blobdiff_plain;f=src%2Flibgame%2Fsound.c;h=c9a74eb1b262056ec279873861f8511148f074a4;hp=15354b68575dbc6b95b97563b996905ed17f24cb;hb=39fb4fecfb8d4647d3563bdb18ce0065f6129522;hpb=d643b3820fbeb5d3c8a731dbdad2785047cb3bb2 diff --git a/src/libgame/sound.c b/src/libgame/sound.c index 15354b68..c9a74eb1 100644 --- a/src/libgame/sound.c +++ b/src/libgame/sound.c @@ -59,9 +59,9 @@ #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)) @@ -221,10 +221,12 @@ static void Mixer_PlayMusicChannel() 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 @@ -923,6 +925,14 @@ void PlayMusic(int nr) PlaySoundMusic(nr); } +void PlayMusicLoop(int nr) +{ + if (!audio.music_available) + return; + + PlaySoundMusicLoop(nr); +} + void PlaySound(int nr) { if (!setup.sound_simple) @@ -955,6 +965,14 @@ void PlaySoundMusic(int nr) 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;