List <MusicSymbol> AddClefChanges(List <MusicSymbol> symbols, ClefMeasures clefs, TimeSignature time) { List <MusicSymbol> result = new List <MusicSymbol>(symbols.Count); Clef prevclef = clefs.GetClef(0); foreach (MusicSymbol symbol in symbols) { /* A BarSymbol indicates a new measure */ if (symbol is BarSymbol) { Clef clef = clefs.GetClef(symbol.StartTime); if (clef != prevclef) { result.Add(new ClefSymbol(clef, symbol.StartTime - 1, true)); } prevclef = clef; } result.Add(symbol); } return(result); }
List <ChordSymbol> CreateChords(List <MidiNote> midinotes, KeySignature key, TimeSignature time, ClefMeasures clefs) { int i = 0; List <ChordSymbol> chords = new List <ChordSymbol>(); List <MidiNote> notegroup = new List <MidiNote>(12); int len = midinotes.Count; while (i < len) { int starttime = midinotes[i].StartTime; Clef clef = clefs.GetClef(starttime); /* Group all the midi notes with the same start time * into the notes list. */ notegroup.Clear(); notegroup.Add(midinotes[i]); i++; while (i < len && midinotes[i].StartTime == starttime) { notegroup.Add(midinotes[i]); i++; } /* Create a single chord from the group of midi notes with * the same start time. */ ChordSymbol chord = new ChordSymbol(notegroup, key, time, clef, this); chords.Add(chord); } return(chords); }
/** Create the chord symbols for a single track. * @param midinotes The Midinotes in the track. * @param key The Key Signature, for determining sharps/flats. * @param time The Time Signature, for determining the measures. * @param clefs The clefs to use for each measure. * @ret An array of ChordSymbols */ private List<ChordSymbol> CreateChords(List<MidiNote> midinotes, KeySignature key, TimeSignature time, ClefMeasures clefs) { int i = 0; List<ChordSymbol> chords = new List<ChordSymbol>(); List<MidiNote> notegroup = new List<MidiNote>(12); int len = midinotes.Count; while (i < len) { int starttime = midinotes[i].StartTime; Clef clef = clefs.GetClef(starttime); /* Group all the midi notes with the same start time * into the notes list. */ notegroup.Clear(); notegroup.Add(midinotes[i]); i++; while (i < len && midinotes[i].StartTime == starttime) { notegroup.Add(midinotes[i]); i++; } /* Create a single chord from the group of midi notes with * the same start time. */ ChordSymbol chord = new ChordSymbol(notegroup, key, time, clef, this); chords.Add(chord); } return chords; }
/** The current clef is always shown at the beginning of the staff, on * the left side. However, the clef can also change from measure to * measure. When it does, a Clef symbol must be shown to indicate the * change in clef. This function adds these Clef change symbols. * This function does not add the main Clef Symbol that begins each * staff. That is done in the Staff() contructor. */ private List<MusicSymbol> AddClefChanges(List<MusicSymbol> symbols, ClefMeasures clefs, TimeSignature time) { List<MusicSymbol> result = new List<MusicSymbol>( symbols.Count ); Clef prevclef = clefs.GetClef(0); foreach (MusicSymbol symbol in symbols) { /* A BarSymbol indicates a new measure */ if (symbol is BarSymbol) { Clef clef = clefs.GetClef(symbol.StartTime); if (clef != prevclef) { result.Add(new ClefSymbol(clef, symbol.StartTime-1, true)); } prevclef = clef; } result.Add(symbol); } return result; }
public void TestMainClefTreble() { List<MidiNote> notes = new List<MidiNote>(); for (int i = 0; i < 100; i++) { int num = F4 + (i % 20); MidiNote note = new MidiNote(i*10, 0, num, 5); notes.Add(note); } for (int i = 100; i < 200; i++) { int num = G3 - (i % 2); MidiNote note = new MidiNote(i*10, 0, num, 5); notes.Add(note); } for (int i = 200; i < 300; i++) { int num = middleC - (i % 2); MidiNote note = new MidiNote(i*10, 0, num, 5); notes.Add(note); } ClefMeasures clefs = new ClefMeasures(notes, 50); for (int i = 0; i < 100; i++) { Clef clef = clefs.GetClef(i*10); Assert.AreEqual(clef, Clef.Treble); } for (int i = 100; i < 200; i++) { Clef clef = clefs.GetClef(i*10); Assert.AreEqual(clef, Clef.Bass); } for (int i = 200; i < 300; i++) { Clef clef = clefs.GetClef(i*10); /* Even though the average note is below middle C, * the main clef is treble. */ Assert.AreEqual(clef, Clef.Treble); } }
public void TestAllTreble() { List<MidiNote> notes = new List<MidiNote>(); for (int i = 0; i < 100; i++) { int num = middleC + (i % 5); MidiNote note = new MidiNote(i*10, 0, num, 5); notes.Add(note); } ClefMeasures clefs = new ClefMeasures(notes, 40); for (int i = 0; i < 100; i++) { Clef clef = clefs.GetClef(10 * i); Assert.AreEqual(clef, Clef.Treble); } }