From 717e77b47e72917db0e6b06fc4a301e5aa3e24f8 Mon Sep 17 00:00:00 2001 From: PopSlime Date: Mon, 6 Mar 2023 08:16:42 +0800 Subject: [PATCH] Fix inaccurate beat snapping for Quaver charts. --- Assets/Cryville/Crtr/Extensions/Quaver/QuaverChartConverter.cs | 3 ++- Assets/Cryville/Crtr/Extensions/TimingModel.cs | 2 +- Assets/Cryville/Crtr/Extensions/osu/osuChartConverter.cs | 2 +- 3 files changed, 4 insertions(+), 3 deletions(-) diff --git a/Assets/Cryville/Crtr/Extensions/Quaver/QuaverChartConverter.cs b/Assets/Cryville/Crtr/Extensions/Quaver/QuaverChartConverter.cs index e3a4c1f..16dd2c0 100644 --- a/Assets/Cryville/Crtr/Extensions/Quaver/QuaverChartConverter.cs +++ b/Assets/Cryville/Crtr/Extensions/Quaver/QuaverChartConverter.cs @@ -60,7 +60,7 @@ namespace Cryville.Crtr.Extensions.Quaver { evs.Sort(); var longevs = new Dictionary(); - var tm = new TimeTimingModel(src.TimingPoints[0].StartTime / 1e3); + var tm = new TimeTimingModel(src.TimingPoints[0].StartTime / 1e3, 2e-3); foreach (var ev in evs) { tm.ForwardTo(ev.StartTime / 1e3); if (ev is EventWrapper.HitObject) { @@ -84,6 +84,7 @@ namespace Cryville.Crtr.Extensions.Quaver { else if (ev is EventWrapper.TimingPoint) { var tev = (EventWrapper.TimingPoint)ev; tm.BPM = tev.Event.Bpm; + tm.ForceSnap(); chart.sigs.Add(new Chart.Signature { time = tm.FractionalBeatTime, tempo = tev.Event.Bpm, diff --git a/Assets/Cryville/Crtr/Extensions/TimingModel.cs b/Assets/Cryville/Crtr/Extensions/TimingModel.cs index bb6b8f5..95a12fc 100644 --- a/Assets/Cryville/Crtr/Extensions/TimingModel.cs +++ b/Assets/Cryville/Crtr/Extensions/TimingModel.cs @@ -43,7 +43,7 @@ namespace Cryville.Crtr.Extensions { } public class TimeTimingModel : TimingModel { public readonly double InputTimeAccuracy; - public TimeTimingModel(double accuracy = 2e-3, double offset = 0) : base(offset) { + public TimeTimingModel(double offset = 0, double accuracy = 2e-3) : base(offset) { if (accuracy <= 0) throw new ArgumentOutOfRangeException("accuracy"); InputTimeAccuracy = accuracy; } diff --git a/Assets/Cryville/Crtr/Extensions/osu/osuChartConverter.cs b/Assets/Cryville/Crtr/Extensions/osu/osuChartConverter.cs index 9d78d21..74d062d 100644 --- a/Assets/Cryville/Crtr/Extensions/osu/osuChartConverter.cs +++ b/Assets/Cryville/Crtr/Extensions/osu/osuChartConverter.cs @@ -108,7 +108,7 @@ namespace Cryville.Crtr.Extensions.osu { else if (ev is osuEvent.TimingChange) { var tev = (osuEvent.TimingChange)ev; if (tm == null) { - tm = new TimeTimingModel(2e-3, tev.StartTime / 1e3); + tm = new TimeTimingModel(tev.StartTime / 1e3, 2e-3); bgmEv.offset = (float)(tev.StartTime / 1e3 + OFFSET); } tm.BeatLength = tev.BeatLength / 1e3;