// Copyright (c) ppy Pty Ltd <contact@ppy.sh>. Licensed under the MIT Licence. // See the LICENCE file in the repository root for full licence text. using System.IO; using System.Linq; using osu.Framework.Audio; using osu.Framework.Audio.Track; using osu.Framework.Graphics.Textures; using osu.Framework.Graphics.Video; using osu.Game.Beatmaps; using osu.Game.Beatmaps.Formats; using osu.Game.IO; using osu.Game.IO.Archives; using osu.Game.Tests.Resources; namespace osu.Game.Tests { /// <summary> /// A <see cref="WorkingBeatmap"/> that is used for test scenes that include waveforms. /// </summary> public class WaveformTestBeatmap : WorkingBeatmap { private readonly ZipArchiveReader reader; private readonly Stream stream; private readonly ITrackStore trackStore; public WaveformTestBeatmap(AudioManager audioManager) : base(new BeatmapInfo(), audioManager) { stream = TestResources.GetTestBeatmapStream(); reader = new ZipArchiveReader(stream); trackStore = audioManager.GetTrackStore(reader); } protected override void Dispose(bool isDisposing) { base.Dispose(isDisposing); stream?.Dispose(); reader?.Dispose(); trackStore?.Dispose(); } protected override IBeatmap GetBeatmap() => createTestBeatmap(); protected override Texture GetBackground() => null; protected override VideoSprite GetVideo() => null; protected override Waveform GetWaveform() => new Waveform(trackStore.GetStream(firstAudioFile)); protected override Track GetTrack() => trackStore.Get(firstAudioFile); private string firstAudioFile => reader.Filenames.First(f => f.EndsWith(".mp3")); private Stream getBeatmapStream() => reader.GetStream(reader.Filenames.First(f => f.EndsWith(".osu"))); private Beatmap createTestBeatmap() { using (var beatmapStream = getBeatmapStream()) using (var beatmapReader = new LineBufferedReader(beatmapStream)) return Decoder.GetDecoder<Beatmap>(beatmapReader).Decode(beatmapReader); } } }