November 23, 2025Nov 23 Followup on post: https://opusmodus.com/forums/topic/3989-om-lydian-chromatic-concept-of-tonal-organization-george-russell/Here's another 16bars short attempt to play with different level of in- and outgoing melodies according to LCCOTO..Code for the function find-chord-for-parent-scale is this post.Would be great to have a scale like lydian-chromatic (c1 g1 d2 a2 e3 b3 fs4 gs4 eb5 bb5 f6 cs7) properly built into OM (respecting the order of pitches, which is important for LCCOTO).Maybe with a reference to Russell as this seems to be a tradition in OM (Modes.opmo).The OM built-in scale chromatic-lydian with similar name seems to be 7-pitch scale (c4 cs4 e4 f4 fs4 a4 b4). (setf seed (rnd-pick (gen-integer-seq '((1 100000))))) (init-seed seed) ;;; Idea -------------- ;;; ;;; Cliff Scherer, 2025 ;;; ;;; Melodic pitch material from two parent scales with different levels of ingoing/outgoing ;;; Chords symbol material in one scale ;;; Bass pitch for chords ;;; All materials are organized in lists aligned to the same size ;;; Later we may pick list elements using one random master index ;;; ;;; Scales ;; Define LCCOTO scale --- (setf lydian-chromatic-scale (make-scale 'c1 12 :alt '(7 7 7 7 7 7 2 7 7 7 8))) (create-tonality lydian-chromatic 'lydian-chromatic-scale) ;; Set 2 parent scale tonics --- (setf c-lydian-chromatic-scale (expand-tonality '(c lydian-chromatic)) eb-lydian-chromatic-scale (expand-tonality '(eb lydian-chromatic))) ;;; Melody ;; Melody pitch material with different consonance/dissonance (setf c-lydian-chromatic-1 (ambitus '(c4 c5) (gen-surround c-lydian-chromatic-scale :start 0 :size 5)) eb-lydian-chromatic-1 (ambitus '(eb4 eb6) (gen-surround eb-lydian-chromatic-scale :start 0 :size 5)) c-lydian-chromatic-2 (ambitus '(c4 c6) (gen-surround c-lydian-chromatic-scale :start 0 :size 7)) eb-lydian-chromatic-2 (ambitus '(eb4 eb6) (gen-surround eb-lydian-chromatic-scale :start 0 :size 6)) c-lydian-chromatic-3 (ambitus '(c5 c6) (gen-surround c-lydian-chromatic-scale :start 2 :size 8)) eb-lydian-chromatic-3 (ambitus '(c5 c6) (gen-surround eb-lydian-chromatic-scale :start 2 :size 5))) (setf melo-mat-size 2 melo-mat-pitch-1 (rnd-sample melo-mat-size (combination 4 c-lydian-chromatic-1)) melo-mat-pitch-2 (rnd-sample melo-mat-size (combination 4 c-lydian-chromatic-2)) melo-mat-pitch-3 (rnd-sample melo-mat-size (combination 4 c-lydian-chromatic-3)) melo-mat-pitch-4 (rnd-sample melo-mat-size (combination 4 eb-lydian-chromatic-1)) melo-mat-pitch-5 (rnd-sample melo-mat-size (combination 4 eb-lydian-chromatic-2)) melo-mat-pitch-6 (rnd-sample melo-mat-size (combination 4 eb-lydian-chromatic-3)) ;; main result melo-mat-pitch (flatten-sublist (list melo-mat-pitch-1 melo-mat-pitch-1 melo-mat-pitch-2 melo-mat-pitch-2 melo-mat-pitch-3 melo-mat-pitch-4 melo-mat-pitch-4 melo-mat-pitch-5 melo-mat-pitch-6)) ) ;; Voice-variant material for melody (setf melo-voice-variant-variant '(a d ad d) melo-voice-variant-tuplet '(1 1 1 1)) ;; Melody velocity material (setf melo-mat-velocity '((0.1)(0.2)(0.3)(0.4)(0.45))) ;; Melody initial length material (setf melo-mat-length-cell-1 (pcs-rhythm '7-35 :rotate '(10) :legato t)) (setf melo-mat-length-cell-2 (pcs-rhythm '7-35 :rotate '(11) :legato t)) (setf melo-mat-length (list (fit-to-span '4/4 melo-mat-length-cell-1) (fit-to-span '4/4 (length-augmentation 2 melo-mat-length-cell-1)) (fit-to-span '4/4 (length-augmentation 4 melo-mat-length-cell-1)) (fit-to-span '4/4 melo-mat-length-cell-2) (fit-to-span '4/4 (length-augmentation 2 melo-mat-length-cell-2)) (fit-to-span '4/4 (length-augmentation 4 melo-mat-length-cell-2)))) ;;; Chords ;; Chord pitch material (setf chord-quality '((m7/add2)(maj7/add2)(7/sus2)) chords-found-in-scale (find-chord-for-parent-scale chord-scale chord-quality) chord-mat-size 2 ;; main result chord-mat-symbol (combination chord-mat-size (flatten-sublist (flatten-sublist chords-found-in-scale)))) ;; Chord velocity material (setf chord-mat-velocity '((0.1)(0.2)(0.3)(0.35))) ;; Chord length material (setf chord-mat-length '((q -q q -q)(-q q -q q)(e -q. q -q)(q. -e q. -e))) ;;; Bass ;; Bass pitch material (setf chord-mat-root (find-root (flatten-sublist chord-mat)) bass-mat-pitch (pitch-transpose -24 (gen-divide chord-mat-size chord-mat-root))) ;; Bass velocity material (setf bass-mat-velocity '((0.45)(0.5)(0.55)(0.6)(0.65))) ;; Bass length material (setf bass-mat-length '((h h)(q -q q -q)(-q q -q q))) ;; The lists have different lengths (setf master-mat-length (max (length melo-mat-pitch) (length melo-mat-velocity) (length melo-voice-variant-variant) (length melo-mat-length) (length chord-mat-symbol) (length chord-mat-velocity) (length chord-mat-length) (length bass-mat-pitch) (length bass-mat-velocity) (length bass-mat-length) )) ;; Trim them to have the same (setf melo-mat-pitch (gen-trim master-mat-length melo-mat-pitch) melo-voice-variant-variant (gen-trim master-mat-length melo-voice-variant-variant) melo-voice-variant-tuplet (gen-trim master-mat-length melo-voice-variant-tuplet) melo-mat-velocity (gen-trim master-mat-length melo-mat-velocity) melo-mat-length (gen-trim master-mat-length melo-mat-length) chord-mat-symbol (gen-trim master-mat-length chord-mat-symbol) chord-mat-velocity (gen-trim master-mat-length chord-mat-velocity) chord-mat-length (gen-trim master-mat-length chord-mat-length) bass-mat-pitch (gen-trim master-mat-length bass-mat-pitch) bass-mat-velocity (gen-trim master-mat-length bass-mat-velocity) bass-mat-length (gen-trim master-mat-length bass-mat-length) ) ;; Pick material with one master index (setf nbars 16 master-index (rnd-sample nbars (gen-integer 0 (- master-mat-length 1))) melo-mat-pitch-picked (mapcar (lambda (x) (nth x melo-mat-pitch)) master-index) melo-voice-variant-variant (mapcar (lambda (x) (nth x melo-voice-variant-variant)) master-index) melo-voice-variant-tuplet (mapcar (lambda (x) (nth x melo-voice-variant-tuplet)) master-index) melo-mat-velocity (mapcar (lambda (x) (nth x melo-mat-velocity)) master-index) melo-mat-length (mapcar (lambda (x) (nth x melo-mat-length)) master-index) chord-mat-symbol-picked (mapcar (lambda (x) (nth x chord-mat-symbol)) master-index) chord-mat-velocity (mapcar (lambda (x) (nth x chord-mat-velocity)) master-index) chord-mat-length (mapcar (lambda (x) (nth x chord-mat-length)) master-index) bass-mat-pitch-picked (mapcar (lambda (x) (nth x bass-mat-pitch)) master-index) bass-mat-velocity (mapcar (lambda (x) (nth x bass-mat-velocity)) master-index) bass-mat-length (mapcar (lambda (x) (nth x bass-mat-length)) master-index) ) ;;; Create omn ------------ ;;; ;;; ;; Assemble --- (setf melody-omn (make-omn :pitch melo-mat-pitch-picked :length melo-mat-length :velocity melo-mat-velocity :swallow nil) chords-omn (make-omn :pitch chord-mat-symbol-picked :length chord-mat-length :velocity chord-mat-velocity :swallow nil) bass-omn (make-omn :pitch bass-mat-pitch-picked :length bass-mat-length :velocity bass-mat-velocity :swallow nil)) ;; Final voices --- (setf melody (filter-tie (velocity-to-dynamic (flatten-sublist (loop for me in melody-omn for va in melo-voice-variant-variant for tr in melo-voice-variant-tuplet collect (voice-variant (list me) :variant va :tuplet tr))))) ;;melody (velocity-to-dynamic melody-omn) chords (velocity-to-dynamic (drop-voicing chords-omn :type '(1 2) :leading 'l)) bass (velocity-to-dynamic bass-omn)) ;; Ambitus control (length melody) (setf melody (ambitus '(c4 c5) melody :section '(0 1 2 3))) (setf melody (ambitus '(g4 g5) melody :section '(4 5 6 7))) (setf melody (ambitus '(c5 c6) melody :section '(8 9 10 11))) (setf melody (ambitus '(g5 g6) melody :section '(12))) (setf melody (ambitus '(c4 c5) melody :section '(13 14))) (setf melody (ambitus '(c4 c5) melody :section '(15 16))) ;; Preview --- (ps 'gm :tempo 60 :p (list (omn-to-time-signature melody '(4 4)) chords) :bass (list bass)) ;; Record MIDI (compile-score *last-score* :output :midi :file (workspace-file "v.mid") :if-exists :new-index) seedSeed for this example was: 24113.LCC4.mp3
Create an account or sign in to comment