diff --git a/osu.Game.Rulesets.Mania/Beatmaps/ManiaBeatmapConverter.cs b/osu.Game.Rulesets.Mania/Beatmaps/ManiaBeatmapConverter.cs
index 125d8cdded..0ed2a0ba6f 100644
--- a/osu.Game.Rulesets.Mania/Beatmaps/ManiaBeatmapConverter.cs
+++ b/osu.Game.Rulesets.Mania/Beatmaps/ManiaBeatmapConverter.cs
@@ -13,6 +13,7 @@ using osu.Game.Rulesets.Mania.MathUtils;
using osu.Game.Database;
using osu.Game.Rulesets.Mania.Beatmaps.Patterns.Legacy;
using OpenTK;
+using osu.Game.Audio;
namespace osu.Game.Rulesets.Mania.Beatmaps
{
@@ -161,9 +162,10 @@ namespace osu.Game.Rulesets.Mania.Beatmaps
pattern.Add(new HoldNote
{
StartTime = HitObject.StartTime,
- Samples = HitObject.Samples,
Duration = endTimeData.Duration,
Column = column,
+ Head = { Samples = sampleInfoListAt(HitObject.StartTime) },
+ Tail = { Samples = sampleInfoListAt(endTimeData.EndTime) },
});
}
else if (positionData != null)
@@ -178,6 +180,24 @@ namespace osu.Game.Rulesets.Mania.Beatmaps
return pattern;
}
+
+ ///
+ /// Retrieves the sample info list at a point in time.
+ ///
+ /// The time to retrieve the sample info list from.
+ ///
+ private SampleInfoList sampleInfoListAt(double time)
+ {
+ var curveData = HitObject as IHasCurve;
+
+ if (curveData == null)
+ return HitObject.Samples;
+
+ double segmentTime = (curveData.EndTime - HitObject.StartTime) / curveData.RepeatCount;
+
+ int index = (int)(segmentTime == 0 ? 0 : (time - HitObject.StartTime) / segmentTime);
+ return curveData.RepeatSamples[index];
+ }
}
}
}
diff --git a/osu.Game.Rulesets.Mania/Objects/HoldNote.cs b/osu.Game.Rulesets.Mania/Objects/HoldNote.cs
index c241c4cf41..8cd757734c 100644
--- a/osu.Game.Rulesets.Mania/Objects/HoldNote.cs
+++ b/osu.Game.Rulesets.Mania/Objects/HoldNote.cs
@@ -58,6 +58,9 @@ namespace osu.Game.Rulesets.Mania.Objects
TimingControlPoint timingPoint = controlPointInfo.TimingPointAt(StartTime);
tickSpacing = timingPoint.BeatLength / difficulty.SliderTickRate;
+
+ Head.ApplyDefaults(controlPointInfo, difficulty);
+ Tail.ApplyDefaults(controlPointInfo, difficulty);
}
///