diff options
author | rekado <rekado@elephly.net> | 2016-10-01 18:33:49 +0200 |
---|---|---|
committer | rekado <rekado@elephly.net> | 2016-10-01 18:39:45 +0200 |
commit | 18843938965b101d4cb49d3bbe23760b14000254 (patch) | |
tree | c36247713dd0a9a6b2de3c5414309758b00e2995 | |
parent | 0e04741d8fb5fb53b6ec3d8444d739b0cf6eeb36 (diff) |
Validate scales.
-rw-r--r-- | scales/scales.scm | 15 | ||||
-rw-r--r-- | scales/ui.scm | 16 |
2 files changed, 27 insertions, 4 deletions
diff --git a/scales/scales.scm b/scales/scales.scm index 4d80bbf..38c7579 100644 --- a/scales/scales.scm +++ b/scales/scales.scm @@ -19,6 +19,7 @@ #:use-module (srfi srfi-1) #:use-module (scales utils) #:export (steps->scale + valid-scales lydian ionian @@ -76,3 +77,17 @@ root note and returns a list of scale notes." (steps->scale '(2 2 2 2 2 2))) (define chromatic (steps->scale '(1 1 1 1 1 1 1 1 1 1 1))) + +(define valid-scales + '(lydian + ionian + mixolydian + lydian-b7 + altered + symmetrical-diminished + dorian + aeolian + phrygian + locrian + whole-tone + chromatic)) diff --git a/scales/ui.scm b/scales/ui.scm index b95d5d9..8ddfda6 100644 --- a/scales/ui.scm +++ b/scales/ui.scm @@ -17,6 +17,7 @@ (define-module (scales ui) #:use-module (ice-9 getopt-long) + #:use-module (scales utils) #:use-module (scales fretboard) #:use-module (scales scales) #:export (main)) @@ -29,10 +30,17 @@ (lambda _ tuning))) (define (lookup-scale scale) - (catch #t - (lambda _ - (module-ref (resolve-interface '(scales scales)) scale)) - (lambda _ (steps->scale scale)))) + (if (member scale valid-scales) + (module-ref (resolve-interface '(scales scales)) scale) + (if (not (pair? scale)) + (leave " +Invalid scale \"~s\". +The scale must be either the name of a pre-defined scale or a list of steps. + +Valid scale names are: + +~{ ~s \n~}\n" scale valid-scales) + (steps->scale scale)))) (define (main args) (let* ((option-spec '((version (single-char #\v) (value #f)) |