Jump to content

Featured Replies

Posted
;;; THIS FUNCTION DOING SYMM TRANSPOSITIONS TO CONRACT (OR EXPAND, depends on INTERVAL) A CHORD or PITCH-SEQ
;;; 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
          


;;; FUNCTION

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

 

  • Author

BUG is fixed now. should work correct!

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?

Best,

Julio

  • Author

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)

 

 

example.jpeg

 

 

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 🧐

 

 

 

 

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,

Julio

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.

 

/Lasse

Create an account or sign in to comment


Copyright © 2014-2025 Opusmodus™ Ltd. All rights reserved.
Product features, specifications, system requirements and availability are subject to change without notice.
Opusmodus, the Opusmodus logo, and other Opusmodus trademarks are either registered trademarks or trademarks of Opusmodus Ltd.
All other trademarks contained herein are the property of their respective owners.

Powered by Invision Community

Important Information

Terms of Use Privacy Policy