Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

♻️ refactor(interval): rename shorter static constants #177

Merged
merged 3 commits into from
Jun 11, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
8 changes: 4 additions & 4 deletions lib/src/chordable.dart
Original file line number Diff line number Diff line change
Expand Up @@ -13,11 +13,11 @@ mixin Chordable<T> {
/// Returns a new [T] with an [ImperfectQuality.diminished] root triad.
T get diminished;

/// Returns a new [T] with a suspended [Interval.majorSecond].
T sus2() => add(Interval.majorSecond, replaceSizes: const [3, 4]);
/// Returns a new [T] with a suspended [Interval.M2].
T sus2() => add(Interval.M2, replaceSizes: const [3, 4]);

/// Returns a new [T] with a suspended [Interval.perfectFourth].
T sus4() => add(Interval.perfectFourth, replaceSizes: const [2, 3]);
/// Returns a new [T] with a suspended [Interval.P4].
T sus4() => add(Interval.P4, replaceSizes: const [2, 3]);

/// Returns a new [T] adding a [quality] 6th.
T add6([ImperfectQuality quality = ImperfectQuality.major]) =>
Expand Down
16 changes: 8 additions & 8 deletions lib/src/harmony/chord.dart
Original file line number Diff line number Diff line change
Expand Up @@ -16,8 +16,8 @@ class Chord<T extends Scalable<T>>
///
/// The pattern is calculated based on the intervals between the notes rather
/// than from the root note. This approach helps differentiate compound
/// intervals (e.g., [Interval.majorNinth]) from simple intervals (e.g.,
/// [Interval.majorSecond]) in chords where distance is not explicit (e.g.,
/// intervals (e.g., [Interval.M9]) from simple intervals (e.g.,
/// [Interval.M2]) in chords where distance is not explicit (e.g.,
/// [Note] based chords rather than [PositionedNote] based).
///
/// Example:
Expand Down Expand Up @@ -90,16 +90,16 @@ class Chord<T extends Scalable<T>>
///
/// Example:
/// ```dart
/// const Chord([Note.a, Note.c, Note.e]).transposeBy(Interval.minorThird)
/// const Chord([Note.a, Note.c, Note.e]).transposeBy(Interval.m3)
/// == const Chord([Note.c, Note.e.flat, Note.g])
///
/// ChordPattern.majorTriad.on(Note.g.inOctave(4))
/// .transposeBy(Interval.majorThird)
/// .transposeBy(Interval.M3)
/// == const Chord([
/// Note.b.inOctave(4),
/// Note.d.sharp.inOctave(5),
/// Note.f.sharp.inOctave(5)
/// ])
/// Note.b.inOctave(4),
/// Note.d.sharp.inOctave(5),
/// Note.f.sharp.inOctave(5)
/// ])
/// ```
@override
Chord<T> transposeBy(Interval interval) =>
Expand Down
53 changes: 11 additions & 42 deletions lib/src/harmony/chord_pattern.dart
Original file line number Diff line number Diff line change
Expand Up @@ -7,34 +7,19 @@ class ChordPattern with Chordable<ChordPattern> {
/// Creates a new [ChordPattern] from [intervals].
const ChordPattern(this.intervals);

static const augmentedTriad = ChordPattern([
Interval.majorThird,
Interval.augmentedFifth,
]);

static const majorTriad = ChordPattern([
Interval.majorThird,
Interval.perfectFifth,
]);

static const minorTriad = ChordPattern([
Interval.minorThird,
Interval.perfectFifth,
]);

static const diminishedTriad = ChordPattern([
Interval.minorThird,
Interval.diminishedFifth,
]);
static const augmentedTriad = ChordPattern([Interval.M3, Interval.A5]);
static const majorTriad = ChordPattern([Interval.M3, Interval.P5]);
static const minorTriad = ChordPattern([Interval.m3, Interval.P5]);
static const diminishedTriad = ChordPattern([Interval.m3, Interval.d5]);

/// Creates a new [ChordPattern] from [intervalSteps].
///
/// Example:
/// ```dart
/// ChordPattern.intervalSteps([Interval.minorThird, Interval.majorThird])
/// ChordPattern.intervalSteps([Interval.m3, Interval.M3])
/// == ChordPattern.minorTriad
///
/// ChordPattern.intervalSteps([Interval.majorThird, Interval.majorThird])
/// ChordPattern.intervalSteps([Interval.M3, Interval.M3])
/// == ChordPattern.augmentedTriad
/// ```
factory ChordPattern.intervalSteps(List<Interval> intervalSteps) =>
Expand Down Expand Up @@ -103,7 +88,7 @@ class ChordPattern with Chordable<ChordPattern> {
/// Example:
/// ```dart
/// ChordPattern.majorTriad.add7().add9().modifiers
/// == const [Interval.minorSeventh, Interval.majorNinth]
/// == const [Interval.m7, Interval.M9]
/// ```
List<Interval> get modifiers => intervals.skip(2).toList();

Expand All @@ -113,11 +98,7 @@ class ChordPattern with Chordable<ChordPattern> {
/// Example:
/// ```dart
/// ChordPattern.majorTriad.add7().augmented
/// == const ChordPattern([
/// Interval.majorThird,
/// Interval.augmentedFifth,
/// Interval.minorSeventh
/// ])
/// == const ChordPattern([Interval.M3, Interval.A5, Interval.m7])
/// ```
@override
ChordPattern get augmented =>
Expand All @@ -129,11 +110,7 @@ class ChordPattern with Chordable<ChordPattern> {
/// Example:
/// ```dart
/// ChordPattern.minorTriad.add7().major
/// == const ChordPattern([
/// Interval.majorThird,
/// Interval.perfectFifth,
/// Interval.minorSeventh
/// ])
/// == const ChordPattern([Interval.M3, Interval.P5, Interval.m7])
/// ```
@override
ChordPattern get major =>
Expand All @@ -145,11 +122,7 @@ class ChordPattern with Chordable<ChordPattern> {
/// Example:
/// ```dart
/// ChordPattern.majorTriad.add7().minor
/// == const ChordPattern([
/// Interval.minorThird,
/// Interval.perfectFifth,
/// Interval.minorSeventh
/// ])
/// == const ChordPattern([Interval.m3, Interval.P5, Interval.m7])
/// ```
@override
ChordPattern get minor =>
Expand All @@ -161,11 +134,7 @@ class ChordPattern with Chordable<ChordPattern> {
/// Example:
/// ```dart
/// ChordPattern.majorTriad.add7().diminished
/// == const ChordPattern([
/// Interval.minorThird,
/// Interval.diminishedFifth,
/// Interval.minorSeventh
/// ])
/// == const ChordPattern([Interval.m3, Interval.d5, Interval.m7])
/// ```
@override
ChordPattern get diminished =>
Expand Down
70 changes: 35 additions & 35 deletions lib/src/interval/enharmonic_interval.dart
Original file line number Diff line number Diff line change
@@ -1,21 +1,23 @@
// ignore_for_file: constant_identifier_names

part of '../../music_notes.dart';

final class EnharmonicInterval extends Enharmonic<Interval> {
const EnharmonicInterval(super.semitones);

static const perfectUnison = EnharmonicInterval(0);
static const minorSecond = EnharmonicInterval(1);
static const majorSecond = EnharmonicInterval(2);
static const minorThird = EnharmonicInterval(3);
static const majorThird = EnharmonicInterval(4);
static const perfectFourth = EnharmonicInterval(5);
static const P1 = EnharmonicInterval(0);
static const m2 = EnharmonicInterval(1);
static const M2 = EnharmonicInterval(2);
static const m3 = EnharmonicInterval(3);
static const M3 = EnharmonicInterval(4);
static const P4 = EnharmonicInterval(5);
static const tritone = EnharmonicInterval(6);
static const perfectFifth = EnharmonicInterval(7);
static const minorSixth = EnharmonicInterval(8);
static const majorSixth = EnharmonicInterval(9);
static const minorSeventh = EnharmonicInterval(10);
static const majorSeventh = EnharmonicInterval(11);
static const perfectOctave = EnharmonicInterval(12);
static const P5 = EnharmonicInterval(7);
static const m6 = EnharmonicInterval(8);
static const M6 = EnharmonicInterval(9);
static const m7 = EnharmonicInterval(10);
static const M7 = EnharmonicInterval(11);
static const P8 = EnharmonicInterval(12);

@override
Set<Interval> get spellings {
Expand Down Expand Up @@ -44,23 +46,23 @@ final class EnharmonicInterval extends Enharmonic<Interval> {
///
/// Example:
/// ```dart
/// EnharmonicInterval.majorSecond.isDescending == false
/// (-EnharmonicInterval.perfectFourth).isDescending == true
/// EnharmonicInterval.M2.isDescending == false
/// (-EnharmonicInterval.P4).isDescending == true
/// ```
bool get isDescending => semitones.isNegative;

/// Returns a copy of this [Interval] based on [isDescending].
///
/// Example:
/// ```dart
/// EnharmonicInterval.minorSecond.descending()
/// == -EnharmonicIntervalInterval.minorSecond
/// EnharmonicInterval.majorThird.descending(isDescending: false)
/// == EnharmonicIntervalInterval.majorThird
/// (-EnharmonicIntervalInterval.perfectFifth).descending()
/// == -EnharmonicIntervalInterval.perfectFifth
/// (-EnharmonicIntervalInterval.majorSeventh).descending(isDescending: false)
/// == EnharmonicIntervalInterval.majorSeventh
/// EnharmonicInterval.m2.descending()
/// == -EnharmonicIntervalInterval.m2
/// EnharmonicInterval.M3.descending(isDescending: false)
/// == EnharmonicIntervalInterval.M3
/// (-EnharmonicIntervalInterval.P5).descending()
/// == -EnharmonicIntervalInterval.P5
/// (-EnharmonicIntervalInterval.M7).descending(isDescending: false)
/// == EnharmonicIntervalInterval.M7
/// ```
EnharmonicInterval descending({bool isDescending = true}) =>
this.isDescending != isDescending ? -this : EnharmonicInterval(semitones);
Expand All @@ -69,11 +71,10 @@ final class EnharmonicInterval extends Enharmonic<Interval> {
///
/// Example:
/// ```dart
/// EnharmonicInterval.tritone + EnharmonicInterval.minorSecond
/// == EnharmonicInterval.perfectFifth
/// EnharmonicInterval.tritone + EnharmonicInterval.m2
/// == EnharmonicInterval.P5
///
/// EnharmonicInterval.majorThird + EnharmonicInterval.minorSixth
/// == EnharmonicInterval.perfectOctave
/// EnharmonicInterval.M3 + EnharmonicInterval.m6 == EnharmonicInterval.P8
/// ```
EnharmonicInterval operator +(EnharmonicInterval other) =>
EnharmonicInterval(semitones + other.semitones);
Expand All @@ -82,10 +83,9 @@ final class EnharmonicInterval extends Enharmonic<Interval> {
///
/// Example:
/// ```dart
/// EnharmonicInterval.perfectFourth - EnharmonicInterval.minorThird
/// == EnharmonicInterval.majorSecond
/// EnharmonicInterval.P4 - EnharmonicInterval.m3 == EnharmonicInterval.M2
///
/// EnharmonicInterval.minorThird - EnharmonicInterval.tritone
/// EnharmonicInterval.m3 - EnharmonicInterval.tritone
/// == const EnharmonicInterval(-3)
/// ```
EnharmonicInterval operator -(EnharmonicInterval other) =>
Expand All @@ -95,19 +95,19 @@ final class EnharmonicInterval extends Enharmonic<Interval> {
///
/// Example:
/// ```dart
/// -EnharmonicInterval.minorThird == const EnharmonicInterval(-3)
/// -EnharmonicInterval.perfectUnison == EnharmonicInterval.perfectUnison
/// -const EnharmonicInterval(-7) == EnharmonicInterval.perfectFifth
/// -EnharmonicInterval.m3 == const EnharmonicInterval(-3)
/// -EnharmonicInterval.P1 == EnharmonicInterval.P1
/// -const EnharmonicInterval(-7) == EnharmonicInterval.P5
/// ```
EnharmonicInterval operator -() => EnharmonicInterval(-semitones);

/// Multiplies this [EnharmonicInterval] by [factor].
///
/// Example:
/// ```dart
/// EnharmonicInterval.perfectFourth * -1 == -EnharmonicInterval.perfectFourth
/// EnharmonicInterval.majorSixth * 0 == EnharmonicInterval.perfectUnison
/// EnharmonicInterval.minorThird * 2 == EnharmonicInterval.tritone
/// EnharmonicInterval.P4 * -1 == -EnharmonicInterval.P4
/// EnharmonicInterval.M6 * 0 == EnharmonicInterval.P1
/// EnharmonicInterval.m3 * 2 == EnharmonicInterval.tritone
/// ```
EnharmonicInterval operator *(int factor) =>
EnharmonicInterval(semitones * factor);
Expand Down