/// <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(); }
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; }
public void LoadLilyPond(string lilyContent) { try { SequenceReader lilyReader = new LilypondSequenceReader(lilyContent); Sequence = lilyReader.Sequence; LoadStaffsAndMidi(); } catch (Exception) { } }
protected SequenceReader() { Sequence = new MusicalSequence(); }