Jump to content

Recursive Function for finding complementary set of notes in Chord/Scale relationship


Recommended Posts

Hey, people !

 

I´m doing a function to extract the complementary set of notes.

For example:

 

1) Specify a set of notes, like a chord, Dm7

 

(setf note-list '(d5 f5 a5 c6))

 

Specify a tonality, like Cmajor or D dorian (same notes)

(expand-tonality '(c5 major))

 

Now, I want a function that gives me all the other available notes from the mode, except the chord tones (the first set of notes).

 

So, this function gives me exactly what I need (for ONE tonality at a time and ONE chord at a time):

 

(let ((rem (expand-tonality '(c5 major)))
      (super (ambitus '(c5 b5) note-list)))
  (loop for i in super
    do (setf rem (remove i rem))
    finally (return rem)))

 

Ok, this give me the right result, I.E., the complementary set of notes of C major in relation to Dm7

=> (e5 g5 b5)

 

The question is simple:

 

How can I do it for a list with many tonalities and many chords. How to do this recursively in nested lists, like

 

(setf note-list '((d5 f5 a5 c6)(eb4 gb4 bb4 db4)(fs4 as4 cs4)))

 

to sucessive tonalities, like:

(expand-tonality '((c5 major) (db4 major) (gb4 major)))

 

Since this WON´T work

 

(let ((rem (ambitus '(c5 b5) (expand-tonality '((c5 major) (db5 major) (gb5 major)))))
      (super (ambitus '(c5 b5) '((d5 f5 a5 c6)(eb4 gb4 bb4 db4)(fs4 as4 cs4)))))
  (loop for i in super
    do (setf rem (remove i rem))
    finally (return rem)))

 

The expected result, if the above worked would be:

 

 ((e5 g5 b5)  (f5 ab5 c5) (gs4 cb5 ds5))

 

Thanks in advance !!

 

Best !

Julio

Link to comment
Share on other sites

Loop in the loop:

 

(let ((rem (ambitus '(c5 b5) (expand-tonality '((c5 major) (db5 major) (gb5 major)))))
      (super (ambitus '(c5 b5) '((d5 f5 a5 c6) (eb4 gb4 bb4 db4) (fs4 as4 cs4)))))
  (loop for s in super
    for r in rem
    collect (loop for i in s
              do (setf r (remove i r))
              finally (return r))))
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