private static float CalculateIntensity(float startTick, float endTick, List <SongCues.Cue> cues) { float intensity = 0f; bool indexSet = false; for (int i = startIndex; i < cues.Count; i++) { SongCues.Cue cue = SongCues.I.mCues.cues[i]; if (cue.tick >= endTick) { break; } if (cue.tick >= startTick && cue.tick < endTick) { intensity += GetTargetAmount((Hitsound)cue.velocity, cue.behavior); if (!indexSet) { indexSet = true; startIndex = i; } } } intensity /= AudioDriver.TickSpanToMs(SongDataHolder.I.songData, startTick, endTick); intensity *= 1000f; return(intensity); }
public void EvaluateCues(SongCues.Cue[] cues, SongList.SongData songData) { this.length = AudioDriver.TickSpanToMs(songData, cues[0].tick, cues[cues.Length - 1].tick); SplitCues(cues); CalculateSpacing(); CalculateDensity(); CalculateReadability(); difficultyRating = ((spacing + readability) / length) * 500f + (length / 100000f * lengthMultiplier); }
public static void test() { var candidates = GetQuietParts(); List <CueRange> ranges2 = new List <CueRange>(); candidates.ForEach((queData) => { var ms = AudioDriver.TickSpanToMs(SongDataHolder.I.songData, queData.fromTick, queData.toTick); if (ms >= 2000f) { ranges2.Add(queData); } }); // MelonLogger.Log($"Found {ranges2.Count} candidates!"); Data.darts = new int[ranges2.Count][]; int i = 0; foreach (CueRange Cue in ranges2) { Data.darts[i] = new int[] { Cue.enableFrom, Cue.enableTo }; i++; } }