Jump to content
Sign in to follow this  


Recommended Posts

;;; default setting: it changes in every generation the highest and lowest pitch by an OCTAVE 
;;; by changing :position (see examples) you could change which position should be changed/transposed
;;; default interval is 12


(defun chord-contraction/expansion (n pitchlist &key (position nil) (interval 12) (chord nil))
  (let* ((pitchlist (if (chordp (car pitchlist))
                      (melodize pitchlist)
         (position (if (null position)
                     (list 0 (1- (length pitchlist)))
                     (if (listp position)
                       (list position (- (1- (length pitchlist)) position)))))
         (pitchlist  (cons 
                      (loop repeat n
                        collect (setf pitchlist (sort-asc
                                                  (position-replace position 
                                                                     (pitch-transpose interval (list (nth (car position) pitchlist)))
                                                                     (pitch-transpose (neg! interval) (list (nth (cadr position) pitchlist))))
    (if (null chord)
      (chordize pitchlist))))

;;; EXAMPLES: evaluate by cmd3

(setf 12-tone-field '(f3 fs3 gs3 c4 d4 e4 b4 cs5 eb5 g5 a5 bb5))

(chord-contraction/expansion 4 12-tone-field :chord t)
=> ((f3fs3gs3c4d4e4b4cs5eb5g5a5bb5) (fs3gs3c4d4e4f4bb4b4cs5eb5g5a5) (gs3c4d4e4f4fs4a4bb4b4cs5eb5g5) (c4d4e4f4fs4g4gs4a4bb4b4cs5eb5) (d4eb4e4f4fs4g4gs4a4bb4b4c5cs5))

(chord-contraction/expansion 4 12-tone-field :chord t :interval 48)
=> ((f3fs3gs3c4d4e4b4cs5eb5g5a5bb5) (bb1fs3gs3c4d4e4b4cs5eb5g5a5f7) (f3fs3gs3c4d4e4b4cs5eb5g5a5bb5) (bb1fs3gs3c4d4e4b4cs5eb5g5a5f7) (f3fs3gs3c4d4e4b4cs5eb5g5a5bb5))

;;; with spezific positions (inner change)
(chord-contraction/expansion 4 12-tone-field :chord t :position 3)
=> ((f3fs3gs3c4d4e4b4cs5eb5g5a5bb5) (f3fs3gs3d4eb4e4b4c5cs5g5a5bb5) (f3fs3gs3cs4eb4e4b4c5d5g5a5bb5) (f3fs3gs3d4eb4e4b4c5cs5g5a5bb5) (f3fs3gs3cs4eb4e4b4c5d5g5a5bb5))

(chord-contraction/expansion 4 12-tone-field :chord t :position '(0 5))
=> ((f3fs3gs3c4d4e4b4cs5eb5g5a5bb5) (e3fs3gs3c4d4f4b4cs5eb5g5a5bb5) (f3fs3gs3c4d4e4b4cs5eb5g5a5bb5) (e3fs3gs3c4d4f4b4cs5eb5g5a5bb5) (f3fs3gs3c4d4e4b4cs5eb5g5a5bb5))

;;;; with different intervals

(chord-contraction/expansion 4 12-tone-field :chord t :interval 11)
=> ((f3fs3gs3c4d4e4b4cs5eb5g5a5bb5) (fs3gs3c4d4e4e4b4b4cs5eb5g5a5) (gs3c4d4e4e4f4bb4b4b4cs5eb5g5) (c4d4e4e4f4g4gs4bb4b4b4cs5eb5) (d4e4e4e4f4g4gs4bb4b4b4b4cs5))

(chord-contraction/expansion 4 12-tone-field :chord t :interval 7)
=> ((f3fs3gs3c4d4e4b4cs5eb5g5a5bb5) (fs3gs3c4c4d4e4b4cs5eb5eb5g5a5) (gs3c4c4cs4d4e4b4cs5d5eb5eb5g5) (c4c4cs4d4eb4e4b4c5cs5d5eb5eb5) (c4cs4d4eb4e4g4gs4b4c5cs5d5eb5))


Edited by AM

Share this post

Link to post
Share on other sites

Looks interesting.

The function seems to work.

I tryed some ideas with 3 or 4-note chords. It's easier to figure out what it does.

What is the musical idea behind it ?

What's the musical purpose?

Any example in the context of a composition?



Share this post

Link to post
Share on other sites

hi julio


it's too complicated to share the code...the FUNCTION is made for a specific idea of the work (not common), so it's made for MY need...

here is a short sketch of the work... (part of it)


a) generating a pitch-sequence => by using a 12-tone-seq + its expansion by a sorting-algorithm (with GEN-SORT) => an INTERVAL-order mutates to a SCALE (see the list-plot)

b) pitches are projected on a sequence of symmetrical expanding/compressing FIELDS (with CHORD-CONTR...) => you see how the pitch-seq is contracted/exapnded in "space"


- result is a kind of interference of this processes => at the end you see (in list-plot) that the interference is going more and more to ONE LEVEL - to a SCALE 

- so its a kind of inside/out. the inherent structure, the inherent process/order is more and more recognizable during the process (start with compr/exp. 12-tone-row to the simple SCALE)






the project is a bit larger. this sequence (which rhythm is based on a binary-event-filter (data of a jpeg of an artist))  is only the structural background (some ideas developed by LACHENMANN) - on this NET (the score you see) there will be other GESTALTS/MOTIFS etc...

because my needs are such specific to my and my idea - most of the functions i had to code for myself, or modify/enlarge the OPMO functions, great that this is possible on this platform.


sorry a bit complicated and i can't not describe it properly with a few words 🧐





Share this post

Link to post
Share on other sites

Dear André,


Thank you for the detailed explanation.

In the mind of the composers there is a lot of not so evident processes.

This is deep.

All the best,


Share this post

Link to post
Share on other sites

I will share whatever I can as soon as I can.

I'm writing (notating) everything by hand ☠️  when composing and arranging.

I have used OM since day 1 and before that SCOM for many years.

Still I have  not learned much Lisp mainly caused by lack of time.

I use these tools mainly for chaotic experimenting I would say.


I have just quit working and is now a happy retired and hope to be able to spend more time wit OM and Lisp.



Share this post

Link to post
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.

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.

Sign in to follow this  

  • Create New...