-
Posts
1,066 -
Joined
-
Last visited
Reputation Activity
-
Stephane Boussuge got a reaction from AM in pitch-trajectory
Hi,
here's a function I've made for my personal usage.
May be it could be useful for some users...
Best
Stéphane
;;;=================================== ;;; PITCH-TRAJECTORY ;;;=================================== ;;; SB 1.11.21 ;;;=================================== (defun pitch-trajectory (nbpitch range tendency &key (variance 0.5) (type :around) (quantize 1/2) (smooth 1) filter-repeat seed ) (setf seed (rnd-seed seed)) (do-verbose ("pitch-trajectory :seed ~s" seed) (let* ((values (gen-tendency nbpitch tendency :variance variance :type type :seed (seed))) (smoothedval (vector-smooth smooth values)) (out (vector-to-pitch range smoothedval :quantize quantize)) ) (if filter-repeat (filter-repeat filter-repeat out) out)))) #| ;;; Tests divers (pitch-trajectory 32 '(c4 g5) '(0.1 1 0.1) :seed 1234) (pitch-trajectory 32 '(c4 g5) '(0.1 1 0.1) :seed 1234 :filter-repeat 1) (pitch-trajectory 32 '(c4 g5) '(0.1 1 0.1) :seed 1234 :filter-repeat 1 :variance 1 ) (pitch-trajectory 32 '(c4 g5) '(0.1 1 0.1) :seed 1234 :filter-repeat 1 :variance 0.1 ) (pitch-trajectory 32 '(c4 g5) '(0.1 1 0.1) :seed 1234 :filter-repeat 1 :smooth 0.1 ) (pitch-trajectory 32 '(c4 g5) '(0.1 1 0.1) :seed 1234 :filter-repeat 1 :quantize 1/4 ) (pitch-trajectory 32 '(c4 g5) '(0.1 1 0.1) :seed 1234 :filter-repeat 1 :quantize 1/8 ) (pitch-trajectory 32 '(c4 g5) '(0.1 1 0.1) :seed 1234 :filter-repeat 1 :variance 1 :quantize 1/8 ) (gen-filter-change (pitch-trajectory 32 '(c4 g5) '(0.1 1 0.1) :seed 1234) 's) |#
-
Stephane Boussuge reacted to opmo in String Quartet VEMA (in progress)
String Quartet VEMA (work in progress) with micro and spectral strategy.
String Quartet VEMA I.mp3 -
-
Stephane Boussuge reacted to JulioHerrlein in [HERRLEIN] Hauer Tropes as Clockface Diagrams: Dialogs among Forte, Carter and Ŝedivý - MUSMAT 2021
Hauer Tropes as Clockface Diagrams: Dialogs among Forte, Carter and Ŝedivý - MUSMAT 2021
I just did this presentation now !
All plots done in Opusmodus !
Hope you like it !
Best ! Julio
Here is the complete session of the Congress !
-
Stephane Boussuge got a reaction from JulioHerrlein in A.S. Mailbox live performance !
Excellent, congrats !
-
Stephane Boussuge reacted to JulioHerrlein in A.S. Mailbox live performance !
Dear Friends !
This is the performance of the piece A.S. Mailbox at the Musmat Congress !
This piece was all done in Opusmodus (with some post editing in Musescore).
Happy to share this with you !
I have one more thing this week...
There are many great pieces in the concert ! (and also a Schoenberg Quartet) ! Enjoy
-
Stephane Boussuge reacted to YiyangW in Apple M1 Arm processor?
I don't know if this information will be helpful for those who are also trapped with M1 or for future debugging, but I found a rather consistent pattern of crashing and potentially a way to avoid it:
Opusmodus on M1 always crash during threading.
So be patient. Wait until the interpreter finishes its job and then execute the next block of code. This also applies to any manipulations on the GUI, like saving files, function search, etc.
I know it sucks. But to make it suck less..
A side note. Earlier this year I helped upgrading a bunch of Python apps for M1, which also had issues of intermittent crash and it turned out the problem was also with threads. In that case the issue was solved when some problematic lines of code were removed (calling certain parent class methods during threading).
-
Stephane Boussuge reacted to JulioHerrlein in Méditation for String quartet
Congratulations, Stephane !!
Best !
-
Stephane Boussuge got a reaction from paul in Méditation for String quartet
Hi,
here's a short score composed for string quartet.
All the best to all OM users !
Stéphane
stephaneboussuge · Méditation
MeditationPourRené.opmo
01 - Conducteur - Méditation.pdf
-
Stephane Boussuge reacted to opmo in Combination Function Result (is it rigth ?)
Done:
(combination 3 '(0 1 2 3 4 5)) => ((0 1 2) (0 1 3) (0 1 4) (0 1 5) (0 2 3) (0 2 4) (0 2 5) (0 3 4) (0 3 5) (0 4 5) (1 2 3) (1 2 4) (1 2 5) (1 3 4) (1 3 5) (1 4 5) (2 3 4) (2 3 5) (2 4 5) (3 4 5)) (combination 3 '(0 1 2 3 4 5) :permute t) => ((0 1 2) (0 2 1) (1 0 2) (1 2 0) (2 0 1) (2 1 0) (0 1 3) (0 3 1) (1 0 3) (1 3 0) (3 0 1) (3 1 0) (0 1 4) (0 4 1) (1 0 4) (1 4 0) (4 0 1) (4 1 0) (0 1 5) (0 5 1) (1 0 5) (1 5 0) (5 0 1) (5 1 0) (0 2 3) (0 3 2) (2 0 3) (2 3 0) (3 0 2) (3 2 0) (0 2 4) (0 4 2) (2 0 4) (2 4 0) (4 0 2) (4 2 0) (0 2 5) (0 5 2) (2 0 5) (2 5 0) (5 0 2) (5 2 0) (0 3 4) (0 4 3) (3 0 4) (3 4 0) (4 0 3) (4 3 0) (0 3 5) (0 5 3) (3 0 5) (3 5 0) (5 0 3) (5 3 0) (0 4 5) (0 5 4) (4 0 5) (4 5 0) (5 0 4) (5 4 0) (1 2 3) (1 3 2) (2 1 3) (2 3 1) (3 1 2) (3 2 1) (1 2 4) (1 4 2) (2 1 4) (2 4 1) (4 1 2) (4 2 1) (1 2 5) (1 5 2) (2 1 5) (2 5 1) (5 1 2) (5 2 1) (1 3 4) (1 4 3) (3 1 4) (3 4 1) (4 1 3) (4 3 1) (1 3 5) (1 5 3) (3 1 5) (3 5 1) (5 1 3) (5 3 1) (1 4 5) (1 5 4) (4 1 5) (4 5 1) (5 1 4) (5 4 1) (2 3 4) (2 4 3) (3 2 4) (3 4 2) (4 2 3) (4 3 2) (2 3 5) (2 5 3) (3 2 5) (3 5 2) (5 2 3) (5 3 2) (2 4 5) (2 5 4) (4 2 5) (4 5 2) (5 2 4) (5 4 2) (3 4 5) (3 5 4) (4 3 5) (4 5 3) (5 3 4) (5 4 3))
-
-
Stephane Boussuge reacted to opmo in Function studies (Improviation No.1)
Function studies (Improviation No.1)
Some of function used in the study: logarithmic-spiral, ambitus-series, length-weight, length-legato, pitch-figurate...
The score will be part of the next update - "4. Score Examples/Piano/Improvisation No.1.opmo"
Best wishes,
Janusz
-
Stephane Boussuge reacted to opmo in Opusmodus 2.2.26603 (Update)
function-search
List of property types:
Operation:
analysis apply array call collect condition construct convert define display distribute evaluation filter find generate import initialize iterate map position print process reference result select test
Input:
array attribute binary cent chord clauses db decimal degree dictum element expression file float form function hertz hexachord instrument integer interval length linear list lists map midi msec name nil null number object omn pitch place radian random ratio row score sec section sequence set stream symbol test tick tonality tonality-form tuning values vector velocity voices
Output:
array articulation attribute binary cent chord data db decimal degree dynamic element external float form freq function graph group hertz index integer interval length linear list midi msec nil number object omn omn-form pitch plot radian ratio row score sec sequence test tick tuning values velocity voices
Intent:
above absolute accumulate add addition adjust alias align ambitus anacrusis analysis append apply array asc assemble assign atom attribute augmentation bar below between binary bind brownian build butlast cadr car cardinal cartesian case cellular cent centered change chord chordize class closest cluster collatz collect combination combine compile complement cond condition cons constant controller convert count create crossover cube curve db decf dechord decimal decode define delta demix density desc dictum difference diminution direction disassemble disjoin display dissolve divide division dynamic edit editor element envelope equal euclidean eval evaluation even everyother expand expansion factor fibonacci field figurate filter find fit flatten fragment function get goldbach group harmonics hertz hexachord highest import incf infinity insert instrument instrument-set integer interference interleave interval inversion invert iterate join klangreihen lambda last layer legato length letters library linear list live-coding lowest magic make mandelbrot map mapcar maplist marco markov matrix max melodize merge messiaen metronome micro midi min minus mix mod modify modus morph multiplication multiply mutate negative Noergaar noise normal normalize note nth nthcdr null number octave octaves odd offset omn omn-form order ornament palindrome pan parallel parameter partial path pattern pause pcs percent permute pick pitch plot plus polygon pop population position power-set preserve prime primes prob prog progn progression push pythagorean quantize quantum radian random range ratio read reduce reduction relation remove reorder repeat replace respell rest result retrograde reverse rewrite rhythm rotate round row sample sawtooth scale score section seed select send sequence series sets signature sine single-events size smooth sort sound-set span spiral square staccato step strawinski stream sub-plot subcomplex subdivision subseq substitute subtraction sum sums surround swallow swap symbol symmetric symmetry sync syncopate tempo tendency test text thread tie time time-signature timeline tonality tonnetz transform transition transpose tree triangle trim trope tuning tuplet ulam unfold-set unique unison variable variance variant variation vector velocity voice voices walk weight weight when zigzag
Category:
ambitus analysis array assemble attribute binary chord construct control convert definition distribute evaluation filter find fractal generate hexachord integer interval iterate length library map math midi mix number omn osc partial permutation pitch plot position predicate print probability quantization random row schillinger score section sequence series sieve signature sort span structure system text tonality transform tuning utilities variant vector velocity voice wave
This function returns a list of functions which satisfies the property test.
(function-search :input 'midi :output 'pitch) ..................................................... input: midi output: pitch midi-to-pitch .....................................................
To display the function document we place the mouse cursor on to the function name and press the control/tab keys.
Examples:
Here we search the category with filter properties:
(function-search :category 'filter) ..................................................... category: filter gen-filter-ambitus gen-filter-anacrusis gen-filter-change gen-filter-euclidean gen-filter-remove gen-filter-rnd filter-exclude filter-first filter-last filter-preserve filter-remove filter-repeat filter-tie .....................................................
This expression returns all functions with input float:
(function-search :input 'float) ..................................................... input: float random* float-to-ratio gen-controller gen-mutate-population gen-mutate prob? prob-map gen-tendency micro-quantize quantize rnd-centered rnd-round rnd-variance rnd rnd1 vector-multiply vector-offset vector-range vector-round vector-smooth vector-to-envelope vector-to-envelope2 gen-accent gen-cresc-dim gen-cresc gen-dim-cresc gen-dim .....................................................
More examples:
(function-search :input 'float :output 'velocity) ..................................................... input: float output: velocity gen-accent gen-cresc-dim gen-cresc gen-dim-cresc gen-dim .....................................................
(function-search :input 'float :output 'pitch) ..................................................... input: float output: pitch micro-quantize .....................................................
(function-search :operation 'generate :input 'float :output 'float) ..................................................... operation: generate input: float output: float random* gen-mutate gen-tendency rnd-centered rnd-round rnd-variance rnd rnd1 vector-offset vector-range vector-smooth vector-to-envelope vector-to-envelope2 gen-accent gen-cresc-dim gen-cresc gen-dim-cresc gen-dim .....................................................
(function-search :operation 'generate :output 'pitch) ..................................................... operation: generate output: pitch pitch-lsystem messiaen-permutation gen-cluster pitch-fragment pitch-repeat pitch-repeat2 pitch-repeat3 pitch-repeat4 harmonics rnd-form-set rnd-row klangreihen pcs-transpose pcs gen-trope trope-hexachord .....................................................
(function-search :input 'attribute) ..................................................... input: attribute disjoin-attributes join-attributes .....................................................
(function-search :operation 'test) ..................................................... operation: test ac-hexachordp attribute-symbolp chordp contain-attributep event-restp length-notep length-restp lengthp omn-formp pattern-matchp pitchp twelve-tone-segmentp twelve-tonep velocityp evenp minusp oddp plusp atom equal integerp listp null numberp ratiop symbolp osc-thread-alive? prob? .....................................................
(function-search :category 'chord) ..................................................... category: chord chord-inner-remove chord-interval-add chord-interval-remove chord-interval-replace chord-inversion chord-parallel-invert chord-pitch-unique chord-progression chord-variation chordize-list chordize create-chord dechord expand-chord-name expand-chord gen-chord-series gen-chord gen-chord2 gen-chord3 gen-cluster .....................................................
(function-search :intent 'ambitus) ..................................................... intent: ambitus ambitus-form gen-ambitus-series ambitus gen-binary-ambitus gen-filter-ambitus interval-ambitus .....................................................
(function-search :category 'structure) ..................................................... category: structure find-bar insert-bar remove-bar replace-bar split-lengths choralis gen-choralis assemble-voices counterpoint dictum-tempo gen-dictum make-dictum density-analysis density filter-density quantum gen-group gen-unison gen-pause micropolyphony polyphony do-section do-timeline do-timeline2 section-to-timeline timeline-to-section tonnetz-analysis tonnetz-structure tonnetz mclist .....................................................
Best wishes,
Janusz
-
Stephane Boussuge reacted to opmo in listener
Soon I will release the documentation for the SCORE-PLAYER and STOP-SCORE-PLAYER function.
-
Stephane Boussuge reacted to AM in listener
dear torsten,
that works perfect!
so i can display what my algo is doing in each loop...
thx
-
Stephane Boussuge reacted to opmo in Opusmodus 2.2.26563
2.2.26563
– Additional Functionality:
COUNTERPOINT - additional dictum keyword :tonality
GEN-DICTUM - additional dictum keyword :tonality
Additional dictum symbol (=) - repeats last method, harmony or tonality values.
In this example we assign an variabile to a list of tonalities:
(setf tonality1 '((major :root 'a3 :map step :rotate 1 :variant 'i) (minor :root 'e4 :map step) (major :root 'd4 :map step :rotate 1 :variant 'ri) (minor :root 'fs4 :map step))) (counterpoint patterns '(((1 2 1 2) :methods (r - (ri dl5) (r dl2)) :tonality tonality1)))
Tonality defined to all voices:
((1 2 1 2) :methods (r - (ri dl5) (r dl2)) :tonality ((major :map step)))
Same as above with repeat symbol (=). The symbol (=) means repeat of the last tonality used:
((1 2 1 2) :methods (r - (ri dl5) (r dl2)) :tonality ((major :map step) = = =))
Assigning variables to a list of methods:
(setf m1 '((t5 1 3) (t12 r)) m2 '(t4 (i t12 tie)) m3 '((r d7) (t9 dl3))) (counterpoint patterns '(((1 2) :methods m1) ((2 2) :methods m2) ((2 1) :methods m3)))
-
Stephane Boussuge reacted to JulioHerrlein in Replace Stream - Amazing Tool !!!!
Dear Janusz,
Thanks for the explanation.
I found my way to use it !!!
Finally !!!
It will be VERY USEFUL (thanks a lot)
Here is my way to use it:
SCORE BEFORE RE-PITCH
;;; BEFORE REPITCH (progn (setf rv1 '((1/8) (1/8 3/4 1/8 1/8 3/4) (1/4) (1/12 1/12 1/12 3/16 1/4 1/16 -3/8 1/8 1/4 -1/8 1/8) (3/4) (1/8 1/8 1/2 1/4 1/12 1/12 1/12) (3/16) (1/4 1/16 -3/8 1/8 1/4 -1/8 1/8 1/2) (1/4) (1/8 1/2 1/8 1/4 1/12 1/12 1/12 3/16 1/4 1/16) (-3/8 1/8) (1/4 -1/8 1/8 3/4 1/8 1/8) (1/2) (1/4 1/12 1/12 1/12 3/16 1/4 1/16 -3/8 1/8) (1/4) (-1/8 1/8 1/2 1/4 1/8 1/2 1/8) (1/4) (1/12 1/12 1/12 3/16 1/4 1/16 -3/8 1/8 1/4 -1/8 1/8) (3/4) (1/8 1/8 1/2 1/8 3/8) (1/2) (1/8 3/8) (1/8) (1/8 3/4 1/8 1/8 3/4) (1/4) (1/12 1/12 1/12 3/16 1/4 1/16 -3/8 1/8 1/4 -1/8 1/8) (3/4) (1/8 1/8 1/2 1/4 1/12 1/12 1/12) (3/16) (1/4 1/16 -3/8 1/8 1/4 -1/8 1/8 1/2) (1/4) (1/8 1/2 1/8 1/4 1/12 1/12 1/12 3/16 1/4 1/16) (-3/8 1/8) (1/4 -1/8 1/8 3/4 1/8 1/8) (1/2) (1/4 1/12 1/12 1/12 3/16 1/4 1/16 -3/8 1/8) (1/4) (-1/8 1/8 1/2 1/4 1/8 1/2 1/8) (1/4) (1/12 1/12 1/12 3/16 1/4 1/16 -3/8 1/8 1/4 -1/8 1/8) (3/4) (1/8 1/8 1/2 1/8 3/8) (1/2) (1/8 3/8) (1/8) (1/8 3/4 1/8 1/8 3/4) (1/4) (1/12 1/12 1/12 3/16 1/4 1/16 -3/8 1/8 1/4 -1/8 1/8) (3/4) (1/8 1/8 1/2 1/4 1/12 1/12 1/12) (3/16) (1/4 1/16 -3/8 1/8 1/4 -1/8 1/8 1/2) (1/4) (1/8 1/2 1/8 1/4 1/12 1/12 1/12 3/16 1/4 1/16) (-3/8 1/8) (1/4 -1/8 1/8 3/4 1/8 1/8) (1/2) (1/4 1/12 1/12 1/12 3/16 1/4 1/16 -3/8 1/8) (1/4) (-1/8 1/8 1/2 1/4 1/8 1/2 1/8) (1/4) (1/12 1/12 1/12 3/16 1/4 1/16 -3/8 1/8 1/4 -1/8 1/8) (3/4) (1/8 1/8 1/2 1/8 3/8) (1/2) (1/8 3/8))) (setf rv2 '((-1/4 -1/8 1/8) (1/2 -1/4 -1/8 1/8 1/2) (-1/8 1/8) (3/4 -1/2 -1/8 1/8 1/4) (1/12) (1/12 1/12 3/16 1/4 1/16 -1/8 1/8 1/2 -1/8 1/8 1/4) (1/2) (-1/2 -1/8 1/8 1/4 1/12 1/12 1/12 3/16 1/16) (1/4) (-1/8 1/8 1/2 -1/8 1/8 3/4) (-1/2 -1/8 1/8) (1/4 1/12 1/12 1/12 3/16 1/4 1/16 -1/8 1/8) (1/2) (-1/8 1/8 1/4 1/2) (-1/2 -1/8 1/8) (1/4 1/12 1/12 1/12 3/16 1/16 1/4 -1/8 1/8 1/2) (-1/8 1/8) (3/4 -1/2 -1/8 1/8 1/4) (1/12) (1/12 1/12 3/16 1/4 1/16 -1/8 1/8 1/2 -1/4 -1/8 1/8) (1/2) (-1/4 -1/8 1/8) (-1/4 -1/8 1/8) (1/2 -1/4 -1/8 1/8 1/2) (-1/8 1/8) (3/4 -1/2 -1/8 1/8 1/4) (1/12) (1/12 1/12 3/16 1/4 1/16 -1/8 1/8 1/2 -1/8 1/8 1/4) (1/2) (-1/2 -1/8 1/8 1/4 1/12 1/12 1/12 3/16 1/16) (1/4) (-1/8 1/8 1/2 -1/8 1/8 3/4) (-1/2 -1/8 1/8) (1/4 1/12 1/12 1/12 3/16 1/4 1/16 -1/8 1/8) (1/2) (-1/8 1/8 1/4 1/2) (-1/2 -1/8 1/8) (1/4 1/12 1/12 1/12 3/16 1/16 1/4 -1/8 1/8 1/2) (-1/8 1/8) (3/4 -1/2 -1/8 1/8 1/4) (1/12) (1/12 1/12 3/16 1/4 1/16 -1/8 1/8 1/2 -1/4 -1/8 1/8) (1/2) (-1/4 -1/8 1/8) (-1/4 -1/8 1/8) (1/2 -1/4 -1/8 1/8 1/2) (-1/8 1/8) (3/4 -1/2 -1/8 1/8 1/4) (1/12) (1/12 1/12 3/16 1/4 1/16 -1/8 1/8 1/2 -1/8 1/8 1/4) (1/2) (-1/2 -1/8 1/8 1/4 1/12 1/12 1/12 3/16 1/16) (1/4) (-1/8 1/8 1/2 -1/8 1/8 3/4) (-1/2 -1/8 1/8) (1/4 1/12 1/12 1/12 3/16 1/4 1/16 -1/8 1/8) (1/2) (-1/8 1/8 1/4 1/2) (-1/2 -1/8 1/8) (1/4 1/12 1/12 1/12 3/16 1/16 1/4 -1/8 1/8 1/2) (-1/8 1/8) (3/4 -1/2 -1/8 1/8 1/4) (1/12) (1/12 1/12 3/16 1/4 1/16 -1/8 1/8 1/2 -1/4 -1/8 1/8) (1/2) (-1/4 -1/8 1/8))) (setf rv3 '((-1/4 -1/8 1/8) (1/2 -1/4 -1/8 1/8 1/2) (-1/8 1/8) (3/4 -1/2 -1/8 1/8 1/4) (1/12) (1/12 1/12 3/16 1/4 1/16 -1/8 1/8 1/2 -1/8 1/8 1/4) (1/2) (-1/2 -1/8 1/8 1/4 1/12 1/12 1/12 3/16 1/16) (1/4) (-1/8 1/8 1/2 -1/8 1/8 3/4) (-1/2 -1/8 1/8) (1/4 1/12 1/12 1/12 3/16 1/4 1/16 -1/8 1/8) (1/2) (-1/8 1/8 1/4 1/2) (-1/2 -1/8 1/8) (1/4 1/12 1/12 1/12 3/16 1/16 1/4 -1/8 1/8 1/2) (-1/8 1/8) (3/4 -1/2 -1/8 1/8 1/4) (1/12) (1/12 1/12 3/16 1/4 1/16 -1/8 1/8 1/2 -1/4 -1/8 1/8) (1/2) (-1/4 -1/8 1/8) (-1/4 -1/8 1/8) (1/2 -1/4 -1/8 1/8 1/2) (-1/8 1/8) (3/4 -1/2 -1/8 1/8 1/4) (1/12) (1/12 1/12 3/16 1/4 1/16 -1/8 1/8 1/2 -1/8 1/8 1/4) (1/2) (-1/2 -1/8 1/8 1/4 1/12 1/12 1/12 3/16 1/16) (1/4) (-1/8 1/8 1/2 -1/8 1/8 3/4) (-1/2 -1/8 1/8) (1/4 1/12 1/12 1/12 3/16 1/4 1/16 -1/8 1/8) (1/2) (-1/8 1/8 1/4 1/2) (-1/2 -1/8 1/8) (1/4 1/12 1/12 1/12 3/16 1/16 1/4 -1/8 1/8 1/2) (-1/8 1/8) (3/4 -1/2 -1/8 1/8 1/4) (1/12) (1/12 1/12 3/16 1/4 1/16 -1/8 1/8 1/2 -1/4 -1/8 1/8) (1/2) (-1/4 -1/8 1/8) (-1/4 -1/8 1/8) (1/2 -1/4 -1/8 1/8 1/2) (-1/8 1/8) (3/4 -1/2 -1/8 1/8 1/4) (1/12) (1/12 1/12 3/16 1/4 1/16 -1/8 1/8 1/2 -1/8 1/8 1/4) (1/2) (-1/2 -1/8 1/8 1/4 1/12 1/12 1/12 3/16 1/16) (1/4) (-1/8 1/8 1/2 -1/8 1/8 3/4) (-1/2 -1/8 1/8) (1/4 1/12 1/12 1/12 3/16 1/4 1/16 -1/8 1/8) (1/2) (-1/8 1/8 1/4 1/2) (-1/2 -1/8 1/8) (1/4 1/12 1/12 1/12 3/16 1/16 1/4 -1/8 1/8 1/2) (-1/8 1/8) (3/4 -1/2 -1/8 1/8 1/4) (1/12) (1/12 1/12 3/16 1/4 1/16 -1/8 1/8 1/2 -1/4 -1/8 1/8) (1/2) (-1/4 -1/8 1/8))) (setf rv4 '((-1/4 -1/4 -1/8 1/8) (1/4 -1/4 -1/4 -1/8 1/8 1/4) (1/8) (7/8 1/4 1/12 1/12 1/12 3/16 1/16 1/8 1/8) (3/4) (-1/4 -1/8 1/8 1/4 1/8 3/8) (1/2) (1/4 1/12 1/12 1/12 3/16 1/16 1/8 1/2 1/8) (1/4) (-3/8 1/8 1/4 1/8 7/8) (1/4) (1/12 1/12 1/12 3/16 1/16 1/8 1/8 3/4) (-1/4 -1/8 1/8) (1/4 1/8 3/8 1/2 1/4 1/12 1/12 1/12) (3/16) (1/16 1/8 1/2 1/8 1/4 -3/8 1/8 1/4) (1/8) (7/8 1/4 1/12 1/12 1/12 3/16 1/16 1/8 1/8) (3/4) (-1/4 -1/8 1/8 1/4) (-1/4 -1/4 -1/8 1/8) (1/4) (-1/4 -1/4) (-1/4 -1/4 -1/8 1/8) (1/4 -1/4 -1/4 -1/8 1/8 1/4) (1/8) (7/8 1/4 1/12 1/12 1/12 3/16 1/16 1/8 1/8) (3/4) (-1/4 -1/8 1/8 1/4 1/8 3/8) (1/2) (1/4 1/12 1/12 1/12 3/16 1/16 1/8 1/2 1/8) (1/4) (-3/8 1/8 1/4 1/8 7/8) (1/4) (1/12 1/12 1/12 3/16 1/16 1/8 1/8 3/4) (-1/4 -1/8 1/8) (1/4 1/8 3/8 1/2 1/4 1/12 1/12 1/12) (3/16) (1/16 1/8 1/2 1/8 1/4 -3/8 1/8 1/4) (1/8) (7/8 1/4 1/12 1/12 1/12 3/16 1/16 1/8 1/8) (3/4) (-1/4 -1/8 1/8 1/4) (-1/4 -1/4 -1/8 1/8) (1/4) (-1/4 -1/4) (-1/4 -1/4 -1/8 1/8) (1/4 -1/4 -1/4 -1/8 1/8 1/4) (1/8) (7/8 1/4 1/12 1/12 1/12 3/16 1/16 1/8 1/8) (3/4) (-1/4 -1/8 1/8 1/4 1/8 3/8) (1/2) (1/4 1/12 1/12 1/12 3/16 1/16 1/8 1/2 1/8) (1/4) (-3/8 1/8 1/4 1/8 7/8) (1/4) (1/12 1/12 1/12 3/16 1/16 1/8 1/8 3/4) (-1/4 -1/8 1/8) (1/4 1/8 3/8 1/2 1/4 1/12 1/12 1/12) (3/16) (1/16 1/8 1/2 1/8 1/4 -3/8 1/8 1/4) (1/8) (7/8 1/4 1/12 1/12 1/12 3/16 1/16 1/8 1/8) (3/4) (-1/4 -1/8 1/8 1/4) (-1/4 -1/4 -1/8 1/8) (1/4) (-1/4 -1/4))) (setf v1pit '(f5 e5 f5 e5 f5 e5 f5 e5 f5 e5 f5 e5 f5 e5 f5 e5 f5 e5 f5 e5 f5 e5 f5 e5 f5 e5 f5 e5 f5)) (setf v2pit '(c4 d4 c4 d4 c4 d4 c4 d4 c4 d4 c4 d4 c4 d4 c4 d4 c4 d4 c4 d4 c4 d4 c4 d4 c4 d4 c4 d4 c4)) (setf v3pit '(bb3 gs3 bb3 gs3 bb3 gs3 bb3 gs3 bb3 gs3 bb3 gs3 bb3 gs3 bb3 gs3 bb3 gs3 bb3 gs3 bb3 gs3)) (setf v4pit '(bb2 eb2 bb2 eb2 bb2 eb2 bb2 eb2 bb2 eb2 bb2 eb2 bb2 eb2 bb2 eb2 bb2 eb2 bb2 eb2 bb2 eb2)) (setf len-map1 '((e (stacc)) (s (ord)) (h (long)) (h. (long)) (w (long)))) (setf len-map2 '((e (list (rnd-pick '(mf f)))) (s (mf)) (e. (mf)) (h (p<f)) (h. (p<f)) (w (P<f>p))(wq (P<f>p))(wh (P<f>p))(wh. (P<f>p))(ww (P<f>p)))) (setf v1mat-a (make-omn :length rv1 :pitch (span rv1 v1pit) ;to gen-divide = 1 use v1dtc, instead of v1dtb :span :length :velocity (length-map len-map2 rv1 :otherwise '(mf) :repeat t) :articulation (length-map len-map1 rv1 :otherwise '(ord) :repeat t))) (setf v2mat-a (make-omn :length rv2 :pitch (span rv2 v2pit) :span :length :velocity (length-map len-map2 rv2 :otherwise '(mf) :repeat t) :articulation (length-map len-map1 rv2 :otherwise '(ord) :repeat t))) (setf v3mat-a (make-omn :length rv3 :pitch (span rv3 v3pit) :span :length :velocity (length-map len-map2 rv3 :otherwise '(mf) :repeat t) :articulation (length-map len-map1 rv3 :otherwise '(ord) :repeat t))) (setf v4mat-a (make-omn :length rv4 :pitch (span rv4 v4pit) :span :length :velocity (length-map len-map2 rv4 :otherwise '(mf) :repeat t) :articulation (length-map len-map1 rv4 :otherwise '(ord) :repeat t))) (ps 'gm :sq (list (pitch-transpose 0 (ambitus 'violin v1mat-a )) (pitch-transpose 0 (ambitus 'violin v2mat-a)) (pitch-transpose 0 (ambitus 'viola v3mat-a)) (pitch-transpose 0 (ambitus 'cello v4mat-a)) ) :key-signature 'atonal :time-signature '(4 4) ;:tempo 90 :flexible-clef nil :title "Quartet BEFORE RE-PITCH - JULIO HERRLEIN" :display :window) )
My solution is to use one distribute-stream per voice.
In this way, I can just put exactly what I want in each voice.
;;; QUARTET AFTER REPITCH PROCESS USING One instance of Distribute-Stream for each voice (progn (setf repitch1 '(f5 e5 d5 c5 f5 e5 d5 c5 f5 e5 d5 c5 f5 e5 d5 c5 f5 e5)) (setf repitch2 '(c4 cs4 d4 eb4 e4 f4 fs4 g4 gs4 a4 bb4 c5 cs5 d5 eb5 e5)) (setf repitch3 '(c4 b3 bb3 a3 gs3 g3 fs3 f3 e3 eb3 d3 cs3 c3 b2 bb2 a2)) (setf repitch4 '(cs2 g2 cs2 g2 cs2 g2 cs2 g2 cs2 g2 cs2 g2 cs2 g2 cs2 g2)) (setf v1-new (distribute-stream repitch1 (list v1mat-a))) (setf v2-new (distribute-stream repitch2 (list v2mat-a))) (setf v3-new (distribute-stream repitch3 (list v3mat-a))) (setf v4-new (distribute-stream repitch4 (list v4mat-a))) (setf in1 (make-omn :length v1mat-a :pitch (1~ v1-new))) (setf in2 (make-omn :length v2mat-a :pitch (1~ v2-new))) (setf in3 (make-omn :length v3mat-a :pitch (1~ v3-new))) (setf in4 (make-omn :length v4mat-a :pitch (1~ v4-new))) (ps 'gm :sq (list (pitch-transpose 0 (ambitus 'violin in1)) (pitch-transpose 0 (ambitus 'violin in2)) (pitch-transpose 0 (ambitus 'viola in3)) (pitch-transpose 0 (ambitus 'cello in4)) ) :key-signature 'atonal :time-signature '(4 4) ;:tempo 90 :flexible-clef nil :title "Quartet RE-PITCH - JULIO HERRLEIN" :display :window) )
All the best !!
Julio
-
Stephane Boussuge reacted to opmo in Counterpoint Question - use of variable for harmony keyword
I will add a new dictum element :tonality.
And you will be able to use variables in the :methods, :harmony and :tonality dictum.
This will work:
(setf harmony2 '((a3b3e4gs4) (b3e4gs4a3) (e4gs4a3b3)(gs4a3b3e4))) ... ((1 2 3 4) :harmony harmony2 :tempo 72) ...
-
Stephane Boussuge got a reaction from JulioHerrlein in Replace Stream - Amazing Tool !!!!
I agree, an horizontal replacement possibility would be very useful.
Best !
SB.
-
Stephane Boussuge reacted to JulioHerrlein in Replace Stream - Amazing Tool !!!!
Dear Friends,
Please check this replace-stream function !!
This is what I was searching for and trying to achieve for a long time !!
It really worth to upgrade.
I have some questions regarding this new tool:
Here is the code, similar to the documentation.
First, we have the Bach Chorale.
Second, there are some original material that looks like this:
V1 plays only E and F pitch classes
V2 plays only C and D pitch classes
VLA plays only Bb and G# pitch classes
CELLO plays only Bb and Eb pitch classes
For easy understanding of the point
When I do the replace-stream, I.E., using the new pitch classes to the old Bach Chorale, I get this
My new notes are traversing the instruments vertically and not horizontally (voice by voice)
I´d like to keep the same pitch classes in each instrument, just with the new rhythms of the Bach Chorale, I.E., the VL1 plays only E and F, the VL2, only C and D, as I had in the original music.
It´s just like an inverted axis... (or maybe the distribution is related with the length...)
There is some solution ?
I hope so, because this sounds AMAZING !
It´s just what I need !
I was trying to do this with the counterpoint function (in the previous post, with the :harmony keyword, but getting some noise in between, because of the nature of embedded harmonic path inside the Counterpoint function.
Best !
Julio
;;;FORUM QUESTION ;;--------------------------------------------------------- ;; Bach, BWV 0004 (progn (setf soprano '((-h. q b4) (q as4 e b4 cs5 q d5 e5) (q d5 cs5 b4 fermata b4) (q g4 a4 b4 e a4 g4) (e fs4 e4 q fs4 e4 fermata b4) (q as4 e b4 cs5 q d5 e5) (q d5 cs5 b4 fermata b4) (q g4 a4 b4 e a4 g4) (e fs4 e4 q fs4 e4 fermata -q) (e e4 fs4 q g4 a4 e e4 fs4) (q g4 a4 b4 fermata b4) (q e5 ds5 e5 e fs5 e5) (q d5 cs5 b4 fermata cs5) (q d5 e b4 cs5 q d5 a4) (q g4 fs4 h e4 fermata) (q b4 a4 h g4) (h fs4 e4 fermata)) alto '((-h. q g4) (q fs4 fs4 fs4 fs4) (q fs4 e fs4 e4 q ds4 fermata fs4) (q e4 d4 e d4 ds4 q e4 tie) (q e4 ds4 b3 fermata g4) (q fs4 fs4 fs4 fs4) (q fs4 e fs4 e4 q ds4 fermata fs4) (q e4 d4 e d4 ds4 q e4 tie) (q e4 ds4 b3 fermata -q) (q b3 e4 q. e4 e ds4) (q e4 d4 d4 fermata e g4 a4) (q b4 a4 b4 fs4) (q fs4 e fs4 e4 q d4 fermata e4) (q fs4 d4 g4 fs4) (e fs4 e4 e4 ds4 h e4 fermata) (e d4 e4 q. fs4 e ds4 q e4 tie) (q e4 ds4 h b3 fermata)) tenor '((-h. e e4 d4) (q cs4 e d4 as3 q b3 cs4) (q b3 as3 fs3 fermata b3) (e b3 c4 b3 a3 g3 a3 q b3) (q c4 e fs3 a3 q g3 fermata e e4 d4) (q cs4 e d4 as3 q b3 cs4) (q b3 as3 fs3 fermata b3) (e b3 c4 b3 a3 g3 a3 q b3) (q c4 e fs3 a3 q g3 fermata -q) (e g3 a3 q b3 e a3 b3 q c4) (q b3 a3 g3 fermata d4) (q g4 fs4 e e4 d4 q cs4) (q b3 as3 fs3 fermata g3) (q a3 g3 g3 e d4 c4) (q b3 a3 h g3 fermata) (q g3 e fs3 b3 q b3 c4 tie) (q c4 e b3 a3 h gs3 fermata)) bass '((-h. q e3) (e fs3 e3 d3 cs3 q b2 as2) (q b2 fs2 b2 fermata ds3) (q e3 fs3 e g3 fs3 q e3) (e a2 s b2 c3 q b2 e2 fermata e3) (e fs3 e3 d3 cs3 q b2 as2) (q b2 fs2 b2 fermata ds3) (q e3 fs3 e g3 fs3 q e3) (e a2 s b2 c3 q b2 e2 fermata -q) (q. e3 e d3 c3 b2 q a2) (q e3 fs3 g3 e g3 fermata fs3) (q e3 fs3 gs3 as3) (q b3 fs3 b2 fermata e3) (q d3 g3 e b2 c3 q d3) (q e3 b2 h c3 fermata) (q g3 ds3 e3 c3) (q a2 b2 h e2 fermata))) (def-score bach-bwv-0004 ( :title "Bach, BWV-0004" :composer "J.S. Bach" :key-signature '(e min) :time-signature '(4 4) :tempo 88 :layout (choir-satb-layout 'soprano 'alto 'tenor 'bass) ) (soprano :omn soprano :channel 1 :sound 'gm :program 0) (alto :omn alto :channel 2) (tenor :omn tenor :channel 3) (bass :omn bass :channel 4) ) ) ;;; ORIGINAL MATERIAL (4 voices) ;; EACH VOICE USES DIFFERENT PITCH CLASSES FOR DEBUG ;;; this voice uses only pcs E and F (setf v1mat-a '((e f5 stacc) (e e5 stacc h. f5 p<f long e e5 mf stacc f5 stacc h. e5 p<f long) (q f5 mf ord) (3q e5 ord f5 ord e5 ord e. f5 ord q e5 ord s f5 ord -q. e e5 stacc q f5 ord -e e5 stacc))) ;;; this voice uses only pcs C and D (setf v2mat-a '((-q -e c4 f stacc) (h d4 p<f long -q -e c4 f stacc h d4 p<f long) (-e c4 f stacc) (h. d4 p<f long -h -e c4 f stacc q d4 mf ord) (3q c4 ord) (3q d4 ord c4 ord e. d4 ord q c4 ord s d4 ord -e c4 f stacc h d4 p<f long -e c4 f stacc q d4 mf ord))) ;;; this voice uses only pcs Bb and G# (setf v3mat-a '((-q -e bb3 stacc) (h gs3 p<f long -q -e bb3 mf stacc h gs3 p<f long) (-e bb3 mf stacc) (h. gs3 p<f long -h -e bb3 mf stacc q gs3 ord) (3q bb3 ord))) ;;; this voice uses only pcs Bb and Eb (setf v4mat-a '((-q - -e bb2 stacc) (q eb2 ord - - -e bb2 stacc q eb2 ord) (e bb2 stacc) (h.. eb2 ord q bb2 ord 3q eb2 ord bb2 ord eb2 ord e. bb2 ord s eb2 ord e bb2 stacc eb2 stacc))) ;;; PREVIEW ORIGINAL MATERIAL (ps 'gm :sq (list (pitch-transpose 0 (ambitus 'violin v1mat-a )) (pitch-transpose 0 (ambitus 'violin v2mat-a)) (pitch-transpose 0 (ambitus 'viola v3mat-a)) (pitch-transpose 0 (ambitus 'cello v4mat-a)) ) :key-signature 'atonal :time-signature '(4 4) ;:tempo 90 :flexible-clef nil :title "replace stream" :display :window) (setf original-pitches (list v1mat-a v2mat-a v3mat-a v4mat-a)) (setf stream (collect-stream :pitch original-pitches)) (setf bach (collect-score-instruments 'bach-bwv-0004)) (replace-stream stream bach :index 'v :articulation nil :rest-articulation nil) (ps 'gm :sq (list v1 v2 v3 v4) :time-signature '(3 4) :tempo tempo )
-
-
Stephane Boussuge got a reaction from JulioHerrlein in Counterpoint Question - use of variable for harmony keyword
The notes in patterns are not really rounded, they are the harmonic path itself, they are played sequentially in order from the notes given to :harmony parameter , so if you want to use closest path or any voices leading technique, you need to prepare your :harmony sequence of pitches right to be what you need.
This :harmony could be also useful for serial or pitch-class composers who want to play the pitches from some row/Pcs in order, kind of horizontal distribution of pitches for motivic design.
For vertical distribution across voices, I would probably prefer to use the distribute-seq function or a similar approach.
It is also possible to use tonality-map function after the counterpoint but it would be nice to be able to use it also directly into counterpoint dictum like the :harmony keyword,
something like :tonality keyword. Janusz ? 🙂
Best !
Stf
-
Stephane Boussuge got a reaction from JulioHerrlein in Counterpoint Question - use of variable for harmony keyword
Please, note that harmony in counterpoint is the application of the harmonic-path function, who allow you to keep voice leading in chords
as I showed several times in my lessons, and it is very different than tonality-map function.
Btw, if you use scale in :harmony parameter you will get scalar motive in counterpoint but if you use chords with well defined voices leading from chord to chord, the result could become much interesting in terms of harmonic control and voice leading control
SB.
-
Stephane Boussuge got a reaction from JulioHerrlein in Counterpoint Question - use of variable for harmony keyword
That's lisp 😉
-
Stephane Boussuge got a reaction from opmo in Counterpoint Question - use of variable for harmony keyword
Try this :
(progn ;; Global SEED (init-seed 15342) ;; Patterns (setf ;p1 '((-s c1 p g2 cs3) (3q fs3 - bb3) (-3q eb4 mf a4) (-s b4 d5 f5) ; (-5q gs5 e6 c1 mp g2) (-3q cs3 fs3 mf) (s bb3 - eb4 p a4) (s b4 mp d5 f5 -)) ;p2 '((5q bb2 mf g3 c4 e3 a3) (5q d4 mp fs4 gs4 b4 p cs5) (s f5 eb6 bb3 g3)) ;p3 '((5q fs4 p - bb3 f3 e4) (-3q g4 c5) (s eb5 a5 mf cs6 gs6) ; (5q gs6 pp cs6 mf a5 eb5 -) (-s c5 g4 e4)) ;p4 '((5q bb3 p a4 c6 cs6 cs6) (s g7 mp a6 c6 e5 - d4 cs4 g3 3h fs3 eb3 -) ; (-3q b6 pp a6 5q c6 - d5 bb4 b3 -s gs3 f1 eb3)) p5 '((5q c2 mf g2 e2 a2 b2) (5q fs5 p gs5 bb5 b5 cs5 mp) (s f5 eb6 c6 p g6)) p6 '(s a4 p e b5 s gs3 3h f3 3q e2 5h eb4 5q g5 fs2 f4) p7 '(5q cs5 mf d5 5h eb5 5q f5 fs5 gs5 5h a5 f 5q bb5 5h b5 5q cs6 5h) p8 '(t bb4 mp cs6 c5 b5 bb4 cs6 a3 gs2 3q a2 gs5 fs4) ) (setf p1 '(e d7 d7 d7 d7 d7 d7 d7 d7 s d6 d6 d6 d6 d6 d6 d6 d6 h)) (setf p2 '(e d5 d5 d5 d5 d5 d5 d5 d5 s d4 d4 d4 d4 d4 d4 d4 d4 h)) (setf p3 '(e d4 d4 d4 d4 d4 d4 d4 d4 s s s s s s s s h d3)) (setf p4 '(e d2 d2 d2 d2 d2 d2 d2 d2 s s s s s s s s h d1)) ;(pitch-transpose 2 p4) (setf patterns (list p1 p2 p3 p4 p5 p6 p7 p8)) (setf harmony2 '((a3b3e4gs4) (b3e4gs4a3) (e4gs4a3b3)(gs4a3b3e4))) (setf dictum-a `(((1 2 3 4) :harmony ,harmony2 :tempo 72) ((1 2 3 4) :harmony ((a3b3e4gs4) (b3e4gs4a3) (e4gs4a3b3)(gs4a3b3e4)) :tempo 72) ((2 1 3 4) :harmony ((a3b3e4gs4) (b3e4gs4a3) (e4gs4a3b3)(gs4a3b3e4)):methods (- ri - -) :tempo 72) ((3 2 1 4) :harmony ((a3b3e4gs4) (b3e4gs4a3) (e4gs4a3b3)(gs4a3b3e4)):methods (a d2 r -) :tempo 72) ((4 3 2 1) :harmony ((a3b3e4gs4) (b3e4gs4a3) (e4gs4a3b3)(gs4a3b3e4)) :tempo 72) ((4 2 1 4):harmony a3b3e4gs4) ((2 3 1 4):harmony a3b3e4gs4) ((3 2 1 4):harmony a3b3e4gs4) ((- - - -) :span 1/4 :harmony a3b3e4gs4)) dictum-b '(((- 5 2 -) :span 3/4 :methods (- ri - -) :tempo 64) ((- 2 2 6) :span 3/4 :methods (- d d3 -) :tempo (:rit 80 56 1/64)) ((4 6 6 8) :span 2/4 :methods (a d2 r -) :tempo 88) ((- - - -) :span 1/4)) dictum-c '(((7 4 - 5) :methods (a d i ?) :extend (s - s -) :tempo 64) ((1 2 2 3) :methods (a d i -) :extend (s - s -))) dictum-d '(((- 3 - -) :methods (- - - -) :tempo 80) ((- 2 - -) :methods (- - - -)) ((- 4 - -) :methods (< - - -)) ;((1 1 1 1) :methods (da ad (r d5) (i d2)) :polyphony (7 o) :tempo 72) ) ) ;; Sections (setf sec-a (counterpoint patterns dictum-a :global-methods '((dyn fl) - - -))) (setf sec-b (counterpoint patterns dictum-b :global-methods '((dyn fl) (dyn cl) (t-12 dyn hn) (t-12 dyn vc)) :global-polyphony '((10 p) (1 13)) :iterate t)) (setf sec-c (counterpoint patterns dictum-c :global-methods '((dyn fl) (dyn cl) (t-12 dyn hn) (t-12 dyn vc)) :global-polyphony '((7 p) (1 13)) :iterate t)) (setf sec-d (counterpoint patterns dictum-d :global-methods '((dyn fl) (dyn cl) (dyn hn) (dyn vc)))) ;; Assemble Voices (assemble-voices 'voice sec-a sec-b sec-c sec-d) (ps 'gm :sq ;(list (pitch-transpose 12 vh1-2) vh2-2 vh3-2 vh4-2) (list (pitch-transpose 0 voice1) (pitch-transpose 0 voice2) (pitch-transpose 0 voice3) (pitch-transpose 0 voice4) #| (pitch-transpose 0 (ambitus 'violin voice1)) (pitch-transpose 0 (ambitus 'violin voice2)) (pitch-transpose 0 (ambitus 'viola voice3)) (pitch-transpose -12 (ambitus 'cello voice4)) |# ) :key-signature 'atonal ;;;obs:it´s possible to bypass the time signature we did before opening the time signature here ;;time-signature timesig-proc are processed lists of time-signatures ;:time-signature timesig ;:tempo 90 :flexible-clef nil :title ;:flexible-clef nil "Quartet Harmony Control - JULIO HERRLEIN" :display :window) ;; Global SEED back to NIL (init-seed nil) ) SB
The trick is here with backquote:
`(((1 2 3 4) :harmony ,harmony2 :tempo 72)