about summary refs log tree commit diff
path: root/website/sandbox/chord-drill-sergeant/src/Theory.elm
diff options
context:
space:
mode:
authorWilliam Carroll <wpcarro@gmail.com>2020-04-12T18·20+0100
committerWilliam Carroll <wpcarro@gmail.com>2020-04-12T18·20+0100
commit1298263629dc43b2a6a2a3f18a7a779189b66738 (patch)
tree6fb6d275f00d265290796a010d8596f8972aeab6 /website/sandbox/chord-drill-sergeant/src/Theory.elm
parent24692ab46508d5e3348af19a6eae583a6d02e0e7 (diff)
Whitelist and blacklist chords by inversion type
Add checkboxes to support various chord positions.
Diffstat (limited to 'website/sandbox/chord-drill-sergeant/src/Theory.elm')
-rw-r--r--website/sandbox/chord-drill-sergeant/src/Theory.elm52
1 files changed, 43 insertions, 9 deletions
diff --git a/website/sandbox/chord-drill-sergeant/src/Theory.elm b/website/sandbox/chord-drill-sergeant/src/Theory.elm
index 4dc4c3e511e8..b240822999f7 100644
--- a/website/sandbox/chord-drill-sergeant/src/Theory.elm
+++ b/website/sandbox/chord-drill-sergeant/src/Theory.elm
@@ -269,6 +269,21 @@ noteInCentralOctave noteClass =
             B4
 
 
+{-| Return the human-readable version of a chord inversion.
+-}
+inversionName : ChordInversion -> String
+inversionName inversion =
+    case inversion of
+        Root ->
+            "Root"
+
+        First ->
+            "First"
+
+        Second ->
+            "Second"
+
+
 {-| Return the note that is one half step away from `note` in the direction,
 `dir`.
 In the case of stepping up or down from the end of the piano, this returns a
@@ -750,24 +765,43 @@ notesFromRange start end =
         |> List.Extra.takeWhile ((/=) end)
 
 
+{-| Return a list of all of the chord inversions about which we know.
+-}
+allInversions : List ChordInversion
+allInversions =
+    [ Root, First, Second ]
+
+
+{-| Return a list of all of the chord types about which we know.
+-}
+allChordTypes : List ChordType
+allChordTypes =
+    [ Major
+    , Major7
+    , MajorDominant7
+    , Minor
+    , MinorMajor7
+    , MinorDominant7
+    , Augmented
+    , AugmentedDominant7
+    , Diminished
+    , DiminishedDominant7
+    , DiminishedMajor7
+    ]
+
+
 {-| Return a list of all of the chords that we know about.
 Only create chords from the range of notes delimited by the range `start` and
 `end`.
 -}
-allChords : Note -> Note -> List Chord
-allChords start end =
+allChords : Note -> Note -> List ChordInversion -> List Chord
+allChords start end chordInversions =
     let
         notes =
             notesFromRange start end
 
         chordTypes =
-            [ Major
-            ]
-
-        chordInversions =
-            [ Root
-            , First
-            ]
+            allChordTypes
     in
     notes
         |> List.Extra.andThen