private void handleTimingPoints(Beatmap beatmap, string line) { string[] split = line.Split(','); double time = double.Parse(split[0].Trim(), NumberFormatInfo.InvariantInfo); double beatLength = double.Parse(split[1].Trim(), NumberFormatInfo.InvariantInfo); double speedMultiplier = beatLength < 0 ? 100.0 / -beatLength : 1; TimeSignatures timeSignature = TimeSignatures.SimpleQuadruple; if (split.Length >= 3) { timeSignature = split[2][0] == '0' ? TimeSignatures.SimpleQuadruple : (TimeSignatures)int.Parse(split[2]); } LegacySampleBank sampleSet = defaultSampleBank; if (split.Length >= 4) { sampleSet = (LegacySampleBank)int.Parse(split[3]); } //SampleBank sampleBank = SampleBank.Default; //if (split.Length >= 5) // sampleBank = (SampleBank)int.Parse(split[4]); int sampleVolume = defaultSampleVolume; if (split.Length >= 6) { sampleVolume = int.Parse(split[5]); } bool timingChange = true; if (split.Length >= 7) { timingChange = split[6][0] == '1'; } bool kiaiMode = false; bool omitFirstBarSignature = false; if (split.Length >= 8) { int effectFlags = int.Parse(split[7]); kiaiMode = (effectFlags & 1) > 0; omitFirstBarSignature = (effectFlags & 8) > 0; } string stringSampleSet = sampleSet.ToString().ToLower(); if (stringSampleSet == @"none") { stringSampleSet = @"normal"; } DifficultyControlPoint difficultyPoint = beatmap.ControlPointInfo.DifficultyPointAt(time); SoundControlPoint soundPoint = beatmap.ControlPointInfo.SoundPointAt(time); EffectControlPoint effectPoint = beatmap.ControlPointInfo.EffectPointAt(time); if (timingChange) { beatmap.ControlPointInfo.TimingPoints.Add(new TimingControlPoint { Time = time, BeatLength = beatLength, TimeSignature = timeSignature }); } if (speedMultiplier != difficultyPoint.SpeedMultiplier) { beatmap.ControlPointInfo.DifficultyPoints.RemoveAll(x => x.Time == time); beatmap.ControlPointInfo.DifficultyPoints.Add(new DifficultyControlPoint { Time = time, SpeedMultiplier = speedMultiplier }); } if (stringSampleSet != soundPoint.SampleBank || sampleVolume != soundPoint.SampleVolume) { beatmap.ControlPointInfo.SoundPoints.Add(new SoundControlPoint { Time = time, SampleBank = stringSampleSet, SampleVolume = sampleVolume }); } if (kiaiMode != effectPoint.KiaiMode || omitFirstBarSignature != effectPoint.OmitFirstBarLine) { beatmap.ControlPointInfo.EffectPoints.Add(new EffectControlPoint { Time = time, KiaiMode = kiaiMode, OmitFirstBarLine = omitFirstBarSignature }); } }
private void handleTimingPoint(string line) { string[] split = line.Split(','); double time = getOffsetTime(Parsing.ParseDouble(split[0].Trim())); double beatLength = Parsing.ParseDouble(split[1].Trim()); double speedMultiplier = beatLength < 0 ? 100.0 / -beatLength : 1; TimeSignatures timeSignature = TimeSignatures.SimpleQuadruple; if (split.Length >= 3) { timeSignature = split[2][0] == '0' ? TimeSignatures.SimpleQuadruple : (TimeSignatures)Parsing.ParseInt(split[2]); } LegacySampleBank sampleSet = defaultSampleBank; if (split.Length >= 4) { sampleSet = (LegacySampleBank)Parsing.ParseInt(split[3]); } int customSampleBank = 0; if (split.Length >= 5) { customSampleBank = Parsing.ParseInt(split[4]); } int sampleVolume = defaultSampleVolume; if (split.Length >= 6) { sampleVolume = Parsing.ParseInt(split[5]); } bool timingChange = true; if (split.Length >= 7) { timingChange = split[6][0] == '1'; } bool kiaiMode = false; bool omitFirstBarSignature = false; if (split.Length >= 8) { LegacyEffectFlags effectFlags = (LegacyEffectFlags)Parsing.ParseInt(split[7]); kiaiMode = effectFlags.HasFlag(LegacyEffectFlags.Kiai); omitFirstBarSignature = effectFlags.HasFlag(LegacyEffectFlags.OmitFirstBarLine); } string stringSampleSet = sampleSet.ToString().ToLowerInvariant(); if (stringSampleSet == @"none") { stringSampleSet = @"normal"; } if (timingChange) { var controlPoint = CreateTimingControlPoint(); controlPoint.BeatLength = beatLength; controlPoint.TimeSignature = timeSignature; addControlPoint(time, controlPoint, true); } #pragma warning disable 618 addControlPoint(time, new LegacyDifficultyControlPoint(beatLength) #pragma warning restore 618 { SpeedMultiplier = speedMultiplier, }, timingChange); addControlPoint(time, new EffectControlPoint { KiaiMode = kiaiMode, OmitFirstBarLine = omitFirstBarSignature, }, timingChange); addControlPoint(time, new LegacySampleControlPoint { SampleBank = stringSampleSet, SampleVolume = sampleVolume, CustomSampleBank = customSampleBank, }, timingChange); }
private void handleTimingPoint(string line) { string[] split = line.Split(','); double time = getOffsetTime(Parsing.ParseDouble(split[0].Trim())); double beatLength = Parsing.ParseDouble(split[1].Trim()); double speedMultiplier = beatLength < 0 ? 100.0 / -beatLength : 1; TimeSignature timeSignature = TimeSignature.SimpleQuadruple; if (split.Length >= 3) { timeSignature = split[2][0] == '0' ? TimeSignature.SimpleQuadruple : new TimeSignature(Parsing.ParseInt(split[2])); } LegacySampleBank sampleSet = defaultSampleBank; if (split.Length >= 4) { sampleSet = (LegacySampleBank)Parsing.ParseInt(split[3]); } int customSampleBank = 0; if (split.Length >= 5) { customSampleBank = Parsing.ParseInt(split[4]); } int sampleVolume = defaultSampleVolume; if (split.Length >= 6) { sampleVolume = Parsing.ParseInt(split[5]); } bool timingChange = true; if (split.Length >= 7) { timingChange = split[6][0] == '1'; } bool kiaiMode = false; bool omitFirstBarSignature = false; if (split.Length >= 8) { LegacyEffectFlags effectFlags = (LegacyEffectFlags)Parsing.ParseInt(split[7]); kiaiMode = effectFlags.HasFlagFast(LegacyEffectFlags.Kiai); omitFirstBarSignature = effectFlags.HasFlagFast(LegacyEffectFlags.OmitFirstBarLine); } string stringSampleSet = sampleSet.ToString().ToLowerInvariant(); if (stringSampleSet == @"none") { stringSampleSet = @"normal"; } if (timingChange) { var controlPoint = CreateTimingControlPoint(); controlPoint.BeatLength = beatLength; controlPoint.TimeSignature = timeSignature; addControlPoint(time, controlPoint, true); } #pragma warning disable 618 addControlPoint(time, new LegacyDifficultyControlPoint(beatLength) #pragma warning restore 618 { SliderVelocity = speedMultiplier, }, timingChange); var effectPoint = new EffectControlPoint { KiaiMode = kiaiMode, OmitFirstBarLine = omitFirstBarSignature, }; bool isOsuRuleset = beatmap.BeatmapInfo.Ruleset.OnlineID == 0; // scrolling rulesets use effect points rather than difficulty points for scroll speed adjustments. if (!isOsuRuleset) { effectPoint.ScrollSpeed = speedMultiplier; } addControlPoint(time, effectPoint, timingChange); addControlPoint(time, new LegacySampleControlPoint { SampleBank = stringSampleSet, SampleVolume = sampleVolume, CustomSampleBank = customSampleBank, }, timingChange); }
private void handleTimingPoint(string line) { try { string[] split = line.Split(','); double time = getOffsetTime(double.Parse(split[0].Trim(), NumberFormatInfo.InvariantInfo)); double beatLength = double.Parse(split[1].Trim(), NumberFormatInfo.InvariantInfo); double speedMultiplier = beatLength < 0 ? 100.0 / -beatLength : 1; TimeSignatures timeSignature = TimeSignatures.SimpleQuadruple; if (split.Length >= 3) { timeSignature = split[2][0] == '0' ? TimeSignatures.SimpleQuadruple : (TimeSignatures)int.Parse(split[2]); } LegacySampleBank sampleSet = defaultSampleBank; if (split.Length >= 4) { sampleSet = (LegacySampleBank)int.Parse(split[3]); } int customSampleBank = 0; if (split.Length >= 5) { customSampleBank = int.Parse(split[4]); } int sampleVolume = defaultSampleVolume; if (split.Length >= 6) { sampleVolume = int.Parse(split[5]); } bool timingChange = true; if (split.Length >= 7) { timingChange = split[6][0] == '1'; } bool kiaiMode = false; bool omitFirstBarSignature = false; if (split.Length >= 8) { EffectFlags effectFlags = (EffectFlags)int.Parse(split[7]); kiaiMode = effectFlags.HasFlag(EffectFlags.Kiai); omitFirstBarSignature = effectFlags.HasFlag(EffectFlags.OmitFirstBarLine); } string stringSampleSet = sampleSet.ToString().ToLowerInvariant(); if (stringSampleSet == @"none") { stringSampleSet = @"normal"; } if (timingChange) { var controlPoint = CreateTimingControlPoint(); controlPoint.Time = time; controlPoint.BeatLength = beatLength; controlPoint.TimeSignature = timeSignature; handleTimingControlPoint(controlPoint); } handleDifficultyControlPoint(new DifficultyControlPoint { Time = time, SpeedMultiplier = speedMultiplier }); handleEffectControlPoint(new EffectControlPoint { Time = time, KiaiMode = kiaiMode, OmitFirstBarLine = omitFirstBarSignature }); handleSampleControlPoint(new LegacySampleControlPoint { Time = time, SampleBank = stringSampleSet, SampleVolume = sampleVolume, CustomSampleBank = customSampleBank }); } catch (FormatException e) { } }
private void handleTimingPoints(Beatmap beatmap, string val) { string[] split = val.Split(','); double time = double.Parse(split[0].Trim(), NumberFormatInfo.InvariantInfo); double beatLength = double.Parse(split[1].Trim(), NumberFormatInfo.InvariantInfo); TimeSignatures timeSignature = TimeSignatures.SimpleQuadruple; if (split.Length >= 3) { timeSignature = split[2][0] == '0' ? TimeSignatures.SimpleQuadruple : (TimeSignatures)int.Parse(split[2]); } LegacySampleBank sampleSet = defaultSampleBank; if (split.Length >= 4) { sampleSet = (LegacySampleBank)int.Parse(split[3]); } //SampleBank sampleBank = SampleBank.Default; //if (split.Length >= 5) // sampleBank = (SampleBank)int.Parse(split[4]); int sampleVolume = defaultSampleVolume; if (split.Length >= 6) { sampleVolume = int.Parse(split[5]); } bool timingChange = true; if (split.Length >= 7) { timingChange = split[6][0] == '1'; } bool kiaiMode = false; bool omitFirstBarSignature = false; if (split.Length >= 8) { int effectFlags = int.Parse(split[7]); kiaiMode = (effectFlags & 1) > 0; omitFirstBarSignature = (effectFlags & 8) > 0; } string stringSampleSet = sampleSet.ToString().ToLower(); if (stringSampleSet == @"none") { stringSampleSet = @"normal"; } beatmap.TimingInfo.ControlPoints.Add(new ControlPoint { Time = time, BeatLength = beatLength, SpeedMultiplier = beatLength < 0 ? -beatLength / 100.0 : 1, TimingChange = timingChange, TimeSignature = timeSignature, SampleBank = stringSampleSet, SampleVolume = sampleVolume, KiaiMode = kiaiMode, OmitFirstBarLine = omitFirstBarSignature }); }
private void handleTimingPoint(string line) { string[] split = line.Split(','); double time = getOffsetTime(Parsing.ParseDouble(split[0].Trim())); double beatLength = Parsing.ParseDouble(split[1].Trim()); double speedMultiplier = beatLength < 0 ? 100.0 / -beatLength : 1; TimeSignatures timeSignature = TimeSignatures.SimpleQuadruple; if (split.Length >= 3) { timeSignature = split[2][0] == '0' ? TimeSignatures.SimpleQuadruple : (TimeSignatures)Parsing.ParseInt(split[2]); } LegacySampleBank sampleSet = defaultSampleBank; if (split.Length >= 4) { sampleSet = (LegacySampleBank)Parsing.ParseInt(split[3]); } int customSampleBank = 0; if (split.Length >= 5) { customSampleBank = Parsing.ParseInt(split[4]); } int sampleVolume = defaultSampleVolume; if (split.Length >= 6) { sampleVolume = Parsing.ParseInt(split[5]); } bool timingChange = true; if (split.Length >= 7) { timingChange = split[6][0] == '1'; } bool kiaiMode = false; bool omitFirstBarSignature = false; if (split.Length >= 8) { EffectFlags effectFlags = (EffectFlags)Parsing.ParseInt(split[7]); kiaiMode = effectFlags.HasFlag(EffectFlags.Kiai); omitFirstBarSignature = effectFlags.HasFlag(EffectFlags.OmitFirstBarLine); } string stringSampleSet = sampleSet.ToString().ToLowerInvariant(); if (stringSampleSet == @"none") { stringSampleSet = @"normal"; } if (timingChange) { var controlPoint = CreateTimingControlPoint(); controlPoint.BeatLength = beatLength; controlPoint.TimeSignature = timeSignature; addControlPoint(time, controlPoint, true); } addControlPoint(time, new LegacyDifficultyControlPoint { SpeedMultiplier = speedMultiplier, }, timingChange); addControlPoint(time, new EffectControlPoint { KiaiMode = kiaiMode, OmitFirstBarLine = omitFirstBarSignature, }, timingChange); addControlPoint(time, new LegacySampleControlPoint { SampleBank = stringSampleSet, SampleVolume = sampleVolume, CustomSampleBank = customSampleBank, }, timingChange); // To handle the scenario where a non-timing line shares the same time value as a subsequent timing line but // appears earlier in the file, we buffer non-timing control points and rewrite them *after* control points from the timing line // with the same time value (allowing them to overwrite as necessary). // // The expected outcome is that we prefer the non-timing line's adjustments over the timing line's adjustments when time is equal. if (timingChange) { flushPendingPoints(); } }
private void handleTimingPoint(string line) { try { string[] split = line.Split(','); double time = getOffsetTime(Parsing.ParseDouble(split[0].Trim())); double beatLength = Parsing.ParseDouble(split[1].Trim()); double speedMultiplier = beatLength < 0 ? 100.0 / -beatLength : 1; TimeSignatures timeSignature = TimeSignatures.SimpleQuadruple; if (split.Length >= 3) { timeSignature = split[2][0] == '0' ? TimeSignatures.SimpleQuadruple : (TimeSignatures)Parsing.ParseInt(split[2]); } LegacySampleBank sampleSet = defaultSampleBank; if (split.Length >= 4) { sampleSet = (LegacySampleBank)Parsing.ParseInt(split[3]); } int customSampleBank = 0; if (split.Length >= 5) { customSampleBank = Parsing.ParseInt(split[4]); } int sampleVolume = defaultSampleVolume; if (split.Length >= 6) { sampleVolume = Parsing.ParseInt(split[5]); } bool timingChange = true; if (split.Length >= 7) { timingChange = split[6][0] == '1'; } bool kiaiMode = false; bool omitFirstBarSignature = false; if (split.Length >= 8) { EffectFlags effectFlags = (EffectFlags)Parsing.ParseInt(split[7]); kiaiMode = effectFlags.HasFlag(EffectFlags.Kiai); omitFirstBarSignature = effectFlags.HasFlag(EffectFlags.OmitFirstBarLine); } string stringSampleSet = sampleSet.ToString().ToLowerInvariant(); if (stringSampleSet == @"none") { stringSampleSet = @"normal"; } if (timingChange) { var controlPoint = CreateTimingControlPoint(); controlPoint.Time = time; controlPoint.BeatLength = beatLength; controlPoint.TimeSignature = timeSignature; handleTimingControlPoint(controlPoint); } handleDifficultyControlPoint(new DifficultyControlPoint { Time = time, SpeedMultiplier = speedMultiplier, AutoGenerated = timingChange }); handleEffectControlPoint(new EffectControlPoint { Time = time, KiaiMode = kiaiMode, OmitFirstBarLine = omitFirstBarSignature, AutoGenerated = timingChange }); handleSampleControlPoint(new LegacySampleControlPoint { Time = time, SampleBank = stringSampleSet, SampleVolume = sampleVolume, CustomSampleBank = customSampleBank, AutoGenerated = timingChange }); } catch (FormatException) { Logger.Log("A timing point could not be parsed correctly and will be ignored", LoggingTarget.Runtime, LogLevel.Important); } catch (OverflowException) { Logger.Log("A timing point could not be parsed correctly and will be ignored", LoggingTarget.Runtime, LogLevel.Important); } }