void ChannelInternalState::FadeOut(int milliseconds) { int channels_halted; if (IsStream()) { #ifdef PINDROP_MULTISTREAM channels_halted = Mix_FadeOutMusicCh(channel_id_, milliseconds); #else channels_halted = Mix_FadeOutMusic(milliseconds); #endif // PINDROP_MULTISTREAM } else { channels_halted = Mix_FadeOutChannel(channel_id_, milliseconds); } if (channels_halted == 0) { SDL_LogError(SDL_LOG_CATEGORY_ERROR, "Error halting channel %i\n"); } }
/* Fade out a channel and then stop it automatically */ int Mix_FadeOutChannel(int which, int ms) { int status; status = 0; if ( audio_opened ) { if ( which == -1 ) { int i; for ( i=0; i<num_channels; ++i ) { status += Mix_FadeOutChannel(i, ms); } } else if ( which < num_channels ) { SDL_LockAudio(); if ( mix_channel[which].playing && (mix_channel[which].volume > 0) && (mix_channel[which].fading != MIX_FADING_OUT) ) { if (mix_channel[which].is_music) { Mix_FadeOutMusicCh(ms, which); } else { mix_channel[which].sound->fade_volume = mix_channel[which].volume; mix_channel[which].fading = MIX_FADING_OUT; mix_channel[which].sound->fade_length = (Uint32) ms; mix_channel[which].sound->ticks_fade = SDL_GetTicks(); /* only change fade_volume_reset if we're not fading. */ if (mix_channel[which].fading == MIX_NO_FADING) { mix_channel[which].fade_volume_reset = mix_channel[which].volume; } } ++status; } SDL_UnlockAudio(); } } return(status); }