private static IMidiMessage Convert(Event e, Track track) { if (e is NoteEvent) { NoteEvent note = (NoteEvent)e; if (note.Type == NoteEvent.EventType.NoteOff) { ChannelMessageBuilder b = new ChannelMessageBuilder(); b.MidiChannel = note.Channel; b.Command = ChannelCommand.NoteOff; b.Data1 = ChannelNoteToMidiPitch(note.Pitch); b.Data2 = ChannelVelocityToMidiVolume(note.Velocity); b.Build(); return b.Result; } else { ChannelMessageBuilder b = new ChannelMessageBuilder(); b.MidiChannel = note.Channel; b.Command = ChannelCommand.NoteOn; b.Data1 = ChannelNoteToMidiPitch(note.Pitch); b.Data2 = ChannelVelocityToMidiVolume(note.Velocity); b.Build(); return b.Result; } } else if (e is TempoEvent) { TempoEvent tempoEvent = (TempoEvent)e; TempoChangeBuilder builder = new TempoChangeBuilder(); // convert BPM to microseconds builder.Tempo = 60000000 / tempoEvent.TempoBpm; builder.Build(); return builder.Result; } else if (e is TimeSignatureEvent) { TimeSignatureEvent timeSignatureEvent = (TimeSignatureEvent)e; TimeSignatureBuilder builder = new TimeSignatureBuilder(); builder.Numerator = (byte)timeSignatureEvent.BeatsPerBar; builder.Denominator = (byte)timeSignatureEvent.BeatValue; builder.ClocksPerMetronomeClick = 24; builder.ThirtySecondNotesPerQuarterNote = 8; builder.Build(); return builder.Result; } else { Debug.Fail("unknown event type " + e.GetType().Name); return null; } }
public void AddNoteEvent(Event noteEvent) { NoteEvents.Add(noteEvent); }