Jump to content

AM

Members
  • Posts

    793
  • Joined

  • Last visited

Reputation Activity

  1. Like
    AM got a reaction from torstenanders in ALL Interval 12-tone Rows and 12-tone control   
    ... a keyword/text search within the feature descriptions would be very useful.... so if i search "all-interval" i could find AIR etc....
  2. Like
    AM reacted to torstenanders in Re-auditioning selected shown scores/snippets   
    It is handy that Opusmodus can display multiple score snippets and full scores alongside each other.
     
    Is there perhaps also a way to re-play some snippet still shown? Either with some GUI element that I may have missed or programmatically (they all have a unique name shown, like "UNTITLED 101 (Snippet)").? There is a function audition-musicxml-last-score, is there perhaps a function to again audition a score that is specified by its name? 
     
    Thanks! 
     
    Best,
    Torsten
  3. Like
    AM got a reaction from JulioHerrlein in copy-omn-seq   
    could be an interesting idea for OPMO? (or already existing?)
    greetings
    andré
     
    ;;; a function (a sketch - i needed it for my momentary work) which filters ;;; an OMN-sequence in a specific bar, from a specific beat, with a specific ;;; span. (in such a basic version all in quarters (bars/...)) (defun copy-omn-seq (omnseq bar/beat-list &key (measure '(4/4)) (span nil)) (loop for i in bar/beat-list collect (loop repeat (if (null span) (- (/ (car measure) 1/4) (1- (cadr i))) span) for x = (1- (cadr i)) then (incf x) append (nth x (omn-to-measure (nth (1- (car i)) (omn-to-measure omnseq measure)) '(1/4)))))) (setf mat '((e c4 cs4 d4 ds4 e4 f4 fs4 g4) (e c3 cs3 d3 ds3 e3 f3 fs3 g3) (e c6 cs6 d6 ds6 e6 f6 fs6 g6))) (copy-omn-seq mat '((2 3))) ;; bar 2 from beat 3 until end of bar => ((e e3 f3 e fs3 g3)) (copy-omn-seq mat '((1 1)) :span 2) ;; bar 1 from beat 1 for 2 quarters => ((e c4 cs4 e d4 ds4)) (copy-omn-seq mat '((1 2) (2 3) (3 4))) ;; same thing with more then ONE filterings => ((e d4 ds4 e e4 f4 e fs4 g4) (e e3 f3 e fs3 g3) (e fs6 g6)) (copy-omn-seq mat '((1 2) (2 3) (3 4)) :span 1) ;; same - every filtering with span 1 => ((e d4 ds4) (e e3 f3) (e fs6 g6))  
  4. Thanks
    AM got a reaction from loopyc in change-time-structures   
    ;;; CHANGE-TIME-STRUCTURES ;;; works okay, but not exactly precise because of rhy-to-integer, which is not very easy in some cases ;;; this function changes basic-rhy-structures (if it's all the time perhaps in x/32) ;;; to other/changing sections. the lengths/rests will be rounded like in LENGTH-RATIONAL-QUANTIZE ;;; rhy+span => '((32 2) (44 7)) => means in 32 three values, in 44 seven values (defun change-time-structure (omnseq rhy+span &key (basic-rhy 32) (round 1/4)) (let* ((intseq (loop for i in (omn :length (flatten omnseq)) collect (* i basic-rhy))) (rhyseq (mapcar #'car rhy+span)) (spanseq (mapcar #'cadr rhy+span)) (divided-intseq (gen-divide spanseq intseq))) (length-rational-quantize (flatten (gen-length divided-intseq rhyseq)) :round round))) (change-time-structure '(2/44 -2/44 3/44 5/44 6/44) '((32 2) (20 2) (28 3)) :basic-rhy 44) => (1/16 -1/16 -1/8 3/20 1/4 -1/10 3/14 -1/28) (change-time-structure '(2/32 -2/32 3/32 5/32 6/32) '((20 2) (44 2) (28 3)) :basic-rhy 32) => (1/10 -1/10 -1/20 3/44 5/44 -3/44 3/14 -1/28)  
    could be done better -> go for it 🙂
    greetings
    andré
  5. Like
    AM got a reaction from Stephane Boussuge in omn-sieve-filter   
    (defun memberp (n liste) (not (equal 'nil (member n liste)))) ;;; MAIN (defun omn-sieve-filter (omn-list filter-list) (flatten (loop for i in (single-events omn-list) for j from 1 to (length omn-list) when (memberp j filter-list) collect i else collect (length-invert (car i))))) (omn-sieve-filter (make-omn :pitch (rnd-sample 10 '(c4 d4 e4 fs4 gs4) :seed 89) :length '(e) :span :pitch) '(1 2 3 5 8 9 10)) => (e c4 mf e gs4 mf e fs4 mf -1/8 e e4 mf -1/8 -1/8 e c4 mf e gs4 mf e fs4 mf)  
  6. Thanks
    AM got a reaction from JulioHerrlein in Help needed Binary Length values   
    something like that?
     
    (defun length-to-binary (lengthlist n) (let ((newlist (loop for i in (omn :length lengthlist) collect (/ i n)))) (loop for x in newlist when (> x 0) append (append (list 1) (gen-repeat (1- x) '0)) else append (gen-repeat (abs x) '0)))) (length-to-binary '(-q q e) 1/16) => (0 0 0 0 1 0 0 0 1 0) (length-to-binary '(-q s s q e) 1/16) => (0 0 0 0 1 1 1 0 0 0 1 0)  
  7. Thanks
    AM reacted to JulioHerrlein in FORTE NUMBERS as Rhythms   
    Dear Friends
     
    In my Doctoral Dissertation, I converted every FORTE number in a modulo 12 Rhythm via time-point-system.
    There is a complete catalog included (see the link below). It's in portuguese.
     
    After Janusz adjusted the Forte numbers to have the inversion, using "a" and "b" to differentiate the
     prime forms from the inversions, it was easy to convert using codes like this:
    (setf ch0 (time-point-system (pcs '5-11b :pitch)'s :start 0)) (setf ch1 (time-point-system (pcs '6-33 :pitch)'s :start 1)) (setf ch2 (time-point-system (pcs '7-11b :pitch)'s :start 2)) (setf ch3 (time-point-system (pcs '3-11b :pitch)'s :start 3)) (setf ch4 (time-point-system (pcs '3-11b :pitch)'s :start 0))  
    The dissertation (in portuguese) can be downloaded HERE:
    Das alturas ao ritmo : teoria dos conjuntos rítmicos como ferramenta composicional
    From pitches to rhythm: rhythmic set theory as a compositional tool.
    http://hdl.handle.net/10183/179457
    Abstract
    This doctoral dissertation is divided into two parts: the first deals a rhythmic set theory, and the second contains the portfolio of compositions developed during this period of studies. This dissertation presents a system of rhythmic organization parallel to the musical set theory pitch class organization FORTE (1973), as well as an adaptation of the time-point-system (BABBITT, 1962). From the standpoint of the traditional set theory, and also from the diatonic set theory, this unified approach allows to estabilish a connecting tissue of basic aspects: from the harmony and chords symbols to the rhythmic organization. At one time, in a complete catalog, the families of pitch class sets and chord symbols are related to their respective rhythmic counterparts. The musical motivation for this research came from my interest in the swinging and groovy repetitive rhythms called timelines (TOUSSAINT, 2013), commonly used in popular music. These dancing timelines have properties similar to those of the diatonic sets, and for this reason, this dissertation presents some properties of the diatonic pitch class sets, drawing a parallel with their rhythmic counterparts. These relationships also appear in the portfolio of compositions, characterizing some procedures used. The portfolio of compositions, which includes a composition for symphony orchestra, is presented form the standpoint of a duality between transparency and opacity. This duality address the essential differences in the audibility of the results from various composition techniques. This study of Rhythmic Set Theory will serve as an analytical approach of my compositional output in popular music, with a systematic way to understant and to extrapolate some aspects already used in my practice as composer and improviser.     Here is an analysis of a Wayne Krantz improvisation, using the rhythmic set theory system.   Hope you enjoy !!   Best, Julio  
  8. Thanks
    AM reacted to JulioHerrlein in Turing Piano (Julio Herrlein)   
    Dear Friends,
     
    I'd like to share a composition all made in Opusmodus.
    The composition is part of the Portfolio of my Doctoral Dissertation.
    I'd like to thank you so much, Opusmodus and the support of you
     here in this forum was amazing !!
    Love you all !!
     
    TURING PIANO (Julio Herrlein)
     
     
    Here is the commented code for the First Section:
     

    ;;;PART A
    ;PITCHES – The pitch structure are based on "chevron-like" patterns. This can be related to some
     Xenakis ideas: the arborescences, the music as a plot idea.
     
    (setf patpit (integer-to-pitch (gen-integer-step 0 68 '(1 -2 3 -4 5 -6 7 -8 9 -10 11)))) (setf patpit2 (integer-to-pitch (gen-integer-step 0 68 '(11 -10 9 -8 7 -6 5 -4 3 -2 1))))  
    ;;; This interval pattern leads to an infinite ascending movement, like the picture below:
     

    ;;; After that, I decided to restrict the ambitus of the pattern, otherwise it goes ascending forever. I did the restriction
     thinking  in the hands of the pianist, in a way to not collide or crossing the hands.
     


    ;;;After the ambitus restriction, the next step was find some partitions to make some chords for the piece, so
    each hand have a diferent partition of the chevron-like pattern, like below

     
    (setf pitpartition (ambitus '(g3 c6)(chordize-list (gen-divide '(1 1 1 3 1 1 1 2) patpit)))) (setf pitpartition2 (ambitus '(g1 g3)(chordize-list (gen-divide '(2 1 1 1 1 2 1 1 1 1 1 1 1 1) patpit2))))
    ;;; Next, i decided on the Rhythms to use. The rhythms are complementary, i.e., each hand plays on the
    silence of the other, using the following pattern:
     

     
    DIGRESSION: The FORTE NUMBERS are part of my dissertation that makes the conversion of the entire
     Forte sets onto Rhythms modulo 12.
    The dissertation (in portuguese) can be downloaded HERE:
    Das alturas ao ritmo : teoria dos conjuntos rítmicos como ferramenta composicional
    From pitches to rhythm: rhythmic set theory as a compositional tool.
    http://hdl.handle.net/10183/179457
    Abstract
    This doctoral dissertation is divided into two parts: the first deals a rhythmic set theory, and the second contains the portfolio of compositions developed during this period of studies. This dissertation presents a system of rhythmic organization parallel to the musical set theory pitch class organization FORTE (1973), as well as an adaptation of the time-point-system (BABBITT, 1962). From the standpoint of the traditional set theory, and also from the diatonic set theory, this unified approach allows to estabilish a connecting tissue of basic aspects: from the harmony and chords symbols to the rhythmic organization. At one time, in a complete catalog, the families of pitch class sets and chord symbols are related to their respective rhythmic counterparts. The musical motivation for this research came from my interest in the swinging and groovy repetitive rhythms called timelines (TOUSSAINT, 2013), commonly used in popular music. These dancing timelines have properties similar to those of the diatonic sets, and for this reason, this dissertation presents some properties of the diatonic pitch class sets, drawing a parallel with their rhythmic counterparts. These relationships also appear in the portfolio of compositions, characterizing some procedures used. The portfolio of compositions, which includes a composition for symphony orchestra, is presented form the standpoint of a duality between transparency and opacity. This duality address the essential differences in the audibility of the results from various composition techniques. This study of Rhythmic Set Theory will serve as an analytical approach of my compositional output in popular music, with a systematic way to understant and to extrapolate some aspects already used in my practice as composer and improviser.  
    Here is the rhythm used in Turing Piano (with Forte numbers and rotations)
     
     
     
    (setf ritmo1 (gen-repeat 10 '(s s -s s s -s -s -s s -s -s s -s s -s -s s -s s -s -s -s s -s))) (setf ritmo1b (length-invert ritmo1 :omn t))
    ; DINAMICS: Following the parametric stuff, I decided to set the dynamics, according to the harmonic density, i.e.
    the more notes, the more louder.
     

     
    (setf din1 (span pitpartition '(p p p ff p mf pp ff))) (setf din2 (span pitpartition2 '(f p p p p ff p p ff pp pp f mf mf)))
    ;ASSEMBLING of the materials

     
    (setf lhmat1 (make-omn :length ritmo1 :pitch (pitch-transpose 4 pitpartition) :velocity din1)) (setf rhmat1 (make-omn :length ritmo1b :pitch (pitch-transpose 4 pitpartition2) :velocity din2)) ;MONTAGE of music blocks (assemblage)
     
    (setf pianoassemblerh (assemble-seq lhmat1)) (setf pianoassemblelh (assemble-seq rhmat1))
    ;;;SCORE- Layout

     
    (def-score Miniatura-pno1 (:key-signature 'atonal :time-signature '(3 4) :tempo 85 :octave-shift '(c2 c6) :layout (grand-layout 'pno :all-accidentals 'all)) (pno :omn (merge-voices lhmat1 rhmat1) :channel 1 :sound 'gm :program 0) )  
    COMPLETE VIDEO
     
     
     
     
  9. Like
    AM got a reaction from JulioHerrlein in Beginner: Slonimsky 648 as a function   
    in lisp -> create OMN with (midi-to-pitch)... 
     
    (setq half-row (loop repeat 13
                     with interval
                     with stack = 60
                     with cnt = 0
                     when (oddp cnt) do (setq interval 13)  
                     when (evenp cnt) do (setq interval -11) 
                     when (= cnt 0) collect stack
                     else collect (setq stack (+ stack interval))
                     do (incf cnt)))
     
    (midi-to-pitch (append half-row (reverse (butlast half-row))))
  10. Thanks
    AM got a reaction from loopyc in filter-omn-by-intervals   
    a sieve/filter-function - filters specific INTERVALS and replacing the others by rests.
    (don't work perfect, but as a sketch....)
     
     
    ;;; (defun equal/or (n alist) (car (loop for i in alist when (equal i n) collect 't))) ;;; FUNCTION (defun filter-omn-by-intervals (omn-seq intervals) (setf omn-seq (loop with omn-events = (single-events omn-seq) with i = 0 while (not (null (nth i omn-events))) when (equal/or (car (pitch-to-interval (append (omn :pitch (nth i omn-events)) (omn :pitch (nth (1+ i) omn-events))))) intervals) collect (list (nth i omn-events) (nth (1+ i) omn-events)) and do (incf i 2) else collect (neg! (car (omn :length (nth i omn-events)))) and do (incf i)))) ;;; EXAMPLE (setf basic-omn-seq (make-omn :pitch (vector-to-pitch '(c4 c6) (gen-white-noise 100 :type :logistic)) :length '(t) :span :pitch)) ;;; check out all these filter-tests (setf omn-seq (filter-omn-by-intervals basic-omn-seq '(1 2 3))) ;(setf omn-seq (filter-omn-by-intervals basic-omn-seq '(3 -3))) ;(setf omn-seq (filter-omn-by-intervals basic-omn-seq '(1 -1 5 -5 7 -7))) (def-score example (:title "example" :key-signature 'atonal :time-signature '(4 4) :tempo 90) (instrument1 :omn (flatten omn-seq) :channel 1 :sound 'gm-piano) (instrument2 :omn (flatten basic-omn-seq) :velocity 20 :channel 3 :sound 'gm-piano))  
     
    here is a more complex example
     
    (defvar library) (defvar abfolge) (defvar omn-seq) (defvar rhy) (defvar field) ;;;library + rhy -------------------------------------------------------------------------------- (setf rhy 44) ;;; LIBRARY MIRT RHY-PAAREN! (setf library (list '(eb5 5 p mute) '(e4 5 mf mute) '(gs4 3 f mute) '(g5 3 ppp mute) '(f6 2 p mute) '(cs4 1 f mute) '(d5 1 fff mute) '(b3 4 pppp mute) '(bb5 4 mp mute) '(a4 3 pp mute) '(fs3 (2 7) ppp mute) '(c6 (1 11) mp mute))) (setf library (loop for i in library collect (append (list (car i)) (if (listp (cadr i)) (gen-length (list (rnd-pick (cadr i))) rhy) (gen-length (list (cadr i)) rhy)) (filter-last 2 i)))) ;;; gen seq from library/abfolge--------------------------------------------------------------- (setf field '(eb5 e4 gs4 g5 f6 cs4 d5 b3 bb5 a4 fs3 c6)) (setf abfolge (pick-norepeat 500 field)) (setf omn-seq (loop for x in abfolge with y do (setf y (assoc x library)) append (append (reverse (filter-first 2 y)) (filter-last 2 y)))) (setf basic-omn-seq omn-seq) (setf omn-seq (filter-omn-by-intervals basic-omn-seq '(1 -1 11 -11 13 -13 4 -4 8 -8 16 -16 20 -20 28 -28 32 -32 7 -7 19 -19))) ;;;--------------------------------------------------------------------------------------------- (def-score example2 (:title "example2" :key-signature 'atonal :time-signature '(4 4) :tempo 90) (instrument :omn (flatten omn-seq) :channel 1 :sound 'gm-piano) (hidden-structure :omn (flatten basic-omn-seq) :channel 1 :velocity 0 :sound 'gm-piano)) ;;;--------------------------------------------------------------------------------------------- (omn-list-plot (flatten omn-seq) :join-points t)  
  11. Thanks
    AM got a reaction from loopyc in rest-diminution/augmentation   
    i needed functions which shorten/enlarge only the RESTS of my complex/tupled-mixed texture - not precisely - so i coded it with diminution/augmentation+round (otherwise i would be in trouble by the crazy rests)...
    violà... use it or code it smarter for OMPO! greetings andré
     
    3 functions:
    rest-diminution
    rest-augmentation
    only-length-augmentation
     
     
    ;;; (defun rest-diminution (omnlist &key (factor 1) (round 1/4)) (length-rest-merge (flatten (loop for i in (single-events (length-rest-merge omnlist)) when (< (car (omn :length i)) 0) collect (length-rational-quantize (length-diminution factor i) :round round) else collect i)))) (rest-diminution '(-3q q e4 mp -w e e4 ff) :factor 3 :round 1/4) => (-q e4 mp -h e e4 ff) (rest-diminution '(-3q q e4 mp -w e e4 ff) :factor 3 :round 1/8) => (-e q e4 mp -q. e e4 ff) ;;; (defun rest-augmentation (omnlist &key (factor 1) (round 1/4)) (length-rest-merge (flatten (loop for i in (single-events (length-rest-merge omnlist)) when (< (car (omn :length i)) 0) collect (length-rational-quantize (length-augmentation factor i) :round round) else collect i)))) (rest-augmentation '(-3q q e4 mp -w e e4 ff) :factor 3 :round 1/4) => (-q e4 mp -d. e e4 ff) (rest-augmentation '(-3q q e4 mp -w e e4 ff) :factor 3 :round 1/8) => (-q e4 mp -d. e e4 ff) ;;; (defun only-length-augmentation (omnlist &key (factor 1) (round 1/4)) (length-rest-merge (flatten (loop for i in (single-events (length-rest-merge omnlist)) when (> (car (omn :length i)) 0) collect (length-rational-quantize (length-augmentation factor i) :round round) else collect i)))) (only-length-augmentation '(-3q q e4 mp -w e e4 ff) :factor 3 :round 1/8) => (-3q h. e4 mp -w q. e4 ff) (only-length-augmentation '(-3q q e4 mp -w e e4 ff) :factor 3 :round 1/4) => (-3q h. e4 mp -w q. e4 ff -e)  
     
     
  12. Like
    AM reacted to opmo in filter-events-by-length   
    I like that. Will do shortly.
  13. Like
    AM got a reaction from opmo in filter-events-by-length   
    @janusz: you could expand it with conditionals like >, <, =, span .... and implement it....
    and... if you would write this function with conditionals for pitches (sequences of pitches) you could filter by vector-envelope...
  14. Like
    AM got a reaction from opmo in filter-events-by-length   
    you can filter all events by length (>= min).
    all other events will be replaced by rests...
     
    (defun filter-events-by-length (omnlist &key min) (let ((omnlist (single-events omnlist)) (min (car (omn :length (list min))))) (flatten (length-rest-merge (loop for i in omnlist when (>= (car (omn :length i)) min) collect i else collect (neg! (car (omn :length i)))))))) (filter-events-by-length '(e c4 d4 e4 e5 q c4 d4 e4 h c4 d4 e4) :min 'e) => (e c4 mf e d4 mf e e4 mf e e5 mf q c4 mf q d4 mf q e4 mf h c4 mf h d4 mf h e4 mf) (filter-events-by-length '(e c4 d4 e4 e5 q c4 d4 e4 h c4 d4 e4) :min 'q) => (-h q c4 mf q d4 mf q e4 mf h c4 mf h d4 mf h e4 mf) (filter-events-by-length '(e c4 d4 e4 e5 q c4 d4 e4 h c4 d4 e4) :min 'h) => (-wq h c4 mf h d4 mf h e4 mf)  
     
  15. Like
    AM reacted to opmo in binary-filter   
    Predefined functions can't be changed otherwise you would break the system.
    The binary-invert is sub function of binary-variant.
    (binary-variant '(0 1 1 0 1 0 1 1) 'i) => (1 0 0 1 0 1 0 0)  
  16. Like
    AM reacted to opmo in binary-filter   
    (defun binary-filter (alist bin-list &key (omn t)) (let ((event-list (cond ((omn-formp alist) (single-events alist)) (t alist)))) (flatten (loop for i in event-list for j in bin-list when (= j 1) collect i else append (maybe-omn-decode omn (cond ((omn-formp i) (list (length-invert (car i)))) ((lengthp i) (neg! (omn :length (list i)))))))))) (binary-filter '(q c4 mf d4 e4 e f4 ppp g4 a4 b4) '(1 0 1 1 0 1 1)) => (q c4 mf -q q e4 mf e f4 ppp -e e a4 ppp e b4 ppp)  
    Only one type of parameters can be decoded at a time.
  17. Like
    AM reacted to o_e in binary-filter   
    Hi André
    Just investigating your function..
    Then I've tried a little cosmetic hack to make it more readable, but it did not work out and I don't understand why. What did I overlook?
    Thanks!
     
    ole
    ;;; the orginal function (defun binary-filter (alist bin-list) (let ((event-list (cond ((omn-formp alist) (single-events alist)) (t alist)))) (flatten (loop for i in event-list for j in bin-list when (= j 1) collect i else append (cond ((omn-formp i) (list (length-invert (car i)))) ((lengthp i) (neg! (omn :length (list i))))))))) (binary-filter '(q c4 mf d4 e4 e f4 ppp g4 a4 b4) '(1 0 1 1 0 1 1)) => (q c4 mf -1/4 q e4 mf e f4 ppp -1/8 e a4 ppp e b4 ppp) ;;;Why is it not working?? (defun foo-rep (n sequence &key omn) (maybe-omn-decode omn (binary-filter n sequence))) (foo-rep '(q c4 mf d4 e4 e f4 ppp g4 a4 b4) '(1 0 1 1 0 1 1) :omn t) -->(q c4 mf -1/4 q e4 mf e f4 ppp -1/8 e a4 ppp e b4 ppp);??  
  18. Thanks
    AM got a reaction from loopyc in omn-sieve-filter   
    (defun memberp (n liste) (not (equal 'nil (member n liste)))) ;;; MAIN (defun omn-sieve-filter (omn-list filter-list) (flatten (loop for i in (single-events omn-list) for j from 1 to (length omn-list) when (memberp j filter-list) collect i else collect (length-invert (car i))))) (omn-sieve-filter (make-omn :pitch (rnd-sample 10 '(c4 d4 e4 fs4 gs4) :seed 89) :length '(e) :span :pitch) '(1 2 3 5 8 9 10)) => (e c4 mf e gs4 mf e fs4 mf -1/8 e e4 mf -1/8 -1/8 e c4 mf e gs4 mf e fs4 mf)  
  19. Thanks
    AM got a reaction from loopyc in binary-filter   
    something i've coded...
     
    (defun binary-filter (alist bin-list) (let ((event-list (cond ((omn-formp alist) (single-events alist)) (t alist)))) (flatten (loop for i in event-list for j in bin-list when (= j 1) collect i else append (cond ((omn-formp i) (list (length-invert (car i)))) ((lengthp i) (neg! (omn :length (list i))))))))) (binary-filter '(q -q -q q) '(0 1 0 1)) => (-1/4 -q -1/4 q) (binary-filter '(q q q q -q) '(0 1 0 1 1)) => (-1/4 q -1/4 q -q) (binary-filter '(c4 d4 e4 f4) '(1 1 0 1)) => (c4 d4 f4) (binary-filter '(q c4 mf d4 e4 e f4 ppp g4 a4 b4) '(1 0 1 1 0 1 1)) => (q c4 mf -1/4 q e4 mf e f4 ppp -1/8 e a4 ppp e b4 ppp)  
  20. Thanks
    AM got a reaction from loopyc in neg-sieve   
    ...how ti filter all "unused/complementary" pitches inside a sieve (if you like to extend the function... could be interesting if it works also with chords)
     
    (defun neg-sieve (pitchlist) (let ((pitchlist (pitch-to-midi pitchlist))) (midi-to-pitch (loop for i from (car pitchlist) to (car (last pitchlist)) when (null (member i pitchlist)) collect i)))) (setf sieve '(fs3 g3 as3 b3 c4 cs4 ds4 e4 f4 gs4 a4 d5 eb5 fs5 g5 gs5 bb5 b5 c6 cs6 e6 f6)) (neg-sieve sieve) => (gs3 a3 d4 fs4 g4 bb4 b4 c5 cs5 e5 f5 a5 d6 eb6) (neg-sieve '(c4 d4 e4 fs4 gs4 as4 c5)) => (cs4 eb4 f4 g4 a4 b4)  
     
     
  21. Thanks
    AM got a reaction from JulioHerrlein in neg-sieve   
    ...how ti filter all "unused/complementary" pitches inside a sieve (if you like to extend the function... could be interesting if it works also with chords)
     
    (defun neg-sieve (pitchlist) (let ((pitchlist (pitch-to-midi pitchlist))) (midi-to-pitch (loop for i from (car pitchlist) to (car (last pitchlist)) when (null (member i pitchlist)) collect i)))) (setf sieve '(fs3 g3 as3 b3 c4 cs4 ds4 e4 f4 gs4 a4 d5 eb5 fs5 g5 gs5 bb5 b5 c6 cs6 e6 f6)) (neg-sieve sieve) => (gs3 a3 d4 fs4 g4 bb4 b4 c5 cs5 e5 f5 a5 d6 eb6) (neg-sieve '(c4 d4 e4 fs4 gs4 as4 c5)) => (cs4 eb4 f4 g4 a4 b4)  
     
     
  22. Like
    AM reacted to opmo in filter-repeat for pairs?   
    With the next release.
     
    I wonder if the result should remove the repeats of single notes:
     
    (filter-repeat 1 '(a4 gs4 a4 gs4 a4 fs4 gs4 g5 bb5 g5 g5 g5 gs4 a4 gs4) :seq 2) => (a4 gs4 a4 fs4 gs4 g5 bb5 g5 gs4 a4 gs4)
  23. Like
    AM reacted to Stephane Boussuge in Orchestral Template EastWest HW Orch and Plogue Bidule   
    Hello,
     
    here's one of my personal orchestral template.
     
    It use plogue Bidule as host (because some special KeySwitch configuration) and EastWest Hollywood orchestra and East west Convolution reverb (but you can replace it by another one).
     
    You can use this template and associated files (soundset etc..) as this or use it as a base for designing you own and take inspiration from it.
     
    Attached you will find and audio example of the raw output of the template, the template itself (.opmo), the Bidule file and the soundset necessary to drive this template.
     
    Put the BaseOrch4.bidule file into the Instrument/Templates folder from Opmo folder. (create the Template folder if not exist)
    Put the soundset file BaseOrchestra4.lisp into the Def-soundset folder from opmo folder.
     
    Have fun !!
     
    SB.
     
    TemplateOutExample.mp3
    ForumHWBiduleBaseOrchestra.opmo
    BaseOrch4.bidule
    BaseOrchestra4.lisp
  24. Like
    AM got a reaction from loopyc in vector-range-drift   
    INPUT-curves could be like that: (in that way you could imitate some early "xenakis-curves" when you map it to pitches :-))
     
    (setf curve1 '(-5.1 -2.3 -1.1 -0.8 -0.3 -2.5)) (setf curve2 '(1.0 1.2 1.5 2.1 4.6 10.6))  
    (vector-range-drift curve1 curve2 (gen-white-noise 250))  
    as result:
     

     
     
     
    "imitated" by my old/simple function:
     
    (list-plot (append (vector-range-drift '(-5.1 1) '(-2.3 1.2) (gen-white-noise 50)) (vector-range-drift '(-2.3 1.2) '(-1.1 1.5) (gen-white-noise 50)) (vector-range-drift '(-1.1 1.5) '(-0.8 2.1) (gen-white-noise 50)) (vector-range-drift '(-0.8 2.1) '(-0.3 4.6) (gen-white-noise 50)) (vector-range-drift '(-0.3 4.6) '(-2.5 10.6) (gen-white-noise 50))))  
     
  25. Thanks
    AM got a reaction from loopyc in logikgatter / logic gates (completed)   
    complementation to OR/AND/NOT! i hope everything is correct...
    https://de.wikipedia.org/wiki/Logikgatter
     
    (defun nand (&rest rest) (flet ((every-truep (x) (equal x t))) (not (every #'every-truep rest)))) (nand nil nil nil) => t (nand t t t t t t) => nil (nand nil t t t nil t) => t ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; (defun nor (&rest rest) (contain-itemp 'nil rest)) (nor t t t t) => nil (nor nil t nil) => t (nor t nil nil nil) => t ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; (defun xor (&rest rest) (oddp (car (count-item t rest)))) (xor t nil t t nil nil nil) => t (xor t t nil) => nil (xor nil t) => t ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; (defun xnor (&rest rest) (evenp (car (count-item t rest)))) (xnor t nil t t nil nil nil) => nil (xnor t t nil) => t (xnor nil t) => nil (xnor t nil t t nil nil t nil) => t ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;  
×
×
  • Create New...

Important Information

Terms of Use Privacy Policy