private void handleGeneral(Beatmap beatmap, string key, string val) { var metadata = beatmap.BeatmapInfo.Metadata; switch (key) { case @"AudioFilename": metadata.AudioFile = val; break; case @"AudioLeadIn": beatmap.BeatmapInfo.AudioLeadIn = int.Parse(val); break; case @"PreviewTime": metadata.PreviewTime = int.Parse(val); break; case @"Countdown": beatmap.BeatmapInfo.Countdown = int.Parse(val) == 1; break; case @"SampleSet": defaultSampleBank = (LegacySampleBank)Enum.Parse(typeof(LegacySampleBank), val); break; case @"SampleVolume": defaultSampleVolume = int.Parse(val); break; case @"StackLeniency": beatmap.BeatmapInfo.StackLeniency = float.Parse(val, NumberFormatInfo.InvariantInfo); break; case @"Mode": beatmap.BeatmapInfo.Mode = (PlayMode)int.Parse(val); break; case @"LetterboxInBreaks": beatmap.BeatmapInfo.LetterboxInBreaks = int.Parse(val) == 1; break; case @"SpecialStyle": beatmap.BeatmapInfo.SpecialStyle = int.Parse(val) == 1; break; case @"WidescreenStoryboard": beatmap.BeatmapInfo.WidescreenStoryboard = int.Parse(val) == 1; break; } }
private string getSampleBank(IList <HitSampleInfo> samples, bool banksOnly = false) { LegacySampleBank normalBank = toLegacySampleBank(samples.SingleOrDefault(s => s.Name == HitSampleInfo.HIT_NORMAL)?.Bank); LegacySampleBank addBank = toLegacySampleBank(samples.FirstOrDefault(s => !string.IsNullOrEmpty(s.Name) && s.Name != HitSampleInfo.HIT_NORMAL)?.Bank); StringBuilder sb = new StringBuilder(); sb.Append(FormattableString.Invariant($"{(int)normalBank}:")); sb.Append(FormattableString.Invariant($"{(int)addBank}")); if (!banksOnly) { string customSampleBank = toLegacyCustomSampleBank(samples.FirstOrDefault(s => !string.IsNullOrEmpty(s.Name))); string sampleFilename = samples.FirstOrDefault(s => string.IsNullOrEmpty(s.Name))?.LookupNames.First() ?? string.Empty; int volume = samples.FirstOrDefault()?.Volume ?? 100; sb.Append(':'); sb.Append(FormattableString.Invariant($"{customSampleBank}:")); sb.Append(FormattableString.Invariant($"{volume}:")); sb.Append(FormattableString.Invariant($"{sampleFilename}")); } return(sb.ToString()); }
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 handleGeneral(string line) { var pair = SplitKeyVal(line); var metadata = beatmap.BeatmapInfo.Metadata; switch (pair.Key) { case @"AudioFilename": metadata.AudioFile = pair.Value.ToStandardisedPath(); break; case @"AudioLeadIn": beatmap.BeatmapInfo.AudioLeadIn = Parsing.ParseInt(pair.Value); break; case @"PreviewTime": metadata.PreviewTime = getOffsetTime(Parsing.ParseInt(pair.Value)); break; case @"Countdown": beatmap.BeatmapInfo.Countdown = Parsing.ParseInt(pair.Value) == 1; break; case @"SampleSet": defaultSampleBank = (LegacySampleBank)Enum.Parse(typeof(LegacySampleBank), pair.Value); break; case @"SampleVolume": defaultSampleVolume = Parsing.ParseInt(pair.Value); break; case @"StackLeniency": beatmap.BeatmapInfo.StackLeniency = Parsing.ParseFloat(pair.Value); break; case @"Mode": beatmap.BeatmapInfo.RulesetID = Parsing.ParseInt(pair.Value); switch (beatmap.BeatmapInfo.RulesetID) { case 0: parser = new Rulesets.Objects.Legacy.Osu.ConvertHitObjectParser(getOffsetTime(), FormatVersion); break; case 1: parser = new Rulesets.Objects.Legacy.Taiko.ConvertHitObjectParser(getOffsetTime(), FormatVersion); break; case 2: parser = new Rulesets.Objects.Legacy.Catch.ConvertHitObjectParser(getOffsetTime(), FormatVersion); break; case 3: parser = new Rulesets.Objects.Legacy.Mania.ConvertHitObjectParser(getOffsetTime(), FormatVersion); break; } break; case @"LetterboxInBreaks": beatmap.BeatmapInfo.LetterboxInBreaks = Parsing.ParseInt(pair.Value) == 1; break; case @"SpecialStyle": beatmap.BeatmapInfo.SpecialStyle = Parsing.ParseInt(pair.Value) == 1; break; case @"WidescreenStoryboard": beatmap.BeatmapInfo.WidescreenStoryboard = Parsing.ParseInt(pair.Value) == 1; break; } }
private void handleGeneral(Beatmap beatmap, string line) { var pair = splitKeyVal(line, ':'); var metadata = beatmap.BeatmapInfo.Metadata; switch (pair.Key) { case @"AudioFilename": metadata.AudioFile = pair.Value; break; case @"AudioLeadIn": beatmap.BeatmapInfo.AudioLeadIn = int.Parse(pair.Value); break; case @"PreviewTime": metadata.PreviewTime = int.Parse(pair.Value); break; case @"Countdown": beatmap.BeatmapInfo.Countdown = int.Parse(pair.Value) == 1; break; case @"SampleSet": defaultSampleBank = (LegacySampleBank)Enum.Parse(typeof(LegacySampleBank), pair.Value); break; case @"SampleVolume": defaultSampleVolume = int.Parse(pair.Value); break; case @"StackLeniency": beatmap.BeatmapInfo.StackLeniency = float.Parse(pair.Value, NumberFormatInfo.InvariantInfo); break; case @"Mode": beatmap.BeatmapInfo.RulesetID = int.Parse(pair.Value); switch (beatmap.BeatmapInfo.RulesetID) { case 0: parser = new Rulesets.Objects.Legacy.Osu.ConvertHitObjectParser(); break; case 1: parser = new Rulesets.Objects.Legacy.Taiko.ConvertHitObjectParser(); break; case 2: parser = new Rulesets.Objects.Legacy.Catch.ConvertHitObjectParser(); break; case 3: parser = new Rulesets.Objects.Legacy.Mania.ConvertHitObjectParser(); break; } break; case @"LetterboxInBreaks": beatmap.BeatmapInfo.LetterboxInBreaks = int.Parse(pair.Value) == 1; break; case @"SpecialStyle": beatmap.BeatmapInfo.SpecialStyle = int.Parse(pair.Value) == 1; break; case @"WidescreenStoryboard": beatmap.BeatmapInfo.WidescreenStoryboard = int.Parse(pair.Value) == 1; break; } }
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; 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 handleGeneral(string line) { var pair = SplitKeyVal(line); var metadata = beatmap.BeatmapInfo.Metadata; switch (pair.Key) { case @"AudioFilename": metadata.AudioFile = pair.Value.ToStandardisedPath(); break; case @"AudioLeadIn": beatmap.BeatmapInfo.AudioLeadIn = Parsing.ParseInt(pair.Value); break; case @"PreviewTime": metadata.PreviewTime = getOffsetTime(Parsing.ParseInt(pair.Value)); break; case @"SampleSet": defaultSampleBank = (LegacySampleBank)Enum.Parse(typeof(LegacySampleBank), pair.Value); break; case @"SampleVolume": defaultSampleVolume = Parsing.ParseInt(pair.Value); break; case @"StackLeniency": beatmap.BeatmapInfo.StackLeniency = Parsing.ParseFloat(pair.Value); break; case @"Mode": int rulesetID = Parsing.ParseInt(pair.Value); beatmap.BeatmapInfo.Ruleset = RulesetStore.GetRuleset(rulesetID) ?? throw new ArgumentException("Ruleset is not available locally."); switch (rulesetID) { case 0: parser = new Rulesets.Objects.Legacy.Osu.ConvertHitObjectParser(getOffsetTime(), FormatVersion); break; case 1: parser = new Rulesets.Objects.Legacy.Taiko.ConvertHitObjectParser(getOffsetTime(), FormatVersion); break; case 2: parser = new Rulesets.Objects.Legacy.Catch.ConvertHitObjectParser(getOffsetTime(), FormatVersion); break; case 3: parser = new Rulesets.Objects.Legacy.Mania.ConvertHitObjectParser(getOffsetTime(), FormatVersion); break; } break; case @"LetterboxInBreaks": beatmap.BeatmapInfo.LetterboxInBreaks = Parsing.ParseInt(pair.Value) == 1; break; case @"SpecialStyle": beatmap.BeatmapInfo.SpecialStyle = Parsing.ParseInt(pair.Value) == 1; break; case @"WidescreenStoryboard": beatmap.BeatmapInfo.WidescreenStoryboard = Parsing.ParseInt(pair.Value) == 1; break; case @"EpilepsyWarning": beatmap.BeatmapInfo.EpilepsyWarning = Parsing.ParseInt(pair.Value) == 1; break; case @"SamplesMatchPlaybackRate": beatmap.BeatmapInfo.SamplesMatchPlaybackRate = Parsing.ParseInt(pair.Value) == 1; break; case @"Countdown": beatmap.BeatmapInfo.Countdown = (CountdownType)Enum.Parse(typeof(CountdownType), pair.Value); break; case @"CountdownOffset": beatmap.BeatmapInfo.CountdownOffset = Parsing.ParseInt(pair.Value); break; } }
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); } }