void StartRecording()
{
var duration = OthersViewModel.Duration;
var delay = OthersViewModel.StartDelay;
if (duration != 0 && (delay * 1000 > duration))
{
Status = "Delay cannot be greater than Duration";
SystemSounds.Asterisk.Play();
return;
}
if (OthersViewModel.MinimizeOnStart)
WindowState = WindowState.Minimized;
ReadyToRecord = false;
var noVideo = VideoViewModel.SelectedVideoSourceKind == VideoSourceKind.NoVideo;
var extension = noVideo
? (AudioViewModel.Encode && AudioViewModel.SelectedAudioSource is WaveInDevice ? ".mp3" : ".wav")
: (VideoViewModel.SelectedCodec.Name == "Gif" ? ".gif" : ".avi");
_currentFileName = Path.Combine(OutPath, DateTime.Now.ToString("yyyy-MM-dd-HH-mm-ss") + extension);
Status = delay > 0 ? $"Recording from t = {delay} ms..." : "Recording...";
_timer.Stop();
TimeSpan = TimeSpan.Zero;
WaveFormat wf;
var audioSource = AudioViewModel.GetAudioSource(VideoViewModel.FrameRate, out wf);
var imgProvider = GetImageProvider();
var videoEncoder = GetVideoFileWriter(imgProvider);
if (_recorder == null)
{
if (noVideo)
_recorder = new AudioRecorder(audioSource, AudioViewModel.GetAudioFileWriter(_currentFileName, wf));
else _recorder = new Recorder(videoEncoder, imgProvider, VideoViewModel.FrameRate, audioSource);
}
_recorder.RecordingStopped += (s, E) =>
{
OnStopped();
if (E?.Error == null)
return;
Status = "Error";
MessageBox.Show(E.ToString());
};
RecentViewModel.Add(_currentFileName, videoEncoder == null ? RecentItemType.Audio : RecentItemType.Video);
_recorder.Start(delay);
_timer.Start();
}
static void Start(MainViewModel ViewModel, StartCmdOptions StartOptions) { ViewModel.Settings.IncludeCursor = StartOptions.Cursor; ViewModel.Settings.Clicks.Display = StartOptions.Clicks; ViewModel.Settings.Keystrokes.Display = StartOptions.Keys; if (File.Exists(StartOptions.FileName)) { WriteLine("Output File Already Exists"); return; } HandleVideoSource(ViewModel, StartOptions); HandleVideoEncoder(ViewModel, StartOptions); HandleAudioSource(ViewModel, StartOptions); HandleWebcam(StartOptions); ViewModel.Settings.Video.FrameRate = StartOptions.FrameRate; ViewModel.Settings.Audio.Quality = StartOptions.AudioQuality; ViewModel.Settings.Video.Quality = StartOptions.VideoQuality; if (!ViewModel.RecordCommand.CanExecute(null)) { WriteLine("Nothing to Record"); return; } if (StartOptions.Delay > 0) { Thread.Sleep(StartOptions.Delay); } if (!ViewModel.StartRecording(StartOptions.FileName)) { return; } Task.Factory.StartNew(() => { Loop(ViewModel, StartOptions); ViewModel.StopRecording().Wait(); Application.Exit(); }); // MouseKeyHook requires a Window Handle to register Application.Run(new ApplicationContext()); }