From 55f1867b8e40f4da613f8558c961f3993a584743 Mon Sep 17 00:00:00 2001 From: JulioJamon54 <48096207+JulioJamon54@users.noreply.github.com> Date: Fri, 19 Apr 2024 22:22:25 +0200 Subject: [PATCH] Add double harmonic major scale pattern With documentation, Wikipedia diagram, and unit tests for the scale notes, name and toString() --- lib/src/scale/scale_pattern.dart | 14 +++++++++++ test/src/scale/scale_pattern_test.dart | 34 ++++++++++++++++++++++++++ 2 files changed, 48 insertions(+) diff --git a/lib/src/scale/scale_pattern.dart b/lib/src/scale/scale_pattern.dart index e510c745..3112d320 100644 --- a/lib/src/scale/scale_pattern.dart +++ b/lib/src/scale/scale_pattern.dart @@ -231,6 +231,19 @@ final class ScalePattern { Interval.m2, ]); + /// See [Double harmonic scale](https://en.wikipedia.org/wiki/Double_harmonic_scale). + /// + /// ![C Double harmonic scale](https://upload.wikimedia.org/score/r/f/rf4xfu7bhu0k9n0ccidte6yjngjswnm/rf4xfu7b.png). + static const doubleHarmonicMajor = ScalePattern([ + Interval.m2, + Interval.A2, + Interval.m2, + Interval.M2, + Interval.m2, + Interval.A2, + Interval.m2, + ]); + /// Creates a new [ScalePattern] from the given [chordPattern]. /// /// Example: @@ -447,6 +460,7 @@ final class ScalePattern { majorPentatonic => 'Major pentatonic', minorPentatonic => 'Minor pentatonic', octatonic => 'Octatonic', + doubleHarmonicMajor => 'Double harmonic major', _ => null, }; diff --git a/test/src/scale/scale_pattern_test.dart b/test/src/scale/scale_pattern_test.dart index b42da142..eee71fd9 100644 --- a/test/src/scale/scale_pattern_test.dart +++ b/test/src/scale/scale_pattern_test.dart @@ -382,6 +382,35 @@ void main() { Scale([Note.g, Note.b.flat, Note.c, Note.d, Note.f, Note.g]), ); }); + + test('returns the double harmonic major Scale on Note', () { + expect( + ScalePattern.doubleHarmonicMajor.on(Note.c), + Scale([ + Note.c, + Note.d.flat, + Note.e, + Note.f, + Note.g, + Note.a.flat, + Note.b, + Note.c, + ]), + ); + expect( + ScalePattern.doubleHarmonicMajor.on(Note.f.sharp), + Scale([ + Note.f.sharp, + Note.g, + Note.a.sharp, + Note.b, + Note.c.sharp, + Note.d, + Note.e.sharp, + Note.f.sharp, + ]), + ); + }); }); group('.mirrored', () { @@ -573,6 +602,7 @@ void main() { expect(ScalePattern.majorPentatonic.name, 'Major pentatonic'); expect(ScalePattern.minorPentatonic.name, 'Minor pentatonic'); expect(ScalePattern.octatonic.name, 'Octatonic'); + expect(ScalePattern.doubleHarmonicMajor.name, 'Double harmonic major'); }); }); @@ -606,6 +636,10 @@ void main() { ScalePattern.octatonic.toString(), 'Octatonic (M2 m2 M2 m2 M2 m2 M2 m2)', ); + expect( + ScalePattern.doubleHarmonicMajor.toString(), + 'Double harmonic major (m2 A2 m2 M2 m2 A2 m2)', + ); }); });