public Midi ToMidi() { Midi mid = new Midi(); mid.Division = new Mid.TicksPerBeatDivision(960); mid.Signature.Add(new Midi.TimeSignatureEvent(0, 4, 2, 24, 8)); Midi.Track track = new Midi.Track(); mid.AddTrack(track); track.Name = string.Empty; mid.Name = string.Empty; foreach (Node node in Nodes) { ulong time = (ulong)(node.Time * mid.Division.TicksPerBeat * 4); ulong duration = (ulong)(node.Duration * mid.Division.TicksPerBeat * 4); if (node is MarkerNode) { switch (node.Type) { case 0x09FFFFFF: track.Markers.Add(new Midi.TextEvent(time, (node as MarkerNode).Text)); break; case 0x0AFFFFFF: track.Comments.Add(new Midi.TextEvent(time, (node as MarkerNode).Text)); break; default: throw new NotSupportedException(); } } else { track.Notes.Add(new Midi.NoteEvent(time, 0, (byte)node.Type, 128, duration)); } } return(mid); }