Beispiel #1
0
        /// <summary>
        /// Opens a file.
        /// TODO: Remove the switch cases and delegate.
        /// TODO: Remove the knowledge of filetypes. What if we want to support MusicXML later?
        /// TODO: Remove the calling of the outer viewmodel layer. We want to be able reuse this in an ASP.NET Core application for example.
        /// </summary>
        /// <param name="fileName"></param>
        public void OpenFile(string fileName)
        {
            if (Path.GetExtension(fileName).EndsWith(".mid"))
            {
                SequenceReader midiReader = new MidiSequenceReader(fileName);
                Sequence = midiReader.Sequence;

                MidiSequence = new Sequence();
                MidiSequence.Load(fileName);

                LilypondViewModel.LilypondTextLoaded(LoadMidiIntoLilypond(MidiSequence));
            }
            else if (Path.GetExtension(fileName).EndsWith(".ly"))
            {
                StringBuilder sb = new StringBuilder();
                foreach (var line in File.ReadAllLines(fileName))
                {
                    sb.AppendLine(line);
                }

                LoadLilyPond(sb.ToString());

                LilypondViewModel.LilypondTextLoaded(sb.ToString());
            }
            else
            {
                throw new NotSupportedException($"File extension {Path.GetExtension(fileName)} is not supported.");
            }

            LoadStaffsAndMidi();
        }