Jump to content

AM

Members
  • Posts

    792
  • Joined

  • Last visited

Posts posted by AM

  1. you could do it like this, check the function TONALITY-MAP

    (pitch-transpose 2 (tonality-map '(phrygian :map step) pitchvec))

    but mapping on (other) tonalities could be musically a bit tricky - perhaps you have to "eliminate some pitch repetitions" (has to do with quantification), or sometimes you have some troubles with the ambitus (that's the reason why i added <pitch-transpose>)...

     

    but perhaps there are some other solutions...?

     

    greetings

    andré

  2. ;;; ...an idea
    
    ;;; how to import some TEXT and translate it to integer-sequences to use this data
    ;;; for LIVE-CODING. also possible without .txt, but i tried to IMPORT it. perhaps
    ;;; in your live-coding session a friend of you is writing the text in a different
    ;;; location and you could share it (the path) via CLOUD :-D
    ;;; i know, this kind of data... is not very smart, but a little bit steam-punky :-)
    
    
    (defparameter *map-integer1*
      '(((a à á â ã ä å æ ą) 0)
        (b 1)
        ((c ç ć) 2)
        (d 3)
        ((e è é ê ë ę) 4)
        (f 5)
        (g 6)
        (h 7)
        ((i ì î ï) 8)
        (j 9)
        (k 10)
        ((l ł) 11)
        (m 12)
        ((n ñ ń) 13)
        ((o ò ó ô õ ö) 14)
        (p 15)
        (q 16)
        (r 17)
        ((s ś ß) 18)
        (t 19)
        ((u ù ú û ü) 20)
        (v 21)
        (w 22)
        (x 23)
        ((y ý ÿ) 24)
        ((z ż ź) 25)))
    
    
    ;;; 1) open/write a .txt-file
    ;;; 2) define your path (inside the loop)
    ;;; 3) start the loop 
    ;;; 4) write/change your .txt, and SAVE it
    ;;; => every 2 seconds it will be read by the code
    
    
    (loop repeat 60
      do (progn
           (print (progn
                    (setf x (string-to-list (let ((in (open "/Users/meierandre/Desktop/test.txt"))) ;; use your own path!!
                                              (read-line in))))
                    (text-map *map-integer1* (loop for i in x append (explode i)))))
           (print x))
    
      do (sleep 2)) ;;; every 2 seconds the loop is reading your .txt, change variable x and PRINT it

     

    for this example i used PRINT (so you see what is happening), but you could also "rewrite" a variable inside your sound-live-coding-CODE/FUNCTION

     

     

     

  3. LISP...
    any solution? i want to DIVIDE a seq into sublists -> when it's asc into a list, "rest"  into single-listed values - thanx a lot for some help 🙂

     

    ;;; input
    (divide* '(14 12 3 13 15 8 4 10 17 2 16 0 1 6 7 5 11 9))
    
    ;;; output
    => ((14) (12) (3 13 15) (8) (4 10 17) (2 16) (0 1 6 7) (5 11) (9))

     

  4. thanks, torsten!

    i know hanspeter kyburz (i almost studied with him 😀 - and because of him i started working with algorithms) and i know some of his works (CELLS / PARTS / ....). if you have the article of ERES HOLZ as pdf, would be nice (the link seems to be dead)...

     

     

    only some short thoughts - not on an scientific research level 😉

     

    isn't it - in general - a question about complexity and information? 

    and complexity/information changes when you are changing/crossing the MEDIA. that means: from algorithms/code/mathematics to sound/music or visuals... also the complexity itself changes, it's like  transforming... "the complexities" are different - the manifestation of it. so it's quite simple - and you feel so important and intelligent and "arty" 😉 - when you TAKE a really advanced mathematical/algorithmic grammar/process as a TOOL, ...but in accoustic perception the result could be quite "noise", because the musical complexity is different and depends - in my opinion - a lot on "how you map these things", on which musical  parameters and objects, in which dimensions...

     

    of course, it's also interesting to use such things - like algorithms -  in a way of "creative misunderstanding" (as i think ferneyhough once mentioned in different context), but we should be aware of the GAPS:  algorithmic complexity - effective complexity.

     

    what do you think?

     

    greetings

    andré

     

     

    HEINZ VON FöRSTER had some really good thoughts on such things - in an abstract way... here is an article....

    disorder:order.pdf

     

    and an article from DAVID GALANTER...

    Galanter_2003_What is Generative Art Complexity theory as a context for art theory.pdf

  5. thank you, torsten! 🙂 

    (at the moment, I'm thinking about what the GAP is between visual visual l-systems (images, you see the whole "gestalt") and acoustic ones (which more has to do with the PROCESS in time, musical grammar...). the handling / perception / .... is a completely different one)

  6. 
    ;;; a little extension for lsystems, i needed all generations, not only the final one. i think for in-time-processes it's more interesting, because you will hear/see the way of "growing/developing"
    
    ;;; perhaps JANUSZ could extended the original OPMO-function. keep attention about stack-overflow if you have LARGE DEPth :-)
    
    
    ;;; function
    (defun all-gen-lsystem (ls &key depth )
      (loop repeat (1+ depth)
        for i from 0 to depth
        collect (rewrite-lsystem ls :depth i)))
    
                        
    ;;; setup
    
    (defclass sieve_1 (l-system)
      ((axiom :initform '(1))
       (depth :initform 10)))
    
    (defmethod l-productions ((ls sieve_1))
      (choose-production ls
                         (1 (--> 2 1))
                         (2 (--> 4))
                         (4 (--> 2 6))
                         (6 (--> 1))))
    
    ;;; example
    
    ; new => all gen
    (all-gen-lsystem 'sieve_1 :depth 3)
    => ((1) (2 1) (4 2 1) (2 6 4 2 1))
    
    ; original => only last gen
    (rewrite-lsystem 'sieve_1 :depth 3)
    => (2 6 4 2 1) 

     

  7. Quote

    No '13' or '19'? 

     

    because in such a fast "basic tempo" they were too close to "17" and "23"  😉

    i think in slower tempo it makes sense to work with numbers they are close/closer to each other. then the perception compares the tempi, when the GAPS are to large it's only "SLOW/FAST".... depends on your ideas...

     

    THANKS FOR THE HINT, i will look at it!!

     

    andré

     

     

  8. polytemporal fall - algorithmic study

    [with tempo relations 3:5:7:11:17:23:29]

     

    https://soundcloud.com/andr-meier-1/algorithmic-study-polytemporal-fall

     

    this is a small example: i coordinate and play MIDIs (in this case this are simple scales) in OPMO via OSC -> maxmsp_player. you can here how precise you can coordinate simple [but polytemporal] scales => all the MIDIs coincide (?) - 30000ms after the evaluation of the code - in an unsiono pitch!!! 

     

    in that way you can coordinate different scores/midi's (which have individual tempos (!)) very precise. with OSC/maxmsp_player you can change/manipulate the tempi of the midi's (directly from OPMO) so you can be variable with pre-produced midis (perhaps produced in OPMO)...

     

    greetings

    a.

     

     

     

     

     

  9. "What you are doing Andre is quite bad and unsafe"

    very friendly, your answer 🤨

     

    ...and i knew that, but i didn't found some hints (jn the tutorials) how to extract OMN from def-score. of course it is not good, but it took me only 2 minutes to briefly the problem for my specific application. i have not written any official opusmodus-function (which can do anything) but a simple solution which helps me.

     

  10. oh, this was simple 🙂 here is a small program, it works...

     

    (defun get-pitch-from-midi (midipath)
      (loop for i in (flatten (compile-score
                               (midi-to-score midipath)
                               :output :score))
        when (or (chordp i)
                 (pitchp i))
        collect i))
    
    
    
    (get-pitch-from-midi "path/filename")

     

    also with length?!

     

    (defun get-length-from-midi (midipath)
      (loop for i in (flatten (compile-score
                               (midi-to-score midipath)
                               :output :score))
        when (and (lengthp i)
                  (not (integerp i)))
        collect i))
    
    
    (get-length-from-midi "path/filename")

     

    but will not work with more then one voice / its not necessary for MY needs, so i coded only this simple solution - perhaps janusz will do it?

  11. dear all

    here is a setup for playing midi-files/scores in polytempi / follow the instructions and have fun!

    just ask if you have some questions...

     

    greetings

    andré

     

    - personally i will use it for exact sample/e-player perfomance with my pieces which are working with "Technology-Assisted Conducting"

    http://polytempo.zhdk.ch ... in future i will do it all directly from OPMO or lisp - "live score generating" + polytempo-conducting + e-player)

    - i have already done this with my piece MODULAR FORM  but not all controlled by LISP/OPMO, so next step is doing it all in OPMO/LISP

     

    ...some explanations about the piece....

     

     

     

    greetings

    andré

     

    EN.WIKIPEDIA.ORG

     

    ;;; POLYTEMPO-PLAY
    ;;; with a MAX-patch (from my friend thomas peter) and some OSC-send i can play the same/different midis (up to 30) 
    ;;; in different tempos in parallel - any combination, with precise coordination
    ;;; also possible: change global velocity (means: change velocity inside midi)
    ;;;                time-delay (start) in ms
    
    ;;; 1) OSC-send functions:
    
    (defparameter *out-socket* (make-socket :type :datagram))
    (defparameter *remote-host* "127.0.0.1")
    (defparameter *remote-port* 7500)
    
    (defun udpsend (&rest args)
      (let ((message (apply' osc::encode-message args)))
        (send-to *out-socket* message (length message)
                 :remote-host *remote-host*
                 :remote-port *remote-port*)))
    
    
    ;;; 2) a) put the MAX-player-folder on desktop
    ;;;    b) start midiplayer.maxpat
    ;;;    c) midiplayer: define your output source in [midiout@name "from MAX 1"]
    ;;;    d) the MIDIS must be placed in the midi-folder (inside MAX-player-folder)
    
    
    
    ;;; 3) generate SCORE (here a nonsense example)
    (setf omn (make-omn :pitch (setf pitches 
                                     (filter-repeat 1 
                                                    (flatten (gen-sort 
                                                              (rnd-air :type :pitch :seed 45) 
                                                              :step 5 :sort '> :seed 123))))
                        :length (gen-length '(1) 1/32)
                        :velocity (pitch-to-velocity 'p 'mf pitches :type :float)
                        :span :pitch))
    
    
    (def-score sorted-whitenoise
               (:title "sorted-whitenoise"
                       :key-signature 'atonal   
                       :time-signature '(4 4) 
                       :tempo 60
                       :layout (grand-layout 'inst))
      (inst
       :omn omn
       :port 0
       :channel 1
       :sound 'gm
       :program 'acoustic-grand-piano))
    
    
    ;;; 4) COMPILE that score into your Max-Player/midi-folder => PATH+NAME!!!
    
    (compile-score
     'sorted-whitenoise
     :file "your-path/sorted-whitenoise")
    
    
    
    
    ;;; 5) play it by evaluate UPSEND -> some examples
    ;;; /eplayer / midi-name / tempo-factor / velocity factor / time-delay in ms
    
    
    (udpsend "/eplayer" "sorted-whitenoise" 1.0   0.5 0) ;; originaltempo, velocity 0.5
    (udpsend "/eplayer" "sorted-whitenoise" 2.3   1.0 0) ;; (* tempo 2.3) etc...
    (udpsend "/eplayer" "sorted-whitenoise" 0.375 1.0 2000) ;; (* tempo 0.375 with startdelay 2000ms)
    
    (udpsend "/eplayer" "stop") ; you can stop with that
    
    
    ;;; a tempo-relations => 23:17:13:9:3:2 -> a complex example with time-delays
    ;;; also possible with every and different midis you like
    
    (progn
      (udpsend "/eplayer" "sorted-whitenoise" 2.3 1.0 0)
      (udpsend "/eplayer" "sorted-whitenoise" 0.3 0.8 0)
      (udpsend "/eplayer" "sorted-whitenoise" 0.2 0.4 0)
      (udpsend "/eplayer" "sorted-whitenoise" 1.3 1.0 10000)
      (udpsend "/eplayer" "sorted-whitenoise" 1.7 0.9 16000)
      (udpsend "/eplayer" "sorted-whitenoise" 0.9 0.7 20000))
      
    
    
    (udpsend "/eplayer" "stop") ; you can stop with that

     

     

    Max_Player_19-08-23.zip example.aiff

    goldberg_13_11.aiff example_11_7_5_3_2.aiff

  12. too much code and too complicated to post - I do not have the time to write a manual.

     

    it's a "machine" that creates multiple "brownian bridges" combined with "pitch-contour" and "add-rnd-dust".  it's an all-in-ONE tool/machine/bot...

     

    I'm interested in repetition/difference in other contexts than traditional ones; but "brownian bridges" then resemble ornaments. when the sequences are short - brownian bridges are "rnd-processes" between 2 fixed points - then you will keep ornamental sequences between this 2 points/pitches...

     

    (I did not work with a score, just coding and listening - it's only sketching/testing, not composing. and all the examples are "rnd-generated"/not-composed by the machine, you could produce more and more...)

     

    some links:

     

    Brownian_bridge.png
    EN.WIKIPEDIA.ORG

     

     

    -> in OPMO

     

×
×
  • Create New...

Important Information

Terms of Use Privacy Policy