public void ReadFile(MidiFile midiFile) { VerifyHeader(midiFile); midiFile.TrackMode = file.ReadShort(); midiFile.NumEventTracks = file.ReadShort(); midiFile.QuarterNote = file.ReadShort(); MUtil.SetQuarterNote(midiFile.QuarterNote); midiFile.Events = new List <MidiEvent> [midiFile.NumEventTracks]; midiFile.Tracks = new List <MidiTrack>(); midiFile.TrackPerChannel = false; ComputeTracks(midiFile); ComputePulsesSong(midiFile); VerifyChannels(midiFile); CheckStartTimes(midiFile.Tracks); ReadTimeSignature(midiFile); //RoundDurations(midiFile); file.Empty(); }
private void DefineMetaEvent(MidiEvent mEvent) { string result; mEvent.EventFlag = MUtil.MetaEvent; mEvent.MetaEvent = file.ReadByte(); mEvent.MetaLength = file.ReadVarlen(); mEvent.Value = file.ReadBytes(mEvent.MetaLength); mEvent.Text = "ME ";//"" + EVENT_TYPE.MetaEvent; //+" " + mEvent.MetaEvent; mEvent.Meta = ((META_EVENT)mEvent.MetaEvent); result = string.Empty; switch ((META_EVENT)mEvent.MetaEvent) { case META_EVENT.Copyright: result = " Copyright " + System.Text.Encoding.UTF8.GetString(mEvent.Value); break; case META_EVENT.CuePoint: result = " CuePoint " + System.Text.Encoding.UTF8.GetString(mEvent.Value); break; case META_EVENT.DeviceName: result = " DeviceName " + System.Text.Encoding.UTF8.GetString(mEvent.Value); break; case META_EVENT.EndOfTrack: result = " End of track "; break; case META_EVENT.Instrument: result = " Instrument " + System.Text.Encoding.UTF8.GetString(mEvent.Value); break; case META_EVENT.KeySignature: result += " KeySignature : " + MUtil.TranslateKeySignature(mEvent.Value); break; case META_EVENT.Lyric: result = " Lyric " + System.Text.Encoding.UTF8.GetString(mEvent.Value); break; case META_EVENT.Marker: result = " Marker " + System.Text.Encoding.UTF8.GetString(mEvent.Value); break; case META_EVENT.MIDIChannelPrefix: byte channel = mEvent.Value[0]; result = " MIDIChannelPrefix: " + channel; break; case META_EVENT.MIDIPort: byte port = mEvent.Value[0]; result = " MIDIPort: " + port; break; case META_EVENT.ProgramName: result = " ProgramName " + System.Text.Encoding.UTF8.GetString(mEvent.Value); break; case META_EVENT.Sequence: result = " Sequence " + System.Text.Encoding.UTF8.GetString(mEvent.Value); break; case META_EVENT.SequenceName: result = " SequenceName " + System.Text.Encoding.UTF8.GetString(mEvent.Value); break; case META_EVENT.SequencerSpecificEvent: result = " SequencerSpecific " + System.Text.Encoding.UTF8.GetString(mEvent.Value); break; case META_EVENT.SMPTEOffset: result = " SMPTEOffset " + System.Text.Encoding.UTF8.GetString(mEvent.Value); break; case META_EVENT.Tempo: result = SetMetaEventTempo(mEvent); break; case META_EVENT.Text: result = " Text " + System.Text.Encoding.UTF8.GetString(mEvent.Value); break; case META_EVENT.TimeSignature: result = " TimeSignature " + SetMetaEventTimeSignature(mEvent); break; } mEvent.Text += result; }