Jump to content

NagyMusic

Members
  • Posts

    99
  • Joined

  • Last visited

Posts posted by NagyMusic

  1. Suppose a density is defined by measuring the amount of information. Why does the first list having three pitches result in lower density than the second list comprising two pitches?


     

    (density-analysis '((c4 d4 g4) (d4 a4)))
    
    => (0.2916667 0.5833334)

     

    Thank you!

  2. I can't seem to get do-timeline2 function to work. I include an abridged example below; happy to share more code details if necessary. I'd like to filter 64 measures of 4/4 as defined in the timeline.

     

    Would anyone be able to offer some feedback? I tried adjusting different 'list' levels, etc. but with no avail. Thank you!

     

    (setf chords1 '(e2b2g3d4 e2cs3a3e4 e2d3b3fs4))
    (setf chords2 (pitch-transpose 3 chords1))
    
    (setf chorale1-chords (span '(1 1 1 1 1 1 1 1) chords1))
    (setf chorale2-chords (span '(1 1 1 1 1 1 1 1) chords2))
    
                           
    ;; OMNS
    (setf chorale1 (make-omn
                    :length (length-span '(1 1 1 1 1 1 1 1) '(w) :omn t)
                    :pitch chorale1-chords))
    
    (setf chorale2 (make-omn
                    :length (length-span '(1 1 1 1 1 1 1 1) '(w) :omn t)
                    :pitch chorale2-chords))
    
    
    ;; CHORALE RESERVOIRES
    (setf chorales-reservoir (list chorale1 chorale2))
    (setf chorales-map (vector-map chorales-reservoir '(0 4 7 12 16 7 12 16)))
    
    
    ;; TIMELINE
    (setf chorales-timeline '((1 0 1 0 1 0 1 0 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 1 0 0 0 0 1 1 1 1 1 1 0 0 0 0 0 0)))
    
    (do-timeline2
     '(chorales-map)
     chorales-timeline
     '(gen-pause x))

     

     

  3. I wonder if there's a function to allow for systematic transformations of rhythmic streams, like in the example below.

     

    From a regular stream of 16th notes:

     

    (s c4 d4 e4 f4 5q d4 e4 f4 g4 e4 s f4 g4 a4 f4 3q g4 a4 b4)

    1995966067_ScreenShot2021-02-13at5_09_22PM.png.f52bd808416870f20e866afdfe226749.png

    To occasional introduction of quintuplets, tuplets, etc:

     

    (s c4 d4 e4 f4 5q d4 e4 f4 g4 e4 s f4 g4 a4 f4 3q g4 a4 b4)

     

    785346221_ScreenShot2021-02-13at5_10_37PM.png.7648b58d07b1d9f3c2bfec0bcff6eb36.png

    Or:

     

    (6q c4 d4 e4 f4  d4 e4 s f4 g4 f4 g4 5q a4 f4 g4 a4 b4)

     

    2099768188_ScreenShot2021-02-13at5_11_50PM.png.6b555a8a74b0839a6c80aef2f263bf12.png

     

    Thank you!

     

  4. With Stephane's help, I learned that a possible number of intervals to process in each list is a random choice. What is more, each parameter in this function, including the number of possible intervals to process, is applied recursively to the last processed subset of intervals.

     

    Janusz- 
    Might it be possible to add :cycle-intervals and :cycle-num options the interval-expansion-series function? Those options would allow for the interval transformation parameters cycled in place of random.

     

    Thanks!
    Zvony

  5. The documentation on the interval-expansion-series function states that a count list argument refers to a number of intervals to process. Would someone be willing to explain what number of intervals and in what way? I understand that this function also has built-in randomness, resulting in a different output each time.

     

    In the example below, does the count list '(1 2 3) mean that only one interval is expanded the first time, then two intervals the second time, etc.? Or does it imply that only the first three intervals from the interval source list will be expanded?

     

    (interval-expansion-series
     10 '(1 -1 2 -2) '(1 2 3) '(-6 -5 3 4) :max-interval 6)

     

    Thank you!

  6. Thanks, Stephane. One can really learn a lot from this session!

     

    I compiled the code you posted, and I still get four repeated measures of the same material. My understanding is that I should get four iterations of a completely different set of measures. Yet, from what I can tell, each time, the process continues to produce four measures of new material that is repeated (looped) four times

     

    I restarted Opusmodus and tried again, but still got the same result. I also tried using gen-eval instead of gen-loop, but that didn't seem to work.

     

    Here's a screenshot of the viola part:

    1041043233_ScreenShot2020-12-31at9_47_53AM.thumb.png.f6292b2cf33285052acd44bdd4f38ea7.png

    For what it's worth, I'm providing some additional information. I'm afraid it could be something going on my end. 

     

    Here's what I get in the Listener when compile the setf seq segment:

     

    2 > gen-loop :seed 958822
    gen-loop :seed 958822
    gen-loop :seed 958822
    gen-loop :seed 958822
    gen-loop :seed 958822
    gen-loop :seed 958822
    gen-loop :seed 958822
    ;Compiler warnings for "/Users/zvony/Dropbox/CREATE/Opusmodus/Zvony/zvony/ZoomOM/Session 17/looping-process.opmo" :
    ;   In an anonymous lambda form at position 89: Undeclared free variable ph1
    ;Compiler warnings for "/Users/zvony/Dropbox/CREATE/Opusmodus/Zvony/zvony/ZoomOM/Session 17/looping-process.opmo" :
    ;   In an anonymous lambda form at position 432: Undeclared free variable ph2
    ;Compiler warnings for "/Users/zvony/Dropbox/CREATE/Opusmodus/Zvony/zvony/ZoomOM/Session 17/looping-process.opmo" :
    ;   In an anonymous lambda form at position 987: Undeclared free variable size (7 references)
    ;Compiler warnings for "/Users/zvony/Dropbox/CREATE/Opusmodus/Zvony/zvony/ZoomOM/Session 17/looping-process.opmo" :
    ;   In an anonymous lambda form at position 775: Undeclared free variable ph3


    And here's the corresponding omn notation:

     

    ((((e gs4 pp e. d4 e4 q d4 tie) (s d4 pp e4 d4 e. bb3 s b3 d4 bb3 f4 b3 bb3) (s d4 pp f4 d4 b3 e. gs3 b3 s e4 f4) (-s e. d4 pp e4 q d4 s bb3)) ((e d3 pp f3 s d3 e. b3 q gs3) (e d3 pp s e3 e. d3 s bb3 d3 bb3 d3 e3 b3) (s e4 pp d4 bb3 b3 e. d4 e bb3 s f3 b3 bb3) (-s e f3 pp s d3 e. b3 q gs3 s b3)) ((e d2 pp e. f2 q.. d2 tie) (e d2 pp q e2 tie s s d2 bb2 d2 bb2 d2) (s e3 pp d3 bb2 q b2 d3 tie s) (-s e. f2 pp h d2))) (((e d4 pp f4 s d4 e. b3 q gs3) (e d4 pp s e4 e. d4 s bb3 d4 bb3 d4 e4 b3) (s e5 pp d5 bb4 b4 e. d5 e bb4 s f4 b3 bb3) (-s e f4 pp s d4 e. b3 q gs3 s b3)) ((e d3 pp f3 s d3 e. b3 q gs3) (e d3 pp s e3 e. d3 s bb3 d3 bb3 d3 e3 b3) (s e4 pp d4 bb3 b3 e. d4 e bb3 s f3 b3 bb3) (-s e f3 pp s d3 e. b3 q gs3 s b3)) ((e d2 pp e. f2 q.. d2 tie) (e d2 pp q e2 tie s s d2 bb2 d2 bb2 d2) (s e3 pp d3 bb2 q b2 d3 tie s) (-s e. f2 pp h d2))) (((e d4 pp f4 s d4 e. b3 q gs3) (e d4 pp s e4 e. d4 s bb3 d4 bb3 d4 e4 b3) (s e5 pp d5 bb4 b4 e. d5 e bb4 s f4 b3 bb3) (-s e f4 pp s d4 e. b3 q gs3 s b3)) ((e d3 pp f3 s d3 e. b3 q gs3) (e d3 pp s e3 e. d3 s bb3 d3 bb3 d3 e3 b3) (s e4 pp d4 bb3 b3 e. d4 e bb3 s f3 b3 bb3) (-s e f3 pp s d3 e. b3 q gs3 s b3)) ((e d2 pp e. f2 q.. d2 tie) (e d2 pp q e2 tie s s d2 bb2 d2 bb2 d2) (s e3 pp d3 bb2 q b2 d3 tie s) (-s e. f2 pp h d2))) (((e d4 pp f4 s d4 e. b3 q gs3) (e d4 pp s e4 e. d4 s bb3 d4 bb3 d4 e4 b3) (s e5 pp d5 bb4 b4 e. d5 e bb4 s f4 b3 bb3) (-s e f4 pp s d4 e. b3 q gs3 s b3)) ((e d3 pp f3 s d3 e. b3 q gs3) (e d3 pp s e3 e. d3 s bb3 d3 bb3 d3 e3 b3) (s e4 pp d4 bb3 b3 e. d4 e bb3 s f3 b3 bb3) (-s e f3 pp s d3 e. b3 q gs3 s b3)) ((e d2 pp e. f2 q.. d2 tie) (e d2 pp q e2 tie s s d2 bb2 d2 bb2 d2) (s e3 pp d3 bb2 q b2 d3 tie s) (-s e. f2 pp h d2))))

     

    And here's what I get when I evaluate/audition one of the instruments:

     

    2 > audition-musicxml-omn-snippet
    ;Compiler warnings for "/Users/zvony/Dropbox/CREATE/Opusmodus/Zvony/zvony/ZoomOM/Session 17/looping-process.opmo" :
    ;   In an anonymous lambda form at position 10: Undeclared free variable seq

     

     

  7. So I tried again by reducing the number of iterations (gen-loop) and number of measures (setf size) for testing purposes. It turns out that the pitches output is different in each of the two iterations (almost; they're the same in the third eval), but the rhythms remain the same at both iterations (4 + 4 measures of the same rhythms). I attached the screenshots of the evaluated setf vn, va, vc below. Thank you once again!

     

    (setf seq
    (gen-loop 2 
    (progn 
    (setf size 4)
    (setf ph1 (ambitus
               '(g3 g6)
               (filter-tie
                (make-omn
                 :pitch (gen-loop size (interval-ambitus 6 (rnd-sample 12 (make-scale 'd4 12 :alt '(2 1 3)))))
                 :length (gen-loop size (length-legato (rnd-sample 12 '(s -s))))
                 :velocity (rnd-pick '((pp)(p)(mp)(mf)(f)))
                 ))))
    
    (setf ph2 (ambitus
               '(c3 g5)
               (filter-tie
                (make-omn
                 :pitch (gen-loop size (interval-ambitus 6 (rnd-sample 12 (make-scale 'd3 12 :alt '(2 1 3)))))
                 :length (gen-loop size (length-legato (rnd-sample 12 '(s -s))))
                 :velocity (rnd-pick '((pp)(p)(mp)(mf)(f)))
                 ))))
    
    (setf ph3 (ambitus
               '(c2 e4)
               (filter-tie
                (make-omn
                 :pitch (gen-loop size (interval-ambitus 6 (rnd-sample 12 (make-scale 'd2 12 :alt '(2 1 3)))))
                 :length (gen-loop size (length-legato (rnd-sample 12 '(s -s -s))))
                 :velocity (rnd-pick '((pp)(p)(mp)(mf)(f)))
                 ))))
    
    ;;; Mute/play
    (do-timeline2
    '(ph1 ph2 ph3)
    (binary-invert (matrix-transpose (gen-group (rnd-sample 7 '(0 1)) :size size)))
    '(gen-pause x)
    )
    )))

     

    (setf vn (assemble-seq 
               (loop for s in seq
                 collect (nth 0 s))))

     

    1808441664_ScreenShot2020-12-30at8_12_38PM.thumb.png.10cb7824902c54831dbc4fed026f2c66.png

     

     

    (setf va (assemble-seq 
               (loop for s in seq
                 collect (nth 1 s))))

     

    1572101451_ScreenShot2020-12-30at8_12_58PM.png.b8e35229fb814b99ef817bc80c764510.png

     

     

    (setf vc (assemble-seq 
               (loop for s in seq
                 collect (nth 2 s))))

     

    1912520144_ScreenShot2020-12-30at8_13_12PM.thumb.png.c4c68e061f846e05589668408fc5e2f0.png

  8. Thanks, Stephane, for your quick reply.

     

    I meant to ask why the code above doesn't produce new output with each iteration of the gen-loop. I understand that gen-loop should repeat the process itself, which should, in turn, generate 12 different iterations of pitches, rhythms, and velocities. I tested this with other pitches, and it appears that the process is iterated only once, producing one set of material, which is then repeated 12 times. For instance, one can see this by observing the velocities, which are only generated once at the outset, instead of 12 consecutive times.

     

    Again, I apologize if I'm not seeing this right. And thank you again for your insight and patience!

  9. Stéphane,

     

    Thanks again for answering my questions about Session 17. I have one more inquiry related to Part1-Basic-Idea part of your presentation. 

     

    Looking at the Looping the Process section, it seems like the basic process (algorithm) is evaluated only once, generating pitches, rhythms, and velocities, which are then repeated 12 times using gen-loop function and filtered with do-timeline2. What would it take to adjust the code so that the process is evaluated each of the 12 repeated times differently, resulting in different set of rhythms, pitches, and velocities each time? I include below the code of this section if it's easier to see what I'm referring to. My apologies if I'm misreading or mis-compiling the code. 

     

    Thank you! - Zvony

     

     

    ;;; Looping the process
    ;;; ============================
    (setf seq
    (gen-loop 12 ;; nb d'itération du process
    (progn ;; process
    (setf size 8)
    (setf ph1 (ambitus
               '(g3 g6)
               (filter-tie
                (make-omn
                 :pitch (gen-loop size (interval-ambitus 6 (rnd-sample 12 (make-scale 'd4 12 :alt '(2 1 3)))))
                 :length (gen-loop size (length-legato (rnd-sample 12 '(s -s))))
                 :velocity (rnd-pick '((pp)(p)(mp)(mf)(f)))
                 ))))
    
    (setf ph2 (ambitus
               '(c3 g5)
               (filter-tie
                (make-omn
                 :pitch (gen-loop size (interval-ambitus 6 (rnd-sample 12 (make-scale 'd3 12 :alt '(2 1 3)))))
                 :length (gen-loop size (length-legato (rnd-sample 12 '(s -s))))
                 :velocity (rnd-pick '((pp)(p)(mp)(mf)(f)))
                 ))))
    (setf ph3 (ambitus
               '(c2 e4)
               (filter-tie
                (make-omn
                 :pitch (gen-loop size (interval-ambitus 6 (rnd-sample 12 (make-scale 'd2 12 :alt '(2 1 3)))))
                 :length (gen-loop size (length-legato (rnd-sample 12 '(s -s -s))))
                 :velocity (rnd-pick '((pp)(p)(mp)(mf)(f)))
                 ))))
    
    ;;; Mute/play
    (do-timeline2
    '(ph1 ph2 ph3)
    (binary-invert (matrix-transpose (gen-group (rnd-sample 7 '(0 1)) :size size)))
    '(gen-pause x)
    )
    )))
    
    (setf vn (assemble-seq 
               (loop for s in seq
                 collect (nth 0 s))))
    (setf va (assemble-seq 
               (loop for s in seq
                 collect (nth 1 s))))
    (setf vc (assemble-seq 
               (loop for s in seq
                 collect (nth 2 s))))
    
    (ps 'vsl
        :svn (list vn)
        :sva (list va)
        :svc (list vc)
        :tempo 88
    )
  10. I wonder if it's possible to evaluate a function (that has a seed argument) a set number of times (using gen-loop) with a predefined, custom seed list applied to the function. Something that I'm trying to achieve in the example below. Thank you!

     

    (setf seeds (vector-round 1 100 (gen-white-noise 8 :seed 13)))
    
    (setf rhythm (gen-loop 8 (euclidean-rhythm 16 4 16 's :type 2 :seed seeds)))


       
     

  11. I've been studying HARMONIC-PATH and TONALITY-MAP functions to determine the exact similarities and differences between the two. While I understand the purpose of those functions in principle from reading the documentation and experimenting with different ideas, I wonder if - for educational purposes - someone could briefly highlight the main explicit differences between the two. In the short example below, both functions produce very similar results, so the question may be when to use one function instead of the other. And is it possible to achieve the same result with both functions? I appreciate anyone's advice or insight into this.

     

    Thanks!

     

    (setf chords '(c4e4g4 c4f4a4 b3d4g4))
    
    (setf voice (gen-repeat (length chords) '((c4d4 e4))))
    
    (setf harmonic-path (harmonic-path chords voice :octave :path))
    => ((c4e4 g4) (c4f4 a4) (b3d4 g4))
    
    (setf tonality-series (tonality-series chords :map '(step) :closest 'up))
    (setf tonality-map (tonality-map tonality-series voice))
    => ((c4g4 e5) (c4a4 f5) (b3g4 d5))

     

     

  12. Thanks for pointing me in the right direction. I was able to arrive at the solution using the CHORD-INVERSION function. 


     

    (setf chord '(c4d4e4))
    (setf rot-size (get-chord-size chord))
    => (3)
    
    (setf str-rot3
          (pitch-transpose-start
           0
           (sort-asc
            (pitch-melodize
             (mclist
              (flatten
               (chord-inversion rot-size chord :root t :series t)))))))
    => ((c4 d4 e4) (c4 d4 bb4) (c4 gs4 bb4) (c4 d4 e4))
    (chordize str-rot3)
    
    (chordize str-rot3)
    ((c4d4e4) (c4d4bb4) (c4gs4bb4) (c4d4e4))

     

     

     

     

  13. The existing STRAWINSKY-ROTATION function generates pitch and choral material using the given 12-tone row. Is it possible to use the same function with fewer pitches? I attached an example that I'd like to produce.

     

    Like the STRAWINSKY-ROTATION function, I'd like to take any number of pitches and then use cyclic-rotation to transpose each inversion so that the beginning note is always the same.

     

    51924523_ScreenShot2020-12-10at1_34_31PM.png.b0c7619c67a7eb031986e44e43933ea7.pngThank you!

  14. Thanks so much, Stephane. It's been fantastic watching your sessions and learning more about Opusmodus. I have a quick question about the first part of your presentation, namely about the piece Craft.

     

    Whenever I evaluate setf mel, I get every so slightly different melody. I even adjusted the setf path function by including the new '(octave) variable:

    (setf path (tonality-series modes :map '(octave) :root roots)) 

     

    Although, after watching your explanation in the video, I'm not sure if using 'octave affects the output or not.

     

    I attached the screenshots of three separate compilations; each produces an almost exact melody with only a few different notes. Is that because of the built-in randomness, in tonality-series or tonality-map?

     

    I understand that there's a way always to get the same output by using :seed. Would you happen to have any suggestions on how to implement it in the given context, especially when the init-seed is already used?

     

    Many thanks!

     

    Zvony

    1761020222_ScreenShot2020-11-27at4_31_46PM.png.c0654e84df08ac7e1a49e9e094136afa.png

     

    Screen Shot 2020-11-27 at 4.32.03 PM.png

    Screen Shot 2020-11-27 at 4.32.43 PM.png

  15. I wonder if anyone has a suggestion on producing this list (with sublists) in Opusmodus, in which the first number decreases in value, the second number stays the same, and the third number increases in value? Thank you!

     

    (

    (7) (3)

    (6) (3) (1)

    (5) (3) (2)

    (4) (3) (3)

    (3) (3) (4)

    (2) (3) (5)

    (1) (3) (6)

        (3) (7)

    )

     

  16.  

    Stéphane,

     

    Sorry for another question. I'm experimenting with several ideas - very inspiring session! 😃

     

    Instead of white noise vectors for dens-tend, I tried using a pitch row instead (see psets) to control various parameters in the piece. I used pitch-to-integer to get the numerical representation of pitches. The code below works most of the time:

    (setf size (car (rnd-number 1 12 32)))
    
    (setf psets '(c4 fs4 g4 e4 gs4 f4 a4 cs5 ds5 as4 d5 b4))
    
    ;;; RHYTHM
    
    (setf dens-tend (pitch-to-integer psets))
    (setf dens1 (vector-round 0 100 (gen-tendency size dens-tend)))
    (setf dens2 (vector-round 0 100 (gen-tendency size dens-tend)))
    (setf dens3 (vector-round 0 100 (gen-tendency size dens-tend)))
    (setf dens4 (vector-round 0 100 (gen-tendency size dens-tend)))
    (setf dens5 (vector-round 0 100 (gen-tendency size dens-tend)))
    (setf dens6 (vector-round 0 100 (gen-tendency size dens-tend)))

     

    However, occasionally when evaluating dens1 - dens 6  produces an error message: 

    > Error: 0.0 is not a greater than zero number.
    > While executing: (:internal rnd-variance1 rnd-variance), in process Listener-1(7).

     

    Any reason why this happens? Again, it occurs only sometimes.

     

    Thank you!

×
×
  • Create New...

Important Information

Terms of Use Privacy Policy