static void HandleAudioSource(MainViewModel ViewModel, StartCmdOptions StartOptions) { var source = ViewModel.AudioViewModel.AudioSource; if (StartOptions.Microphone != -1 && StartOptions.Microphone < source.AvailableRecordingSources.Count - 1) { source.SelectedRecordingSource = source.AvailableRecordingSources[StartOptions.Microphone + 1]; } if (StartOptions.Speaker != -1 && StartOptions.Speaker < source.AvailableLoopbackSources.Count - 1) { source.SelectedLoopbackSource = source.AvailableLoopbackSources[StartOptions.Speaker + 1]; } }
static void HandleVideoEncoder(MainViewModel ViewModel, StartCmdOptions StartOptions) { if (StartOptions.Encoder == null) { return; } var video = ViewModel.VideoViewModel; if (FFMpegService.FFMpegExists && Regex.IsMatch(StartOptions.Encoder, @"ffmpeg:\d+")) { var index = int.Parse(StartOptions.Encoder.Substring(7)); video.SelectedVideoWriterKind = VideoWriterKind.FFMpeg; if (index < video.AvailableVideoSources.Count) { video.SelectedVideoWriter = video.AvailableVideoWriters[index]; } } else if (ServiceProvider.FileExists("SharpAvi.dll") && Regex.IsMatch(StartOptions.Encoder, @"sharpavi:\d+")) { var index = int.Parse(StartOptions.Encoder.Substring(9)); video.SelectedVideoWriterKind = VideoWriterKind.SharpAvi; if (index < video.AvailableVideoSources.Count) { video.SelectedVideoWriter = video.AvailableVideoWriters[index]; } } else if (StartOptions.Encoder == "gif") { video.SelectedVideoWriterKind = VideoWriterKind.Gif; } }
static void Start(MainViewModel ViewModel, StartCmdOptions StartOptions) { if (StartOptions.Cursor) { Settings.Instance.IncludeCursor = true; } if (StartOptions.Clicks) { Settings.Instance.Clicks.Display = true; } if (StartOptions.Keys) { Settings.Instance.Keystrokes.Display = true; } HandleVideoSource(ViewModel, StartOptions); HandleVideoEncoder(ViewModel, StartOptions); HandleAudioSource(ViewModel, StartOptions); Settings.Instance.FrameRate = StartOptions.FrameRate; Settings.Instance.AudioQuality = StartOptions.AudioQuality; Settings.Instance.VideoQuality = StartOptions.VideoQuality; if (!ViewModel.RecordCommand.CanExecute(null)) { WriteLine("Nothing to Record"); return; } if (StartOptions.Delay > 0) { Thread.Sleep(StartOptions.Delay); } ViewModel.StartRecording(StartOptions.FileName); if (StartOptions.Length > 0) { var elapsed = 0; Write(TimeSpan.Zero); while (elapsed++ < StartOptions.Length) { Thread.Sleep(1000); Write(new string('\b', 8) + TimeSpan.FromSeconds(elapsed)); } Write(new string('\b', 8)); } else { const string recordingText = "Press p to pause or resume, q to quit"; WriteLine(recordingText); char ReadChar() { if (IsInputRedirected) { var line = ReadLine(); if (line != null && line.Length == 1) { return(line[0]); } return(char.MinValue); } return(char.ToLower(ReadKey(true).KeyChar)); } char c; do { c = ReadChar(); if (c != 'p') { continue; } ViewModel.PauseCommand.ExecuteIfCan(); if (ViewModel.RecorderState != RecorderState.Paused) { WriteLine("Resumed"); } } while (c != 'q'); } Task.Run(async() => await ViewModel.StopRecording()).Wait(); }
static void Start(MainViewModel ViewModel, StartCmdOptions StartOptions) { if (StartOptions.Cursor) { Settings.Instance.IncludeCursor = true; } if (StartOptions.Clicks) { Settings.Instance.MouseClicks = true; } if (StartOptions.Keys) { Settings.Instance.KeyStrokes = true; } HandleVideoSource(ViewModel, StartOptions); HandleVideoEncoder(ViewModel, StartOptions); HandleAudioSource(ViewModel, StartOptions); Settings.Instance.FrameRate = StartOptions.FrameRate; Settings.Instance.AudioQuality = StartOptions.AudioQuality; Settings.Instance.VideoQuality = StartOptions.VideoQuality; if (!ViewModel.RecordCommand.CanExecute(null)) { WriteLine("Nothing to Record"); return; } if (StartOptions.Delay > 0) { Thread.Sleep(StartOptions.Delay); } ViewModel.StartRecording(StartOptions.FileName); if (StartOptions.Length > 0) { int elapsed = 0; Write(TimeSpan.Zero); while (elapsed++ < StartOptions.Length) { Thread.Sleep(1000); Write(new string('\b', 8) + TimeSpan.FromSeconds(elapsed)); } Write(new string('\b', 8)); } else { var text = "Press q to quit"; Write(text); while (ReadKey(true).KeyChar != 'q') { ; } Write(new string('\b', text.Length)); } Task.Run(async() => await ViewModel.StopRecording()).Wait(); }