Jump to content

Chord Progressions


Recommended Posts

Hi,

I am looking for some functions that support chord progressions. For example, I would like to get the chords in the popular "I-IV-V" sequence in C Major scale. Is there built-in support for such standard progressions in the keys of common scales?

 

Regards,

Rangarajan 

Link to comment
Share on other sites

Hi, 

this may help:

 

;; Utility function
(defun collect-degree* (nb steps list)
  (loop
    for n from 0 to (+ nb 2) by steps
    collect (nth n list)))

;(collect-degree* 3 2 scale)
;(collect-degree* 5 2 (pitch-rotate 6 scale))


;;; DEGREE
(defun degree (n-degr scale &key (sounds 3) (steps 2))
  (chordize
   (collect-degree*
    sounds 
    steps
    (pitch-rotate (- n-degr 1) scale))))

;;; Usage

#|
(degree 1 scale)
=> '(c4e4g4)

(degree 1 scale :sounds 4)
=> '(c4e4g4b4)

(degree 1 scale :sounds 5)
=> '(c4e4g4b4d5)

(degree 4 scale :sounds 4)
=> '(f4a4c5e5)
|#


;;; COLLECT-DEGREE-FROM-SCALE
(defun collect-degree-from-scale (deg-list scale &key (nb-sounds '(3)) (steps '(2)))
  (loop 
    for d in deg-list
    for nbs in (gen-trim (length deg-list) nb-sounds)
    for stps in (gen-trim (length deg-list) steps)
    collect (degree d scale :sounds nbs :steps stps)))

;;; Usage
#|
(collect-degree-from-scale '(1 4 5 1 4 2 5 1) scale :nb-sounds '(3 3 4 3 3 3 3 4))


