public void Handle(MidiEvent midiEvent, int trackIndex) { var channelMessage = midiEvent.MidiMessage as ChannelMessage; int keyCode = channelMessage.Data1; // Note already exists, setNoteDuration if (keyNoteMap.ContainsKey(keyCode) && (channelMessage.Data2 == 0 || channelMessage.Command == ChannelCommand.NoteOff)) { double noteDuration = SetNoteDuration(keyCode, midiEvent, ticksPerBeat, activeTimeSignature); if (midiEvent.AbsoluteTicks >= newBar) // New Bar Line { activeStaff.AddSymbol(new Barline()); newBar += ticksPerBeat * 4 * ((double)activeTimeSignature.Measure / activeTimeSignature.NumberOfBeats); } } // Create new Note else if (channelMessage.Command == ChannelCommand.NoteOn && channelMessage.Data2 > 0) { if (midiEvent.DeltaTicks > 0) // Found a rest -> construct rest symbol { StaffSymbol rest = ConstructRest(midiEvent, ticksPerBeat, activeTimeSignature); activeStaff.AddSymbol(rest); // TODO if (midiEvent.AbsoluteTicks >= newBar) // New Bar Line { activeStaff.AddSymbol(new Barline()); newBar += ticksPerBeat * 4 * ((double)activeTimeSignature.Measure / activeTimeSignature.NumberOfBeats); } } StaffSymbol note = ConstructNote(keyCode, midiEvent); if (note != null) { activeStaff.AddSymbol(note); } else { Console.WriteLine("Error: Null note"); } } }
public Rest() : base() { StaffLine = 7; RhythmicValue += " rest"; StaffSymbol = StaffSymbol.ToLower(); }