osu/osu.Game/Beatmaps/WorkingBeatmap.cs

88 lines
2.4 KiB
C#
Raw Normal View History

//Copyright (c) 2007-2016 ppy Pty Ltd <contact@ppy.sh>.
//Licensed under the MIT Licence - https://raw.githubusercontent.com/ppy/osu/master/LICENCE
using System;
using System.IO;
using osu.Framework.Audio.Track;
using osu.Game.Beatmaps.Formats;
using osu.Game.Beatmaps.IO;
using osu.Game.Database;
namespace osu.Game.Beatmaps
{
public class WorkingBeatmap : IDisposable
{
2016-10-28 12:08:32 +00:00
public BeatmapInfo BeatmapInfo;
public readonly ArchiveReader Reader;
private Beatmap beatmap;
public Beatmap Beatmap
{
get
{
if (beatmap != null) return beatmap;
try
{
2016-10-28 12:08:32 +00:00
using (var stream = new StreamReader(Reader.ReadFile(BeatmapInfo.Path)))
beatmap = BeatmapDecoder.GetDecoder(stream)?.Decode(stream);
}
catch { }
return beatmap;
}
set { beatmap = value; }
}
private AudioTrack track;
public AudioTrack Track
{
get
{
2016-10-28 10:55:48 +00:00
if (track != null) return track;
try
{
2016-10-28 12:08:32 +00:00
var trackData = Reader.ReadFile(BeatmapInfo.Metadata.AudioFile);
2016-10-28 10:55:48 +00:00
if (trackData != null)
track = new AudioTrackBass(trackData);
}
2016-10-28 10:55:48 +00:00
catch { }
return track;
}
set { track = value; }
}
public WorkingBeatmap(BeatmapInfo beatmapInfo = null, ArchiveReader reader = null)
{
2016-10-28 12:08:32 +00:00
this.BeatmapInfo = beatmapInfo;
Reader = reader;
}
private bool isDisposed;
protected virtual void Dispose(bool disposing)
{
if (!isDisposed)
{
track?.Dispose();
Reader?.Dispose();
isDisposed = true;
}
}
public void Dispose()
{
Dispose(true);
}
public void TransferTo(WorkingBeatmap working)
{
2016-10-28 12:08:32 +00:00
if (track != null && working.BeatmapInfo.Metadata.AudioFile == BeatmapInfo.Metadata.AudioFile && working.BeatmapInfo.BeatmapSet.Path == BeatmapInfo.BeatmapSet.Path)
working.track = track;
}
}
}