Ejemplo n.º 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();
        }
Ejemplo n.º 2
0
    void Update()
    {
        MusicalSequence sequence = MusicalSequence.FirstEnabled;

        if (sequence != null)
        {
            if (!lastSequence.EqualsAllOrdered(sequence.sequence))
            {
                lastSequence = new List <int>(sequence.sequence);
                foreach (Transform child in rootObj.transform)
                {
                    Destroy(child.gameObject);
                }
                for (int i = 0; i < lastSequence.Count; i++)
                {
                    Instantiate(uiNotePrefabs[lastSequence[i]], rootObj.transform);
                }
            }
            int selectedNote = sequence.curIndex;
            for (int i = 0; i < rootObj.transform.childCount; i++)
            {
                RectTransform rectTransform = (RectTransform)rootObj.transform.GetChild(i);
                if (rectTransform)
                {
                    rectTransform.sizeDelta = (selectedNote == i)? bigSize:smallSize;
                }
            }
            rootObj.SetActive(true);
        }
        else
        {
            rootObj.SetActive(false);
        }
    }
        public LilypondContext()
        {
            Sequence = new MusicalSequence
            {
                Symbols = new List <IMusicalSymbol>()
            };

            CurrentOctave = 4;
        }
Ejemplo n.º 4
0
 public void LoadLilyPond(string lilyContent)
 {
     try
     {
         SequenceReader lilyReader = new LilypondSequenceReader(lilyContent);
         Sequence = lilyReader.Sequence;
         LoadStaffsAndMidi();
     }
     catch (Exception) { }
 }
Ejemplo n.º 5
0
 protected SequenceReader()
 {
     Sequence = new MusicalSequence();
 }