private void StartAudioStream() { isFinishedPlaying = false; isStopped = false; isPaused = false; audioEvent.OnTrackStart(PlayingTrack); byte[] buffer = new byte[164384]; int read; // Playing loop while (!isStopped) { // Event Loop while (!isPaused && !isStopped && !isFinishedPlaying) { if (DiscordStream == null) { audioEvent.OnTrackError(PlayingTrack, new TrackErrorException("Error when playing audio track: Stream gone.")); isFinishedPlaying = true; isStopped = true; Dispose(); PlayingTrack = null; return; } read = PlayingTrack.SourceStream.Read(buffer, 0, buffer.Length); if (read > 0) { // Write queued Buffers to DiscordStream. if (isVolumeAdjusted) { DiscordStream.Write(AdjustVolume(buffer, Volume), 0, read); } else { DiscordStream.Write(buffer, 0, read); } //Thread.Sleep(10); } else { isFinishedPlaying = true; isStopped = true; } } // Paused if (isPaused && !isStopped && !isFinishedPlaying) { Task.Delay(2000); continue; } } // If finished playing or stopped: OnTrackEnd DiscordStream.Flush(); audioEvent.OnTrackEnd(PlayingTrack); }