//returns track names
        public string[] GetTrackNames()
        {
            var names    = new string[TrackCount];
            var messages = file.GetMetaEventsOfType(MidiMetaType.TrackName).GetEnumerator();

            for (int i = 0; i < TrackCount; ++i)
            {
                string name;
                if (messages.MoveNext())
                {
                    if (messages.Current.Event.ExtraDataLength > 0)
                    {
                        name = "";
                        foreach (var d in messages.Current.Event.ExtraData)
                        {
                            name += (char)d;
                        }
                    }
                    else
                    {
                        name = "Untitled";
                    }
                }
                else
                {
                    name = "Untitled";
                }

                names[i] = $"Track {i + 1}: {name}";
            }
            return(names);
        }
        public Midi(string filepath)
        {
            if (File.Exists(filepath))
            {
                if (Path.GetExtension(filepath).ToLower() == ".mid")
                {
                    using (var fileStream = new FileStream(filepath, FileMode.Open))
                    {
                        file = MidiMusic.Read(fileStream);

                        //get tempo information from the midi
                        var t = file.GetMetaEventsOfType(MidiMetaType.Tempo).GetEnumerator();
                        t.MoveNext();
                    }
                }
                else
                {
                    throw new IOException("Incorrect file type.");
                }
            }
            else
            {
                throw new IOException("File doesn't exist.");
            }
        }