;; look at the pc-lib.scm to find what scales and chord symbols are available
;; define some scales as pitch classes
(define *c-major* (pc:scale 0 'ionian))
(define *c-minor* (pc:scale 0 'aeolian))
(define *a-aeolian* (pc:scale 9 'aeolian))
;; check *c-major* against pc list
(print (equal? *c-major* '(0 2 4 5 7 9 11)))
(print (equal? *a-aeolian* '(9 11 0 2 4 5 7)))
;; define some chords
(define *cmaj7* (pc:chord 0 '^7))
(define *dmin* (pc:chord 2 '-))
(define *f-7b5* (pc:chord 5 '-7b5))
;; a non-standard pitch set
(define *wierd-pc* (list 0 1 5 9 10 11))
;; pc:? examples
(pc:? 61 (pc:scale 5 'ionian)) ; is c# in f major
(pc:? 61 (pc:scale 2 'ionian)) ; is c# in d major
;; quantize-pc examples
;; find the closest value in the pitch class
(pc:quantize 65 *wierd-pc*)
(pc:quantize 66 *wierd-pc*)
(pc:quantize 77 *cmaj7*)
(pc:quantize 96 *f-7b5*)
;; random-pc examples
;; select any pitch from the class within lower and upper bounds
(pc:random 60 72 *a-aeolian*)
;; relative-pc examples
;; select pitch from pitch class a specified number of steps from the
;; original pitch.
(pc:relative 60 -1 *c-major*)
(pc:relative 60 -1 *c-minor*)
;; make-chord-from-pc examples
;; Select an even distribution of notes from pitch class within bounds.
;; non-deterministic (i.e. result can vary each time)
(pc:make-chord 48 72 4 *dmin*)
;; returns a diatonic chord based on a root major or minor key and degree
(pc:diatonic 0 '- 'i) ; c minor
(pc:diatonic 0 '- 'vi) ; ab major
(pc:diatonic 0 '- 'ii) ; d minor
(pc:diatonic 0 '- 'v7) ; g dom 7
(pc:diatonic 0 '- 'i) ; c minor