Interval constructor
Interval(
{ - required int number,
- String? qualityName,
})
Implementation
factory Interval({required int number, String? qualityName}) {
assert(1 <= number && number <= 8);
late int semitones;
try {
semitones = _semitonesByNumber[number - 1];
} on RangeError {
throw new ArgumentError("invalid interval number: $number");
}
if (qualityName == null) qualityName = intervalNames[semitones][0];
final key = "$qualityName$number";
if (_cache.containsKey(key)) return _cache[key]!;
final qualitySemitones = _numberIsPerfect(number)
? "dPA".indexOf(qualityName) - 1
: "dmMA".indexOf(qualityName) - 2;
// if (qualitySemitones < 0)
// throw new ArgumentError("invalid interval quality: $qualityName");
semitones += qualitySemitones;
return _cache[key] =
new Interval._internal(number, qualityName, qualitySemitones);
}