Jump to content

JulioHerrlein

Members
  • Content count

    171
  • Joined

  • Last visited

  • Days Won

    9

Reputation Activity

  1. Like
    JulioHerrlein reacted to torstenanders in Updated library of many custom Opusmodus functions   
    > all your hard work to document
     
    I actually do such detailed documentation for my own benefit as well. I once spent several months on developing some personal library that I used for composing some piece, but when I wanted to re-use it some two years later, I could not really understand my own functions anymore. Since then I better err on the side of overdoing the docs 🙂
     
    Best,
    Torsten
     
  2. Like
    JulioHerrlein reacted to opmo in display in seperate windows   
    This will be possible in ver. 2.0 
  3. Like
    JulioHerrlein got a reaction from lviklund in Slonimsky Stuff HELP   
    Some sieve values:
     
    PATT #53 (7 -1)
    PATT #59 (8 -1 -1)
    PATT #77 (13 -4 -2 -1)
    PATT #80 (-1 7)
    PATT #85 (-2 1 7)
    PATT #99 (-1 3 4)
    PATT #181 (1 3)
    PATT #186 (5 -1)
    PATT #295 (-1 6)
     
     
     

  4. Like
    JulioHerrlein got a reaction from opmo in Slonimsky Stuff HELP   
    After we figure out the pattern sequence, gen-sive or make-scale do the job.
    added 1 minute later PATT # 1
    (make-scale 'c4 12 :alt '(1 5)) This is why I love Opusmodus !
    Best !!
    Julio
  5. Like
    JulioHerrlein got a reaction from opmo in Slonimsky Stuff HELP   
    Dear Friends,
    Thank you all for replying !
     
    What I had in mind was not a replication of the book itself, like a database but, instead,
    a kind of generative way for doing the same kind of symmetrical patterns.
    Of course, this way, we could not retrieve the exact number of the pattern as in the book edition.
    Actually, the patterns could be generated with a few informations:
     
    1) The principal tones (the division of the octave). This could be specified as a keyword argument in the end of the Function, like
    :tritone   :ditone  :sesquitone  :wt  :st   :quadritone  :sesquiquadritone  etc, etc...
     
    2) The way the pattern is constructed, i.e., the combination of inter/ultra/infrapolation, as the figure bellow:
     

     
    3) The ambitus of the pattern, i.e., how many octaves/times the pattern will rise up through the range.
    For example, Pattern #1 could spread all over a wide range as the figure below:
     

     
    or just in the C4-C5 ambitus, like this:

     
    4) The restriction of the AMBITUS could make  some patterns based on larger divisions of the octave, wrap around
    inside the ambitus determined, acting as a kind of Sieve, filtering the pitches.
     
    Just some ideas...
     
    All the best !
    Julio
  6. Thanks
    JulioHerrlein reacted to Stephane Boussuge in XML Snippet "open with" context menu option   
    the last snippet is also the last score.
     
    By the way you can do a function last score to editor.
     
    I've did one for my usage when working with SIbelius.
     
    I give it here if it can help.
    (defun last-score-to-editor () (compile-score *last-score* :output :musicxml :file "temp-last-score") (musicxml-to-editor "temp-last-score"))  
    S.
  7. Thanks
    JulioHerrlein reacted to opmo in Opusmodus with sound synthesis package (CLM)   
    The do-timeline is already in the system 🙂
  8. Like
    JulioHerrlein got a reaction from opmo in Opusmodus with sound synthesis package (CLM)   
    This opens up windows to Spectral work withing Opusmodus !
    Congrats !
    I'm so curious about the timeline stuff...
    All the best !
  9. Like
    JulioHerrlein got a reaction from opmo in Slonimsky Stuff HELP   
    After we figure out the pattern sequence, gen-sive or make-scale do the job.
    added 1 minute later PATT # 1
    (make-scale 'c4 12 :alt '(1 5)) This is why I love Opusmodus !
    Best !!
    Julio
  10. Like
    JulioHerrlein got a reaction from opmo in Slonimsky Stuff HELP   
    Dear All,
     
    Is there a function where you can specify the creation parameters of the melodic patterns
    devised by Slonimsky on the Thesaurus ?
     
    Is there a function where you can specify:
     
    1) The division of the octave (Tritone, Ditone, Sesquitone) ?
    2) The pattern way (Infra, ultra, interpolation, and their combinations) ?
     
    Thanks for the help !
    Best,
    Julio
  11. Like
    JulioHerrlein got a reaction from opmo in Slonimsky Stuff HELP   
    Dear Friends,
    Thank you all for replying !
     
    What I had in mind was not a replication of the book itself, like a database but, instead,
    a kind of generative way for doing the same kind of symmetrical patterns.
    Of course, this way, we could not retrieve the exact number of the pattern as in the book edition.
    Actually, the patterns could be generated with a few informations:
     
    1) The principal tones (the division of the octave). This could be specified as a keyword argument in the end of the Function, like
    :tritone   :ditone  :sesquitone  :wt  :st   :quadritone  :sesquiquadritone  etc, etc...
     
    2) The way the pattern is constructed, i.e., the combination of inter/ultra/infrapolation, as the figure bellow:
     

     
    3) The ambitus of the pattern, i.e., how many octaves/times the pattern will rise up through the range.
    For example, Pattern #1 could spread all over a wide range as the figure below:
     

     
    or just in the C4-C5 ambitus, like this:

     
    4) The restriction of the AMBITUS could make  some patterns based on larger divisions of the octave, wrap around
    inside the ambitus determined, acting as a kind of Sieve, filtering the pitches.
     
    Just some ideas...
     
    All the best !
    Julio
  12. Like
    JulioHerrlein reacted to opmo in Opusmodus with sound synthesis package (CLM)   
    Since some time we are working on implementing Bill's Schottstaedt 'Synthesis package CLM' into Opusmodus.
    As expected we make the CLM working with OMN form sequence or with single parameters - example below.
     
    The score is using partials from The Bells of the Campanile: La Marangona.
    Below you will find an audio file of the score which is rendered each time you make evaluation.
     
    Best wishes to all,
    Janusz
    ;; --------------------------------------------------------- ;; MARANGONA ;; --------------------------------------------------------- ;; Parameters (defparameter count 50) (setf partials1 (library 'marangona-partials 'partials nil :random 50)) (setf partials2 (library 'marangona-partials 'partials nil :random 50)) (setf partials3 (library 'marangona-partials 'partials nil :random 50)) (setf partials4 (library 'marangona-partials 'partials nil :random 50)) (setf par1 (rnd-sample count (partial :freq (flatten partials1)))) (setf par2 (rnd-sample count (partial :freq (flatten partials2)))) (setf par3 (rnd-sample count (partial :freq (flatten partials3)))) (setf par4 (rnd-sample count (partial :freq (flatten partials4)))) (defparameter freq1 (gen-divide (rnd-sample count '(2 3 4 5)) par1)) (defparameter freq2 (gen-divide (rnd-sample count '(1 2 3 4 5)) par2)) (defparameter freq3 (gen-divide (rnd-sample count '(1 2 3 1 4 5)) par3)) (defparameter freq4 (gen-divide (rnd-sample count '(1 2 3 1 4 5)) par3)) (defparameter len1 (list (length-span 42 (rnd-sample count '(w h q w))))) (defparameter len2 (list (length-span 42 (rnd-sample count '(d h h))))) (defparameter len3 (list (length-span 42 (rnd-sample count '(h. w q))))) (defparameter len4 (list (length-span 42 (rnd-sample count '(d d h))))) (do-timeline '( len1 (---xxx-xx- ---xxx---- --x--xx--- ---x------ x-) len2 (---xxx-xx- ---xx-x--- --x--xx--- ---x------ x-) len3 (---xxx-xx- ---xx--x-- --x--xx--- ---x------ --) len4 (---xxx-xx- ---xx---x- --x--xx--- ---x------ --) ) '(gen-pause x) :time '(w)) (defparameter dur1 (omn :length (flatten len1))) (defparameter dur2 (omn :length (flatten len2))) (defparameter dur3 (omn :length (flatten len3))) (defparameter dur4 (omn :length (flatten len4))) (defparameter amp1 (rnd-number count 0.05 0.43)) (defparameter amp2 (rnd-number count 0.05 0.43)) (defparameter amp3 (rnd-number count 0.05 0.43)) (defparameter amp4 (rnd-number count 0.05 0.43)) (defparameter env '((0 0 40 .1000 60 .2000 75 .4000 82 1 90 1 100 0) (0 0 60 .1000 80 .2000 90 .4000 95 1 100 0) (0 0 10 1 16 0 32 .1000 50 1 56 0 60 0 90 .3000 100 0) (0 0 30 1 56 0 60 0 90 .3000 100 0) (0 0 50 1 80 .3000 100 0) (0 0 40 .1000 60 .2000 75 .4000 82 1 90 1 100 0) (0 0 10 1 32 .1000 50 1 90 .3000 100 0) (0 0 60 .1000 80 .3000 95 1 100 0) (0 0 80 .1000 90 1 100 0))) ;; --------------------------------------------------------- ;; Score (with-sound (:play nil :reverb jc-reverb :scaled-to .7 :statistics t :channels 2 :output "marangona-series") (fmviolin-synth dur1 freq1 amp1 :degree (rnd-number count 45 85) :fm-index (rnd-number count 0.10 1.0) :reverb-amount 0.30 :noise-amount (rnd-number count 0.00 0.004) :amp-env (rnd-sample count env) :fm1-rat (rnd-number count 0.00 6.718) :fm2-rat (rnd-number count 0.00 4.414) :fm3-rat (rnd-number count 0.00 1.141) :glissando-amount (rnd-number count 0.00 0.8) ) (fmviolin-synth dur2 freq2 amp2 :degree (rnd-number count 45 85) :fm-index (rnd-number count 0.10 1.0) :reverb-amount 0.30 :noise-amount (rnd-number count 0.00 0.004) :amp-env (rnd-sample count env) :fm1-rat (rnd-number count 0.00 4.718) :fm2-rat (rnd-number count 0.00 6.414) :fm3-rat (rnd-number count 0.00 1.141) :glissando-amount (rnd-number count 0.00 0.8) ) (fmviolin-synth dur3 freq3 amp3 :degree (rnd-number count 45 85) :fm-index (rnd-number count 0.10 1.0) :reverb-amount 0.30 :noise-amount (rnd-number count 0.00 0.004) :amp-env (rnd-sample count env) :fm1-rat (rnd-number count 0.00 1.718) :fm2-rat (rnd-number count 0.00 4.414) :fm3-rat (rnd-number count 0.00 6.141) :glissando-amount (rnd-number count 0.00 0.8) ) (fmviolin-synth dur4 freq4 amp4 :degree (rnd-number count 45 85) :fm-index (rnd-number count 0.10 1.0) :reverb-amount 0.30 :noise-amount (rnd-number count 0.00 0.004) :amp-env (rnd-sample count env) :fm1-rat (rnd-number count 0.00 4.718) :fm2-rat (rnd-number count 0.00 6.414) :fm3-rat (rnd-number count 0.00 1.141) :glissando-amount (rnd-number count 0.00 0.8) ) )  
    Score with omn-form sequence:
    (with-sound (:play nil :channels 2 :reverb jc-reverb :scaled-to .6 :statistics t :output "quartet") (fmviolin-omn vn1 :reverb-amount 0.20 :bpm 44) (fmviolin-omn vn2 :reverb-amount 0.20 :bpm 44) (fmviolin-omn va :reverb-amount 0.20 :bpm 44) (fmviolin-omn vc :reverb-amount 0.20 :bpm 44) )  
       
  13. Like
    JulioHerrlein got a reaction from lviklund in Slonimsky Stuff HELP   
    Some sieve values:
     
    PATT #53 (7 -1)
    PATT #59 (8 -1 -1)
    PATT #77 (13 -4 -2 -1)
    PATT #80 (-1 7)
    PATT #85 (-2 1 7)
    PATT #99 (-1 3 4)
    PATT #181 (1 3)
    PATT #186 (5 -1)
    PATT #295 (-1 6)
     
     
     

  14. Thanks
    JulioHerrlein reacted to opmo in Slonimsky Stuff HELP   
    I think this could be done.
  15. Like
    JulioHerrlein reacted to opmo in Slonimsky Stuff HELP   
    If someone will get me the entire Thesaurus as a library or as a lists (patterns) then we could do something what Julio is proposing. PDF etc... won't do. Each pattern should be in OM library form of at least a lisp lists.
  16. Like
    JulioHerrlein reacted to lviklund in Slonimsky Stuff HELP   
    Me to would like to have functions for that.
    I made a lib from about 50 pages from the book just to lose them before having time to share it 🤯😡🤬
  17. Like
    JulioHerrlein reacted to Stephane Boussuge in Slonimsky Stuff HELP   
    Actually, you have only the possibilitie to use library function to pick into the Slonimsky Thesaurus.opmo library file who contain only the slonimsky tritones patterns.
     
    I would love as you to have some functions who directly generate all this stuff ! Janusz ??  🙂 🙂 🙂 
     
    S.
  18. Like
    JulioHerrlein got a reaction from opmo in Updated library of many custom Opusmodus functions   
    Thank you, Torsten !
    Enjoy !!
    Best,
    Julio
     
     
  19. Thanks
    JulioHerrlein reacted to Stephane Boussuge in HELP needed on Jazz Lines from fragments   
    Hi Julio, use substitute-map in place of vector mapping because if you use the vector-map function, the vector you give need to contain at least one time one of each value. if not, it is rounded internally by the function (the vector-map function determine (deduct) itself it's own bounds by the ambitus of the numbers you give to it.)
     
    So, better to do:
     
    (setf phrase1
          (pitch-transpose 
           trsp1 
           (substitute-map 
            cells-reserv 
            (gen-integer (- (length cells-reserv) 1))
            vector-ctrl-1)))
     
     
    All the best
     
    S.
  20. Thanks
    JulioHerrlein reacted to Stephane Boussuge in HELP needed on Jazz Lines from fragments   
    I don't know if it could help, but i've played a bit with the idea and made this example.
    Naturally, it is very raw and not very sophisticated but i 've had some fun with it.
     
    ;;; Some cells (setf cells-reserv '((s c4 d4 eb4 f4)(s g4 f4 d4 eb4)(s c4 eb4 d4 f4)(s g4 d4 f4 eb4)(s f4 d4 eb4 c4)(s eb4 d4 c4 g4))) ;;; Vectors of integers (between 0 to 5 because 6 cells in cells-reserv) (setf vector-ctrl-1 '(0 2 0 3 0 2 0 4 5 4 3 4 5 4 2 1 2 0 2 1 0 1 0)) ;; that vector is generated algorithmically (setf vector-ctrl-2 (rnd-number 24 0 (length cells-reserv))) (setf vector-ctrl-3 (rnd-number 24 0 (length cells-reserv))) ;;; some transposition (setf trsp1 '(0 7 0 2 4 7 4 3 2 0 2 4 3 4 5 5 2 1 2 3 2 1 0)) (setf trsp2 (rnd-number 24 0 6)) (setf trsp3 (rnd-number 24 0 11)) ;;; generate phrases (setf phrase1 (pitch-transpose trsp1 (vector-map cells-reserv vector-ctrl-1))) (setf phrase2 (pitch-transpose trsp2 (vector-map cells-reserv vector-ctrl-2))) ;;; introduce some cells variant (setf phrase3 (pitch-transpose trsp3 (pitch-variant (vector-map cells-reserv vector-ctrl-3)))) ;;; Assemble the parts and add some rests (setf part1 (length-weight (assemble-seq phrase1 phrase2 phrase3) :weight '(6 1))) (def-score cells ( :key-signature 'chromatic :time-signature '(4 4) :composer "Stéphane Boussuge" :copyright "Copyright © 2018 s.boussuge" :tempo 180 ) (sax :omn part1 :channel 1 :sound 'gm :program 'Tenor-Sax ) ) SB.
  21. Like
  22. Like
    JulioHerrlein reacted to torstenanders in Updated library of many custom Opusmodus functions   
    > I got just four 16th notes.
     
    This function allows for various controls that you did not use – Of course this function also allows for plain sequences of 1/16-notes, when you select its arguments accordingly 🙂   I am interested in CAC as a means of control on a higher level instead of some automatic "magic".
     
    You might want to run the examples below in Opusmodus to get music notation outputs, which are likely more easy to read than the OMN expressions, but nevertheless I provide the OMN expressions for completeness as well.
     
    The argument position (3rd argument) controls the kind of rhythmic cell that you get, see the doc for details. Here is an example where different rhythmic cells are returned. Note that by default all returned cells carry potentially a durational accent. 
     
    (gen-karnatic-cell 4 4 '(0 4 3 2 1 0))
    => ((1/4) (1/16 1/16 1/16 1/16) (1/8 1/16 1/16) (1/8 1/8) (3/16 1/16) (1/4))
     
    Now, if you use the same positions but different gati or jathi settings then you get a somewhat similar rhythm in that different gati/jathi. Below I slightly adapted the positions to make the results even more similar. 
     
    (gen-karnatic-cell 4 5 '(0 6 3 2 1 0))
    => ((5/16) (1/16 1/16 1/16 1/16 1/16) (3/16 1/16 1/16) (3/16 1/8) (1/4 1/16) (5/16))
     
    You can, of course, use these in a different time signature (e.g., the tala of your choice).
     
    (omn-to-time-signature (gen-karnatic-cell 4 5 '(0 6 3 2 1 0)) '(4 4))
    => ((q c4 tie s s s s s s e. s s s tie) (e c4 c4 q s q tie s))
     
    If you want to keep track of where the accents are located, you could mark them before this transformation (the function articulate-phrase is defined below this post). You could then manually later revise the notation to instead you the beam-breaking that Reina recommends. 
     
    (omn-to-time-signature 
     (articulate-phrase (gen-karnatic-cell 4 5 '(0 6 3 2 1 0))
                        :accent 'marc)
    '(4 4))
    => ((q c4 tie+marc s marc s marc s s s s e. marc s s s tie+marc) (e c4 c4 q marc s q tie+marc s marc))
     
    After the changed jathi above, here is a different gati. Results are more similar, because the underlying data is the same with different gati but the same jathi. Here is an example with quintuplets. 
     
    (gen-karnatic-cell 5 4 '(0 4 3 2 1 0))
    => ((1/5) (1/20 1/20 1/20 1/20) (1/10 1/20 1/20) (1/10 1/10) (3/20 1/20) (1/5))
     
    Here is the same with triplets -- exactly the same, only slower. 
     
    (gen-karnatic-cell 3 4 '(0 4 3 2 1 0))
    => ((1/3) (1/12 1/12 1/12 1/12) (1/6 1/12 1/12) (1/6 1/6) (1/4 1/12) (1/3))

    You can also change the jathi (or even gati) on the fly in a phrase. The given pattern is then 'cycled through'.
     
    (gen-karnatic-cell 4 '(5 5 3 3) '(0 6 3 2 1 0))
    => ((5/16) (1/16 1/16 1/16 1/16 1/16) (1/16 1/16 1/16) (1/16 1/16 1/16) (1/4 1/16) (5/16))

    You can also randomise your position
     
    (gen-karnatic-cell 4 5 '(0 1 ? ? 0))
    => ((5/16) (1/4 1/16) (3/16 1/8) (3/16 1/16 1/16) (5/16))

    And I did not even start discussing the other parameters yet. For example, you can set whether or not cells start with a durational accent (not a karnatic concept, but very useful notion for Western ears when dealing with rhythm). 
     
    (gen-karnatic-cell 4 5 '(3 3 3 3) :accented? '(T nil nil T))
    => ((3/16 1/16 1/16) (1/16 3/16 1/16) (1/16 3/16 1/16) (3/16 1/16 1/16))
     
    You can filter in various ways want kind of rhythm you want, e.g., set the minimum or maximum number of notes per cell. 
     
    (gen-karnatic-cell 4 5 '(? ? ? ?) :min-number '(3 3 3 3) :seed 1)
    =>((1/8 1/8 1/16) (3/16 1/16 1/16) (1/16 1/16 1/16 1/16 1/16) (1/8 1/8 1/16)) 
     
    EDIT: Oops, that are is seemingly not fully working as expected.
     
    I stop here and refer you do the documentation for more details: there are several more arguments that I did not even mention yet. I know that my documentation is rather concise and not a textbook, but it briefly discusses every detail. I said from the beginning, I wrote this for myself, so you might want to first spend a bit of time with the doc 🙂
     
    As you hopefully can see, this function alone allows for a rather rich world of rhythm with rather precise control that allows varying some rhythmic idea in various ways. I am interested here in clearly perceivable rhythmic similarities, e.g., between rhythms in different gati and jathi combinations in the Western tradition of thematic variation.  
     
    Of course, you can also process the result further in various ways. E.g., I am adding ties after long notes and/or subdivide short notes to increase the rhythmic contrast, and I am turning certain notes into rests...
     
    Best,
    Torsten
     
    (defun articulate-phrase (sequence &key (accent 'marc))
      "Add articulations to phrase for more clear rhythmic accents, e.g, an accent on every first beat.
      
      NOTE: This function assumes that `sequence' is a purely rhythmic OMN expression with only length values and perhaps ties. However, a sequence with (constant) pitches is returned, because certain Opusmodus functions do not support an OMN sequence without pitches.
      Examples:
      (articulate-phrase '((h h) (q q q q tie) (q q q q) (-q q) (q q q q)) :accent 'marc)
      => ((h marc h) (q marc q q q tie) (q q q q) (-q q) (q marc q q q))
      "
      (cons 
       ;; First bar
       ;;; NOTE: code repetition...
       (let ((bar1 (first sequence)))
         (if (length-notep (first bar1))
           (if (and (= (count-notes bar1) 1)
                    (eql (first (last bar1)) 'tie))
             (tu:replace-element (merge-articulations (list accent 'tie)) 1 bar1)
             (tu:insert-after bar1 0 accent))
           bar1))
       ;; other bars
       (loop :for (bar1 bar2) :on sequence :while bar2
         ;;; NOTE: code repetition
         :collect (if (and (length-notep (first bar2))
                           (not (eql (first (last bar1)) 'tie)))
                    (if (and (= (count-notes bar2) 1)
                             (eql (first (last bar2)) 'tie))
                      (tu:replace-element (merge-articulations (list accent 'tie)) 1 bar2)
                      (tu:insert-after bar2 0 accent))
                    bar2))))
     
  23. Like
    JulioHerrlein reacted to torstenanders in Updated library of many custom Opusmodus functions   
    Good to hear things are working for you 😉
     
    Note that dependencies of this library are of interest on their own for computer-aided composition. This is particularly true for the constraint library cluster engine and its extension cluster rules, as well as the library fenv. 
     
    Torsten
  24. Thanks
    JulioHerrlein reacted to torstenanders in Updated library of many custom Opusmodus functions   
    Actually, these are warnings and not errors. They point out various issues in the code that could be improved (in particular in the library cluster engine, as you may have noticed), but the code should still work overall. Also, you should see these compilation and warning messages only once (if you never change the code of the relevant library).
     
    Just try to go on and actually run some examples of these libraries. 
     
    Please let me know if you run into an actual error message. (There are some minor bugs of course, but at least for my tot library I try to make them explicit in the documentation as well.)
     
    Best,
    Torsten
  25. Thanks
    JulioHerrlein reacted to torstenanders in Updated library of many custom Opusmodus functions   
    Dear all,

    I updated my library tot (https://github.com/tanders/tot) in various ways. In particular, there are many new functions available.

    You can now read the documentation online at https://tanders.github.io/tot/. However, remember that you can directly evaluate the many examples in the documentation when (after installing the library) you drag the library folder into your Opusmodus project navigator and open the documentation within Opusmodus.
     
    If you are interested in the details of how the library developed, you can see a changelog at https://github.com/tanders/tot/commits/master .

    NOTE: When you install/upgrade this library, make sure you also install/upgrade all its dependencies, as described in the detailed installation instructions at https://github.com/tanders/tot. 
     
    Best,
    Torsten
     
    PS: This is not an official release. As I am primarily developing this library for my own purposes, I keep it rather informal and extend it on a continuous basis for my own composition projects. Anyway, I thought at least some of you might be interested to learn that there have been many developments 🙂
×