private void timer1_Tick(object sender, EventArgs e) { if (playbackState != StreamingPlaybackState.Stopped) { if (waveOut == null && bufferedWaveProvider != null) { Debug.WriteLine("Creating WaveOut Device"); waveOut = CreateWaveOut(); waveOut.PlaybackStopped += OnPlaybackStopped; volumeProvider = new VolumeWaveProvider16(bufferedWaveProvider); volumeProvider.Volume = volumeSlider1.Volume; waveOut.Init(volumeProvider); progressBarBuffer.Maximum = (int)bufferedWaveProvider.BufferDuration.TotalMilliseconds; } else if (bufferedWaveProvider != null) { var bufferedSeconds = bufferedWaveProvider.BufferedDuration.TotalSeconds; ShowBufferState(bufferedSeconds); // make it stutter less if we buffer up a decent amount before playing if (bufferedSeconds < 0.5 && playbackState == StreamingPlaybackState.Playing && !fullyDownloaded) { Pause(); } else if (bufferedSeconds > 4 && playbackState == StreamingPlaybackState.Buffering) { Play(); } else if (fullyDownloaded && bufferedSeconds == 0) { Debug.WriteLine("Reached end of stream"); StopPlayback(); } } } }
private void timer1_Tick(object sender, EventArgs e) { if (playbackState != StreamingPlaybackState.Stopped) { if (this.waveOut == null && this.bufferedWaveProvider != null) { Debug.WriteLine("Creating WaveOut Device"); this.waveOut = CreateWaveOut(); waveOut.PlaybackStopped += new EventHandler(waveOut_PlaybackStopped); this.volumeProvider = new VolumeWaveProvider16(bufferedWaveProvider); this.volumeProvider.Volume = this.volumeSlider1.Volume; waveOut.Init(volumeProvider); progressBarBuffer.Maximum = (int)bufferedWaveProvider.BufferDuration.TotalMilliseconds; } else if (bufferedWaveProvider != null) { var bufferedSeconds = bufferedWaveProvider.BufferedDuration.TotalSeconds; ShowBufferState(bufferedSeconds); // make it stutter less if we buffer up a decent amount before playing if (bufferedSeconds < 0.5 && this.playbackState == StreamingPlaybackState.Playing && !this.fullyDownloaded) { this.playbackState = StreamingPlaybackState.Buffering; waveOut.Pause(); Debug.WriteLine(String.Format("Paused to buffer, waveOut.PlaybackState={0}", waveOut.PlaybackState)); } else if (bufferedSeconds > 4 && this.playbackState == StreamingPlaybackState.Buffering) { waveOut.Play(); Debug.WriteLine(String.Format("Started playing, waveOut.PlaybackState={0}", waveOut.PlaybackState)); this.playbackState = StreamingPlaybackState.Playing; } else if (this.fullyDownloaded && bufferedSeconds == 0) { Debug.WriteLine("Reached end of stream"); StopPlayback(); } } } }