public void SaveWithAudio(string fileName)
        {
            if (Recorder == null || Recorder.State != RecorderState.Finished)
            {
                throw new InvalidOperationException();
            }
            string replay = Game.Replay.Save();
            Stream audio  = Recorder.Data;

            audio.Position = 0;
            AudioLessonFile.Save(fileName, replay, audio);
            SetUnmodified();
        }
        public static ViewModel PlayLesson(String filename)
        {
            string replay;
            Stream audio;

            AudioLessonFile.Load(filename, out replay, out audio);
            ViewModel view = new ViewModel();

            view.Game = new Game(Replay.Parse(replay));
            view.Game.Seek(0);
            view.Name  = Path.GetFileName(filename);
            view.Media = new Player(audio);
            view.SetUnmodified();
            return(view);
        }
        internal void OpenFile(string filename)
        {
            ViewModel view;

            if (AudioLessonFile.IsAudioLesson(filename))
            {
                view = ViewModel.PlayLesson(filename);
            }
            else
            {
                view = ViewModel.OpenReplay(filename);
            }
            GameForm childForm = new GameForm(view);

            ShowAsMDI(childForm);
        }
        private void FinishButton_Click(object sender, EventArgs e)
        {        //Fixme: Check Error handling
            bool wasPaused = false;

            if (audioRecorder != null)
            {
                wasPaused            = audioRecorder.Paused;
                audioRecorder.Paused = true;
            }
            if (audioRecorder != null)
            {
                using (SaveFileDialog dlg = new SaveFileDialog())
                {
                    dlg.DefaultExt = ".GoLesson";
                    dlg.Filter     = "Go Audio Lesson|*.GoLesson|All Files|*.*";
                    if (dlg.ShowDialog() == DialogResult.OK)
                    {
                        string replay = goRecorder.Replay.Save();
                        audioRecorder.Finish();
                        Stream audio = audioRecorder.Data;
                        audio.Position = 0;
                        AudioLessonFile.Save(dlg.FileName, replay, audio);
                        FinishButton.Enabled = false;
                        goRecorder           = null;
                        audioRecorder        = null;
                    }
                }
            }
            else
            {
                using (SaveFileDialog dlg = new SaveFileDialog())
                {
                    dlg.DefaultExt = ".GoReplay";
                    dlg.Filter     = "Go Replay|*.GoReplay|All Files|*.*";
                    if (dlg.ShowDialog() == DialogResult.OK)
                    {
                        goRecorder.Replay.Save(dlg.FileName);
                        FinishButton.Enabled = false;
                        goRecorder           = null;
                    }
                }
            }
            if (audioRecorder != null)
            {
                audioRecorder.Paused = wasPaused;
            }
        }