Skip to content

Commit

Permalink
fix(size): šŸ› rewrite semitones getter without relying on deprecatedā€¦
Browse files Browse the repository at this point in the history
ā€¦ `absShift` (#577)

Signed-off-by: Albert MaƱosa <26429103+albertms10@users.noreply.github.com>
  • Loading branch information
albertms10 authored Jan 23, 2025
1 parent 8aecaf1 commit 9ad3cc1
Show file tree
Hide file tree
Showing 2 changed files with 28 additions and 5 deletions.
7 changes: 2 additions & 5 deletions lib/src/interval/size.dart
Original file line number Diff line number Diff line change
Expand Up @@ -130,12 +130,9 @@ extension type const Size._(int size) implements int {
/// ```
int get semitones {
final absSimple = simple.abs();
final octaveShift = chromaticDivisions * (absShift ~/ octave);
// We exclude perfect octaves (simplified as 8) from the lookup to consider
// them 0 (as if they were modulo `Size.octave`).
final size = Size(absSimple == octave ? 1 : absSimple);
final octaves = (abs() - absSimple) ~/ 7;

return (_sizeToSemitones[size]! + octaveShift) * sign;
return (_sizeToSemitones[absSimple]! + octaves * 12) * sign;
}

/// The absolute [Size] value taking octave shift into account.
Expand Down
26 changes: 26 additions & 0 deletions test/src/interval/interval_test.dart
Original file line number Diff line number Diff line change
Expand Up @@ -405,7 +405,33 @@ void main() {

expect(const Interval.perfect(Size(15)).semitones, 24);
expect(const Interval.perfect(Size(22)).semitones, 36);
expect(
const Interval.imperfect(Size(23), ImperfectQuality.minor).semitones,
37,
);
expect(
const Interval.imperfect(Size(23), ImperfectQuality.major).semitones,
38,
);
expect(
const Interval.imperfect(Size(-24), ImperfectQuality.minor).semitones,
-39,
);
expect(
const Interval.imperfect(Size(24), ImperfectQuality.major).semitones,
40,
);
expect(const Interval.perfect(Size(25)).semitones, 41);
expect(const Interval.perfect(Size(-26)).semitones, -43);
expect(const Interval.perfect(Size(29)).semitones, 48);
expect(
const Interval.imperfect(Size(30), ImperfectQuality.minor).semitones,
49,
);
expect(
const Interval.imperfect(Size(-30), ImperfectQuality.major).semitones,
-50,
);
});
});

Expand Down

0 comments on commit 9ad3cc1

Please sign in to comment.