コード例 #1
0
        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);
        }