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; }
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; }