Beispiel #1
0
        /// <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);
        }
Beispiel #2
0
        /// <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);
        }