Example #1
0
        Vibrato GetVibratoInfo(IVSNote note, int partTick, double noteLength, RangeDictionary <int, Tempo> tempo)
        {
            var vibDepth  = GetNoteStyle(note, "vibDep", partTick, tempo);
            var vibRate   = GetNoteStyle(note, "vibRate", partTick, tempo);
            var vibLength = note.NStyle.Attrs.FirstOrDefault((st) => st.ID == "vibLen")?.Value ?? 0;
            var vibType   = note.NStyle.Attrs.FirstOrDefault((st) => st.ID == "vibType")?.Value ?? 0;

            return(new Vibrato(vibType, vibLength * 0.01 * noteLength, vibDepth, vibRate));
        }
Example #2
0
        RangeDictionary <double, int> GetNoteStyle(IVSNote note, string styleName, int partTick, RangeDictionary <int, Tempo> tempo)
        {
            var partStartTime = tempo[partTick].TickToTime(partTick);
            var styleTickRate = note.Duration / (double)(1 << 16);

            return(note.NStyle.Sequence?
                   .FirstOrDefault((s) => s.ID == styleName)?.CC
                   .Select((c) => new { Tick = partTick + (int)(c.Position * styleTickRate), Value = c.Value })
                   .ToRangeDictionary((c) => tempo[c.Tick].TickToTime(c.Tick) - partStartTime, (c) => c.Value, IntervalMode.OpenInterval)
                   ?? new RangeDictionary <double, int>(IntervalMode.OpenInterval, new Dictionary <double, int>()
            {
                [0.0] = 0
            }));
        }