// Token: 0x06003252 RID: 12882 RVA: 0x00147588 File Offset: 0x00145788
        public IEnumerable <MidiChunk> Convert(IEnumerable <MidiChunk> chunks)
        {
            TrackChunk[] array = chunks.OfType <TrackChunk>().ToArray <TrackChunk>();
            if (array.Length != 1)
            {
                return(chunks);
            }
            MultiTrackChunksConverter.TrackChunkDescriptor[] array2 = (from i in Enumerable.Range(0, 17)
                                                                       select new MultiTrackChunksConverter.TrackChunkDescriptor()).ToArray <MultiTrackChunksConverter.TrackChunkDescriptor>();
            FourBitNumber?fourBitNumber = null;

            using (IEnumerator <MidiEvent> enumerator = (from m in array.First <TrackChunk>().Events
                                                         select m.Clone()).GetEnumerator())
            {
                while (enumerator.MoveNext())
                {
                    MidiEvent midiEvent = enumerator.Current;
                    Array.ForEach <MultiTrackChunksConverter.TrackChunkDescriptor>(array2, delegate(MultiTrackChunksConverter.TrackChunkDescriptor d)
                    {
                        d.DeltaTime += midiEvent.DeltaTime;
                    });
                    ChannelEvent channelEvent = midiEvent as ChannelEvent;
                    if (channelEvent != null)
                    {
                        array2[(int)(channelEvent.Channel + 1)].AddEvent(midiEvent.Clone());
                        fourBitNumber = null;
                    }
                    else
                    {
                        if (!(midiEvent is MetaEvent))
                        {
                            fourBitNumber = null;
                        }
                        ChannelPrefixEvent channelPrefixEvent = midiEvent as ChannelPrefixEvent;
                        if (channelPrefixEvent != null)
                        {
                            fourBitNumber = new FourBitNumber?((FourBitNumber)channelPrefixEvent.Channel);
                        }
                        if (fourBitNumber != null)
                        {
                            array2[(int)(fourBitNumber.Value + 1)].AddEvent(midiEvent);
                        }
                        else
                        {
                            array2[0].AddEvent(midiEvent);
                        }
                    }
                }
            }
            return((from d in array2
                    select d.Chunk into c
                    where c.Events.Any <MidiEvent>()
                    select c).Concat(from c in chunks
                                     where !(c is TrackChunk)
                                     select c));
        }
        // Token: 0x06003262 RID: 12898 RVA: 0x0014778C File Offset: 0x0014598C
        public IEnumerable <MidiChunk> Convert(IEnumerable <MidiChunk> chunks)
        {
            TrackChunk[] array = chunks.OfType <TrackChunk>().ToArray <TrackChunk>();
            if (array.Length == 1)
            {
                return(chunks);
            }
            MidiEvent midiEvent;
            IEnumerable <SingleTrackChunksConverter.EventDescriptor> enumerable = array.SelectMany(delegate(TrackChunk trackChunk)
            {
                long absoluteTime = 0L;
                int channel       = -1;
                return(trackChunk.Events.Select(delegate(MidiEvent midiEvent)
                {
                    ChannelPrefixEvent channelPrefixEvent = midiEvent as ChannelPrefixEvent;
                    if (channelPrefixEvent != null)
                    {
                        channel = (int)channelPrefixEvent.Channel;
                    }
                    if (!(midiEvent is MetaEvent))
                    {
                        channel = -1;
                    }
                    return new SingleTrackChunksConverter.EventDescriptor(midiEvent, absoluteTime += midiEvent.DeltaTime, channel);
                }));
            }).OrderBy((SingleTrackChunksConverter.EventDescriptor d) => d, new SingleTrackChunksConverter.EventDescriptorComparer());
            TrackChunk trackChunk2 = new TrackChunk();
            long       num         = 0L;

            foreach (SingleTrackChunksConverter.EventDescriptor eventDescriptor in enumerable)
            {
                midiEvent           = eventDescriptor.Event.Clone();
                midiEvent.DeltaTime = eventDescriptor.AbsoluteTime - num;
                trackChunk2.Events.Add(midiEvent);
                num = eventDescriptor.AbsoluteTime;
            }
            return(new TrackChunk[]
            {
                trackChunk2
            }.Concat(from c in chunks
                     where !(c is TrackChunk)
                     select c));
        }
            // Token: 0x06003268 RID: 12904 RVA: 0x001478A8 File Offset: 0x00145AA8
            public int Compare(SingleTrackChunksConverter.EventDescriptor x, SingleTrackChunksConverter.EventDescriptor y)
            {
                long num = x.AbsoluteTime - y.AbsoluteTime;

                if (num != 0L)
                {
                    return((int)(num / Math.Abs(num)));
                }
                MetaEvent metaEvent  = x.Event as MetaEvent;
                MetaEvent metaEvent2 = y.Event as MetaEvent;

                if (metaEvent != null && metaEvent2 == null)
                {
                    return(-1);
                }
                if (metaEvent == null && metaEvent2 != null)
                {
                    return(1);
                }
                if (metaEvent == null && metaEvent2 == null)
                {
                    return(0);
                }
                int num2 = x.Channel - y.Channel;

                if (num2 != 0)
                {
                    return(num2);
                }
                ChannelPrefixEvent channelPrefixEvent  = x.Event as ChannelPrefixEvent;
                ChannelPrefixEvent channelPrefixEvent2 = y.Event as ChannelPrefixEvent;

                if (channelPrefixEvent != null && channelPrefixEvent2 == null)
                {
                    return(-1);
                }
                if (channelPrefixEvent == null && channelPrefixEvent2 != null)
                {
                    return(1);
                }
                return(0);
            }