示例#1
0
        public MidiFile(string filename, RenderSettings settings)
        {
            this.settings  = settings;
            MidiFileReader = new StreamReader(filename).BaseStream;
            ParseHeaderChunk();
            while (MidiFileReader.Position < MidiFileReader.Length)
            {
                ParseTrackChunk();
            }
            tracks = new MidiTrack[trackcount];

            Console.WriteLine("Loading tracks into memory");
            info = new MidiInfo();
            Task LoadMidi = new Task(() => LoadAndParseAll(true), TaskCreationOptions.LongRunning | TaskCreationOptions.RunContinuationsAsynchronously);

            LoadMidi.Start();
            // LoadAndParseAll(true);
            LoadMidi.GetAwaiter().GetResult();
            // SpinWait.SpinUntil(() => loadedMidi == true);

            Console.WriteLine("Loaded!");
            Console.WriteLine("Note count: " + noteCount);
            unendedTracks = trackcount;

            info.division       = division;
            info.firstTempo     = zerothTempo;
            info.noteCount      = noteCount;
            info.tickLength     = maxTrackTime;
            info.trackCount     = trackcount;
            tempoTickMultiplier = (double)division / 500000 * 1000;
        }
示例#2
0
        public MidiFile(string filename, RenderSettings settings)
        {
            this.settings  = settings;
            MidiFileReader = new StreamReader(filename).BaseStream;
            ParseHeaderChunk();
            while (MidiFileReader.Position < MidiFileReader.Length)
            {
                ParseTrackChunk();
            }
            tracks = new MidiTrack[trackcount];

            Console.WriteLine("Loading tracks into memory");
            info = new MidiInfo();
            LoadAndParseAll(true);
            Console.WriteLine("Loaded!");
            Console.WriteLine("Note count: " + noteCount);
            unendedTracks = trackcount;

            info.division       = division;
            info.firstTempo     = zerothTempo;
            info.noteCount      = noteCount;
            info.tickLength     = maxTrackTime;
            info.trackCount     = trackcount;
            tempoTickMultiplier = (double)division / 500000 * 1000;
        }