Commit Description:
Add timers for Simulation and various engines...
Commit Description:
Add timers for Simulation and various engines Starting to add additional timers for different stages of the process of updating in order to get more insight into what is slowing it down. The update takes 9ms, which is much longer than it used to. Engine-specific timers are coming later.
File last commit:
Show/Diff file:
Action:
FNA/src/Media/Song.cs
195 lines | 3.1 KiB | text/x-csharp | CSharpLexer
#region License
/* FNA - XNA4 Reimplementation for Desktop Platforms
* Copyright 2009-2020 Ethan Lee and the MonoGame Team
*
* Released under the Microsoft Public License.
* See LICENSE for details.
*/
#endregion
#region Using Statements
using System;
using System.IO;
#endregion
namespace Microsoft.Xna.Framework.Media
{
public sealed class Song : IEquatable<Song>, IDisposable
{
#region Public Properties
public string Name
{
get;
private set;
}
public TimeSpan Duration
{
get;
internal set;
}
public bool IsProtected
{
get
{
return false;
}
}
public bool IsRated
{
get
{
return false;
}
}
public int PlayCount
{
get;
internal set;
}
public int Rating
{
get
{
return 0;
}
}
public int TrackNumber
{
get
{
return 0;
}
}
#endregion
#region Public IDisposable Properties
public bool IsDisposed
{
get;
private set;
}
#endregion
#region Internal Variables
internal string handle;
#endregion
#region Constructors, Deconstructor, Dispose()
internal Song(string fileName, string name = null)
{
if (!File.Exists(fileName))
{
throw new FileNotFoundException(fileName);
}
handle = fileName;
Name = name;
IsDisposed = false;
}
internal Song(string fileName, int durationMS) : this(fileName)
{
Duration = TimeSpan.FromMilliseconds(durationMS);
}
~Song()
{
Dispose();
}
public void Dispose()
{
IsDisposed = true;
}
#endregion
#region Public Comparison Methods/Operators
public bool Equals(Song song)
{
return (((object) song) != null) && (handle == song.handle);
}
public override bool Equals(Object obj)
{
if (obj == null)
{
return false;
}
return Equals(obj as Song);
}
public static bool operator ==(Song song1, Song song2)
{
if (((object) song1) == null)
{
return ((object) song2) == null;
}
return song1.Equals(song2);
}
public static bool operator !=(Song song1, Song song2)
{
return !(song1 == song2);
}
public override int GetHashCode()
{
return base.GetHashCode();
}
#endregion
#region Public Static Methods
/// <summary>
/// Constructs a new Song object based on the specified URI.
/// </summary>
/// <remarks>
/// This method matches the signature of the one in XNA4, however we currently can't play remote songs, so
/// the URI is required to be a file name and the code uses the LocalPath property only.
/// </remarks>
/// <param name="name">Name of the song.</param>
/// <param name="uri">Uri object that represents the URI.</param>
/// <returns>Song object that can be used to play the song.</returns>
public static Song FromUri(string name, Uri uri)
{
string path;
if (uri.IsAbsoluteUri)
{
// If it's absolute, be sure we can actually get it...
if (!uri.IsFile)
{
throw new InvalidOperationException(
"Only local file URIs are supported for now"
);
}
path = uri.LocalPath;
}
else
{
path = Path.Combine(
TitleLocation.Path,
uri.ToString()
);
}
return new Song(path, name);
}
#endregion
}
}