// 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); }