public void PausePlaySound() { if (IsMusicPlaying()) { switch (playbackState) { case CustomPlayBackState.Playing: int fadeOutTime = fadingValues[FadingActions.PlayPause]["fadeOut"]; if (fadeOutTime > 0) { playbackState = CustomPlayBackState.Pausing; sampleProvider.BeginFadeOut(fadeOutTime); PauseAndExecuter.Execute(delegate { if (playbackState == CustomPlayBackState.Pausing) { waveOutDevice.Pause(); playbackState = CustomPlayBackState.Paused; } }, fadeOutTime + 100); } else { waveOutDevice.Pause(); playbackState = CustomPlayBackState.Paused; } NewNotification("Paused :", currentTrackPlayed); break; case CustomPlayBackState.Pausing: PauseAndExecuter.AbortLast(); goto case CustomPlayBackState.Paused; case CustomPlayBackState.Paused: playbackState = CustomPlayBackState.Playing; int fadeInTime = fadingValues[FadingActions.PlayPause]["fadeIn"]; if (fadeInTime > 0) { sampleProvider.BeginFadeIn(fadeInTime); } else { sampleProvider.FadeState = FadeState.FullVolume; } waveOutDevice.Play(); NewNotification("Unpaused :", currentTrackPlayed); break; } } }
public void DoSeekFadeOut(int fadeOutTime) { if (fadingOutWaveOutDevice != null) { fadingOutWaveOutDevice.Stop(); } if (playbackState == CustomPlayBackState.Playing) { fadingOutAudioFileReader = new AudioFileReader(currentTrackPlayed) { Volume = audioFileReader.Volume, Position = audioFileReader.Position }; fadingOutSoundTouch = new SoundTouch(); SetSoundTouchSettings(fadingOutSoundTouch, fadingOutAudioFileReader, true); fadingOutSampleProvider = new CustomSampleProvider(fadingOutAudioFileReader, fadingOutSoundTouch); fadingOutWaveOutDevice = new DirectSoundOut(currentAudioDevice, AudioLatency); fadingOutWaveOutDevice.Init(fadingOutSampleProvider); IWavePlayer thisFadingOutWave = fadingOutWaveOutDevice; CustomSampleProvider thisFadeOutSampleProvider = fadingOutSampleProvider; thisFadingOutWave.PlaybackStopped += delegate { thisFadeOutSampleProvider.Dispose(); thisFadingOutWave.Dispose(); fadingOutWaveOutDevice = null; }; thisFadingOutWave.Play(); fadingOutSampleProvider.BeginFadeOut(fadeOutTime, thisFadingOutWave); } }