(setf scale2 (integer-to-pitch (expand-chord-name 'arezzo-major-diatonic-hexachord)))
(collect-degree-from-scale '(1 4 5 1 6 4 2 5) scale2 :nb-sounds '(3 3 4 3 3 3 3 4))

(setf row (rnd-row :type :pitch))
(mapcar 'sort-asc (collect-degree-from-scale '(1 4 5 1 6 4 2 5) row :nb-sounds '(3 3 4 3 3 3 3 4)))

|#

SB.

Link to comment
Share on other sites

HARMONIC-PROGRESSION coming soon:

 

harmonic-progression degree scale &key (size 3) (step 2) relative

                            root row variant (chord t) (flatten t) seed

 

(harmonic-progression '(2 3 4) '(c major))
=> (e4g4b4 f4a4c5 g4b4d5)

(harmonic-progression '(3 4 0) '(c major))
=> (f4a4c5 g4b4d5 c4e4g4)

(harmonic-progression '(0 1 2 3 4 5 6 7) '(c major))
=> (c4e4g4 d4f4a4 e4g4b4 f4a4c5 g4b4d5 a4c5e5 b4d5f5 c5e5g5)

(harmonic-progression '(2 6 5 4) '(a minor))
=> (c5e5g5 g5b5d6 f5a5c6 e5g5b5)

 

(setf scale '(c4 d4 e4 f4 g4 a4))
(harmonic-progression '(0 1 2 3 4 5 6 7) scale)
=> (c4e4g4 d4f4a4 e4g4c5 f4a4d5 g4c5e5 a4d5f5 c5e5g5 d5f5a5)

(harmonic-progression '(0 1 2 3 4 5 6 7) scale :step '(2 (2 1) 2))
=> (c4e4g4 d4f4g4 e4g4c5 f4a4d5 g4c5d5 a4d5f5 c5e5g5 d5f5g5)

(harmonic-progression '(0 3 4 0 -2 -3 -1 0 -2) scale)
=> (c4e4g4 f4a4d5 g4c5e5 c4e4g4 g3c4e4 f3a3d4 a3d4f4 c4e4g4 g3c4e4)

(harmonic-progression '(0 3 4 0 -2 -3 -1 0 -2) scale
                      :size '(3 3 4 5 4 4 3 3 3))
=> (c4e4g4 f4a4d5 g4c5e5g5 c4e4g4c5e5 g3c4e4g4 f3a3d4f4 a3d4f4 c4e4g4 g3c4e4)

(harmonic-progression '(0 3 4 0 -2 -3 -1 0 -2) scale
                      :step '(2 2 1 2 (1 2) 2 2 2 1))
=> (c4e4g4 f4a4d5 g4a4c5 c4e4g4 g3a3d4 f3a3d4 a3d4f4 c4e4g4 g3a3c4)

(harmonic-progression '(0 3 4 0 -2 -3 -1 0 -2) scale
                      :root '(-6 -2 3 -3 2 -1 0))
=> (fs3bb3cs4 eb4g4c5 bb4eb5g5 a3cs4e4 a3d4fs4 e3gs3cs4 a3d4f4 fs3bb3cs4 f3bb3d4)

(harmonic-progression '(0 3 4 0 -2 -3 -1 0 -2) scale
                      :size '(3 3 4 5 4 4 3 3 3)
                      :step '(2 2 1 2 (2 1) 2 2 2 (2 1))
                      :root '(c4 g4 a4 bb4 c5 ds5 e4 e5 bb4))
=> (c4e4g4 c5e5a5 e5fs5a5b5 bb4d5f5bb5d6 g4c5d5f5 gs4c5f5gs5 cs4fs4a4 e5gs5b5 f4bb4c5)

(harmonic-progression '(0 3 4 0 -2 -3 -1 0 -2) scale
                      :size '(3 3 4 5 4 4 3 3 3)
                      :step '(2 2 1 2 (2 1) 2 2 2 (2 1))
                      :root '(c4 g4 a4 bb4 c5 ds5 e4 e5 bb4)
                      :row t)
=> (c4e4g4 c5e5a5 e5fs5a5b5 bb4d5f5 g4c5d5f5 gs4c5f5 cs4fs4a4 e5gs5b5 f4bb4c5)

 

(setf row '(gs4 ds4 g4 e4 as4 fs4 d4 f4 cs4 c4 a4 b4))
(harmonic-progression '(0 3 4 0 -2 -3 -1 0 -2) row)
=> (gs4g4bb4 e4fs4f4 bb4d4cs4 gs4g4bb4 a3gs4g4 c3b3eb4 b3eb4e4 gs4g4bb4 a3gs4g4)

(harmonic-progression '(0 3 4 0 -2 -3 -1 0 -2) row
                      :size '(3 4) :root '(-6 -2 3 -3 2 0 3 -2))
=> (fs3f3gs3 fs3gs3g3d3 f4a3gs3 a3gs3b3eb3 eb3d4cs4 e2eb3g3gs3 fs3bb3b3 bb3a3c4e3 g2fs3f3)

 

(setf p45 (partial-row (library 'tbn-cs3-frames 'partials 'p45)))
(harmonic-progression '(1 4 5 1 3 4 2 4 3) p45 :size '(3 4) :root '(-6 -2 3 -3 2 0 3 -2))
=> (c4a4b5 b5f6c7fs7 gs6d7g7 eb4c5d6gs6 f5g6cs7 cs6g6d7gs7 cs5e6bb6 b5f6c7fs7 a4b5f6)

(harmonic-progression '(1 4 5 1 3 4 2 4 3) p45
                      :size '(3 4)
                      :root '(-6 -2 3 -3 2 0 3 -2)
                      :chord nil
                      :flatten nil
                      :variant '?
                      :seed 8634)
=> ((c4 a4 b5) (b5 f5 bb4 e4) (gs6 d7 g7) (eb4 fs3 e2 bb1) (cs7 g7 f6)
    (cs6 g5 c5 fs4) (cs5 bb3 e3) (fs7 c7 f6 b5) (a4 g3 cs3))

 

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...

Important Information

Terms of Use Privacy Policy