56 lines
1.6 KiB
C#
56 lines
1.6 KiB
C#
using System;
|
|
|
|
namespace ABCUnity
|
|
{
|
|
class TimeSignature
|
|
{
|
|
public int beatCount { get; }
|
|
public float noteValue { get; }
|
|
|
|
public TimeSignature(int beatCount, float noteValue)
|
|
{
|
|
this.beatCount = beatCount;
|
|
this.noteValue = noteValue;
|
|
}
|
|
|
|
public static TimeSignature Parse(string timeSignature)
|
|
{
|
|
if (timeSignature == "C")
|
|
return new TimeSignature(4, 1.0f / 4.0f);
|
|
else if (timeSignature == "C|")
|
|
return new TimeSignature(2, 1.0f / 2.0f);
|
|
|
|
var parts = timeSignature.Split('/');
|
|
|
|
if (parts.Length < 2)
|
|
throw new LayoutException($"Unsupported Time Signature: {timeSignature}");
|
|
|
|
try
|
|
{
|
|
var beatCount = int.Parse(parts[0]);
|
|
var noteValue = 1 / float.Parse(parts[1]);
|
|
|
|
return new TimeSignature(beatCount, noteValue);
|
|
}
|
|
catch (Exception)
|
|
{
|
|
throw new LayoutException($"Unsupported Time Signature: {timeSignature}");
|
|
}
|
|
}
|
|
|
|
public override bool Equals(object obj)
|
|
{
|
|
return obj is TimeSignature signature &&
|
|
beatCount == signature.beatCount &&
|
|
noteValue == signature.noteValue;
|
|
}
|
|
|
|
public override int GetHashCode()
|
|
{
|
|
int hashCode = 1857893462;
|
|
hashCode = hashCode * -1521134295 + beatCount.GetHashCode();
|
|
hashCode = hashCode * -1521134295 + noteValue.GetHashCode();
|
|
return hashCode;
|
|
}
|
|
}
|
|
} |