コード例 #1
0
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");
  }
}
コード例 #2
0
/* 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);
}