Files
RushMusic.Unity/Assets/ABCUnity/Scripts/TimeSignature.cs
T
2025-05-13 00:35:44 +03:00

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;
}
}
}