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")
? ".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;
var audioSource = AudioViewModel.GetAudioSource();
var imgProvider = GetImageProvider();
var videoEncoder = GetVideoFileWriter(imgProvider);
if (_recorder == null)
{
if (noVideo)
{
_recorder = new AudioRecorder(audioSource, AudioViewModel.GetAudioFileWriter(_currentFileName, audioSource.WaveFormat));
}
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();
}