Exemple #1
0
        private static float GetBars(ulong beats, Midi mid)
        {
            Midi.TimeSignatureEvent previous = new Midi.TimeSignatureEvent(0, 4, 2, 24, 8);
            Midi.TimeSignatureEvent next;

            int   index = -1;
            ulong t;
            float bars = 0;

            while (beats > 0)
            {
                if (index + 1 == mid.Signature.Count)
                {
                    next = new Midi.TimeSignatureEvent(ulong.MaxValue, 0, 0, 0, 0);
                }
                else
                {
                    next = mid.Signature[++index];
                }

                t      = Math.Min(next.Time - previous.Time, beats);
                beats -= t;
                bars  += (float)t / previous.Numerator;

                previous = next;
            }

            return(bars);
        }
Exemple #2
0
        public static void FillSections(NoteChart chart, int length, int gap, int start, List <NoteChart.Note> notes, List <NoteChart.Note> overlap)
        {
            Midi.TimeSignatureEvent previous = new Midi.TimeSignatureEvent(0, 4, 0, 0, 0);
            Midi.TimeSignatureEvent next;
            int   index = -1;
            ulong time  = chart.FindLastNote();
            long  t2;

            while (time > 0)
            {
                try {
                    next = chart.Signature[++index];
                } catch (ArgumentOutOfRangeException) {
                    next = new Midi.TimeSignatureEvent(ulong.MaxValue, 4, 0, 0, 0);
                }

                long measuresize = chart.Division.TicksPerBeat * (long)previous.Numerator;

                t2 = (long)Math.Min(next.Time - previous.Time, time);
                for (long t1 = measuresize * start; t2 - t1 >= measuresize * length; t1 += measuresize * gap)
                {
                    bool           collide = false;
                    NoteChart.Note note    = new NoteChart.Note(previous.Time + (ulong)t1, (ulong)measuresize * (ulong)length);
                    if (overlap != null)
                    {
                        foreach (NoteChart.Note n in overlap)
                        {
                            if (note.IsUnderNote(n, true))
                            {
                                collide = true;
                                break;
                            }
                        }
                    }
                    if (!collide)
                    {
                        notes.Add(note);
                    }
                }
                time -= (ulong)t2;

                previous = next;
            }
        }