Exemplo n.º 1
0
        /// <summary>
        /// Reads a midievent from a stream
        /// </summary>
        /// <param name="from">stream where to read from</param>
        /// <param name="to">list where to read</param>
        /// <returns>number of bytes read or -1 if unknown event type</returns>
        public static int Read(AudioStream from, List <TrackEvent> to)
        {
            int index     = to.Count - 1;
            int eventSize = 0;

            // midi events are detected with high bits (first four)
            switch (to[index].Prefix >> 4)
            {
            case (byte)MidiEvent.MidiEventType.Controller:
                eventSize += ControllerEvent.Read(from, to);
                break;

            case (byte)MidiEvent.MidiEventType.NoteOn:
            case (byte)MidiEvent.MidiEventType.NoteOff:
                eventSize += NoteEvent.Read(from, to);
                break;

            case (byte)MidiEvent.MidiEventType.Instrument:
            case (byte)MidiEvent.MidiEventType.ChannelAT:
                from.Skip(1);
                to.RemoveAt(index);
                return(1);

            case (byte)MidiEvent.MidiEventType.PolyphonicAT:
            case (byte)MidiEvent.MidiEventType.PitchBend:
                from.Skip(2);
                to.RemoveAt(index);
                return(2);

            default:
                Console.WriteLine("Unknown midi event type 0x{0}", BitConverter.ToString(new byte[] { to[index].Prefix }));
                return(-1);
            }
            return(eventSize);
        }
Exemplo n.º 2
0
        /// <summary>
        /// Reads a controllerevent from the filestream
        /// </summary>
        /// <param name="from">stream where to read from</param>
        /// <param name="to">where to read event</param>
        /// <returns>number of bytes read</returns>
        public new static int Read(AudioStream from, List <TrackEvent> to)
        {
            int index = to.Count - 1;

            ControllerEvent c = new ControllerEvent();

            c.CopyFrom(to[index]);

            int eventSize = from.Read(c, skipFields: new string[] { "Timing", "Prefix", "AbsoluteTiming" });

            to[index] = c;

            return(eventSize);
        }