Beispiel #1
0
        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];
            }
        }
Beispiel #2
0
        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;
            }
        }
Beispiel #3
0
        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();
        }
Beispiel #4
0
        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();
        }