diff --git a/osu.Game/Extensions/EditorDisplayExtensions.cs b/osu.Game/Extensions/TimeDisplayExtensions.cs
similarity index 77%
rename from osu.Game/Extensions/EditorDisplayExtensions.cs
rename to osu.Game/Extensions/TimeDisplayExtensions.cs
index f749b88b46..dacde44ca1 100644
--- a/osu.Game/Extensions/EditorDisplayExtensions.cs
+++ b/osu.Game/Extensions/TimeDisplayExtensions.cs
@@ -22,5 +22,11 @@ namespace osu.Game.Extensions
/// An editor formatted display string.
public static string ToEditorFormattedString(this TimeSpan timeSpan) =>
$"{(timeSpan < TimeSpan.Zero ? "-" : string.Empty)}{timeSpan:mm\\:ss\\:fff}";
+
+ public static string ToFormattedDuration(this double milliseconds) =>
+ ToFormattedDuration(TimeSpan.FromMilliseconds(milliseconds));
+
+ public static string ToFormattedDuration(this TimeSpan timeSpan) =>
+ timeSpan.Hours == 0 ? $"{timeSpan:mm\\:ss}" : $"{timeSpan:HH\\:mm\\:ss}";
}
}
diff --git a/osu.Game/Rulesets/Mods/ModMuted.cs b/osu.Game/Rulesets/Mods/ModMuted.cs
index 9eb218fd9b..7fde14d6ca 100644
--- a/osu.Game/Rulesets/Mods/ModMuted.cs
+++ b/osu.Game/Rulesets/Mods/ModMuted.cs
@@ -7,7 +7,6 @@ using osu.Framework.Audio;
using osu.Framework.Audio.Track;
using osu.Framework.Bindables;
using osu.Framework.Graphics;
-using osu.Framework.Graphics.Containers;
using osu.Framework.Graphics.Sprites;
using osu.Game.Configuration;
using osu.Game.Rulesets.Objects;
@@ -82,7 +81,7 @@ namespace osu.Game.Rulesets.Mods
}
if (AffectsHitSounds.Value)
- drawableRuleset.AudioContainer.AddAdjustment(AdjustableProperty.Volume, mainVolumeAdjust);
+ drawableRuleset.Audio.AddAdjustment(AdjustableProperty.Volume, mainVolumeAdjust);
}
public void ApplyToScoreProcessor(ScoreProcessor scoreProcessor)
diff --git a/osu.Game/Rulesets/UI/DrawableRuleset.cs b/osu.Game/Rulesets/UI/DrawableRuleset.cs
index b3242a8b4b..29559f5036 100644
--- a/osu.Game/Rulesets/UI/DrawableRuleset.cs
+++ b/osu.Game/Rulesets/UI/DrawableRuleset.cs
@@ -7,6 +7,7 @@ using System.Linq;
using System.Threading;
using JetBrains.Annotations;
using osu.Framework.Allocation;
+using osu.Framework.Audio;
using osu.Framework.Bindables;
using osu.Framework.Graphics;
using osu.Framework.Graphics.Containers;
@@ -99,12 +100,12 @@ namespace osu.Game.Rulesets.UI
private DrawableRulesetDependencies dependencies;
///
- /// An audio container which can be used to apply adjustments to playfield content.
+ /// Audio adjustments which are applied to the playfield.
///
///
/// Does not affect .
///
- public AudioContainer AudioContainer { get; private set; }
+ public IAdjustableAudioComponent Audio { get; private set; }
///
/// Creates a ruleset visualisation for the provided ruleset and beatmap.
@@ -163,13 +164,15 @@ namespace osu.Game.Rulesets.UI
[BackgroundDependencyLoader]
private void load(CancellationToken? cancellationToken)
{
+ AudioContainer audioContainer;
+
InternalChild = frameStabilityContainer = new FrameStabilityContainer(GameplayStartTime)
{
FrameStablePlayback = FrameStablePlayback,
Children = new Drawable[]
{
FrameStableComponents,
- AudioContainer = new AudioContainer
+ audioContainer = new AudioContainer
{
RelativeSizeAxes = Axes.Both,
Child = KeyBindingInputManager
@@ -181,6 +184,8 @@ namespace osu.Game.Rulesets.UI
}
};
+ Audio = audioContainer;
+
if ((ResumeOverlay = CreateResumeOverlay()) != null)
{
AddInternal(CreateInputManager()