/// <summary> /// Creates a deep copy of the MIDI context /// </summary> /// <returns>A new copy of the MIDI context</returns> public MidiContext Clone() { var result = new MidiContext(TimeBase); result.ChannelPrefix = ChannelPrefix; for (var i = 0; i < 16; i++) { var dst = result.Channels[i]; var src = Channels[i]; for (var j = 0; j < 128; j++) { dst.Controls[j] = src.Controls[j]; dst.Notes[j] = src.Notes[j]; } dst.ChannelPressure = src.ChannelPressure; dst.KeyPressure = src.KeyPressure; dst.Program = src.Program; dst.PitchWheel = src.PitchWheel; } result.KeySignature = KeySignature; result.MicroTempo = MicroTempo; result.RunningStatus = RunningStatus; result.SystemTicks = SystemTicks; result.Ticks = Ticks; result.TimeSignature = TimeSignature; return(result); }
/// <summary> /// Gets the <see cref="MidiContext"/> at the specified position /// </summary> /// <param name="position">The position to retrieve the context from, in ticks</param> /// <returns></returns> public MidiContext GetContext(int position = 0) { var result = new MidiContext(); int pos = 0; foreach (var e in Events) { pos += e.Position; if (pos > position) { break; } result.ProcessMessage(e.Message); } return(result); }