Jump to content

opmo

Administrators
  • Posts

    2,901
  • Joined

  • Last visited

Reputation Activity

  1. Like
    opmo reacted to AM in conTimbre library + pitchbend   
    dear all
     
    conTimbre-library works (in the next update) perfect with TUNING  (midi-pitchbend) and PAN now. thanx to thomas hummel and janusz!
    here are some simple sound examples...
     
    ct-micro+pan2.aiff
    ct-micro+pan3.aiff
    ct-micro+pan.aiff
    ct-micro+pan4.aiff
  2. Like
    opmo got a reaction from Stephane Boussuge in Opusmodus 1.3.24828   
    – Fixed:
    Removed AllNotesOff in Live Coding Instrument sequence-loop. 

    – Documentation updates.
     
    Finally the Live Coding Instrument is working as it should, no more notes off while waiting. 🙂

    Best wishes,
    Janusz
  3. Thanks
    opmo got a reaction from JulioHerrlein in Request: make-omn   
    Implemented in 1.3.24622
  4. Like
    opmo got a reaction from Stephane Boussuge in changing pan in every event   
    Example with time PAN:
    (def-score pan-test2            (:key-signature 'atonal                :time-signature '(4 4)              :tempo 60)   (instr    :omn '(h c4 d4 e4 f4 g4 a4 b4)    :tuning '(.5 .33 0 -.5 0 .5 0 0)    :pan (gen-controller 7/4 (gen-sine 12 7 1) :time '(1/8 1/4 1/8 1/16))    :channel 1    :program 'violin    :sound 'gm)) or
    (def-score pan-test3            (:key-signature 'atonal                :time-signature '(4 4)              :tempo 60)   (instr    :omn '(h c4 d4 e4 f4 g4 a4 b4)    :tuning '(.5 .33 0 -.5 0 .5 0 0)    :pan '((:desc-asc 127 0 1/32 2)           (:asc 34 127 1/32 2) (127 1) (0 1))    :channel 1    :program 'violin    :sound 'gm))  
    Tell Thomas Kummel to make a Kontakt player version.
  5. Like
    opmo reacted to AM in conTimbre library + pitchbend   
    I got a trial version of the new conTimbre-player-maxpatch (from thomas hummel), now the opusmodus-tuning also works well in conTimbre.
    I think it will be in the next update ... 🙂
     
    ...i like it more in cents then in float...
    (defun cents-to-tuning (centlist) (a*x 0.01 centlist)) (cents-to-tuning '(-14 +50 5)) => (-0.14 0.5 0.049999997)  
  6. Like
    opmo reacted to loopyc in Opusmodus Vs. Symbolic Composer   
    oneder, I wrote Peter Stone around that time, and he stated that he was very busy on a project(s) and would update at some time in future but DID take the time to assist me.
     
    He has been at this a long time (my original copy of SCOM I have been upgrading from was purchased for an Atari in the early 90's!), and he has always replied to my emails over that long period...but I imagine SCOM is not necessarily 'in demand' such to be a priority from a marketing standpoint i.e the website.
     
    If you need support, write him directly... he has always presented himself to me as a professional and a gentleman, and has maintained SCOM for decades now... just appears to have other areas of his life he is fully committed to right now ;-)
  7. Like
    opmo reacted to Stephane Boussuge in A few sound-set related issues   
    Some SoundBanks like XSample chamber Ensemble use two Keyswitch.
     
    i attach here my soundset for EWSO, i use them every days. i never share them because they are sometimes incomplete  but could help you...
     
    SB.
     
    EWSOSoundsetSB.zip
  8. Like
    opmo got a reaction from spuki in Strange behaviour with function reverse?   
    REVERSE and NREVERSE are Common Lisp functions and are destructive.
    The function you need to use is GEN-RETROGRADE
    (setf left-lengths (gen-retrograde lengths-rests))  
    seed - an integer or nil. An integer ensures the same result each time the code is evaluated.
    The seed number is the random state number.

    More here:
     
     
    LISP - destructive and non-destructive constructs
    STACKOVERFLOW.COM What is the correct definition of destructive and non-destructive constructs in LISP (or in general). I have tried to search for the actual meaning but I have only found a lot of usage of these terms  
  9. Like
    opmo reacted to Rangarajan in Adding a new file to workspace   
    Hi,
    Here is a suggestion. When I add a new file to an existing workspace, the IDE creates that file and adds it to the workspace correctly, but in addition, it would be better (I feel) to make the new file the active file. At present, the file switching is not taking place. I guess you would have a valid reason for that behaviour, but I personally would prefer to automatically switch to the new (empty) file.
     
    Regards,
    Rangarajan
  10. Thanks
    opmo got a reaction from JulioHerrlein in Mixing chord definition in Snippets ... (?)   
    The correct omn grammar:
    '(h g3f4b4db5 (c4 maj7))  
  11. Thanks
    opmo got a reaction from JulioHerrlein in Parsimonious Voice Leading (again): attempts to provide an algorithm   
    What you expect it is not a closes path. As you can see the first chord in the sequence is b3eb5g3.
     
    There are two option you can use to get the result you are looking for:
     
    1. start chord
    (closest-path '(b3eb5g3 cs6e7gs3 b4f5g6 f7e5c2 d4f7e4 gs7e2a8) :start 'b4eb4g4)  
    2. ambitus-chord values
    (closest-path '(b3eb5g3 cs6e7gs3 b4f5g6 f7e5c2 d4f7e4 gs7e2a8) :ambitus-chord 11) @AM  example is another good solution.
  12. Like
    opmo got a reaction from torstenanders in Opusmodus 1.3.24805   
    1.3.24805 
     
    – New functions:
     closest-path  comparative-closest-path  relative-closest-path  
    – Changes:
     CHORD-CLOSEST-PATH renamed to COMPARATIVE-CLOSEST-PATH.
     CHORD-RELATIVE-PATH renamed to RELATIVE-CLOSEST-PATH.
     A new keyword :lc (live coding) added to PS function.
     The default DEF-UNFOLD-SET set name renamed to om.
    :variant and :relative keywords removed from HARMONIC-PROGRESSION function.
     
    – Fixed:
     HARMONIC-PROGRESSION
     HARMONIC-PATH
     PITCH-VARIANT
     PITCH-ROW 
     
    – Documentation updates.
    – 'Quick Start' workspace update.
     
     
    VOICE LEADING FUNCTIONS
     
    CLOSEST-PATH
     
    The function CLOSEST-PATH returns a series of chords taking the closest path to the previous chord.
     
    (closest-path '(b4g4e4c4 c5a4e4f4 b4a4f4d4 b4g4e4d4))
    (closest-path '(c4e4g4 c5e5a5 e5fs5a5b5 d5f5bb5d6 g4c5d5f5))  

     
    (closest-path '(c4e4g4 c5e5a5 e5fs5a5b5 d5f5bb5d6 g4c5d5f5)               :start 'c3eb4f5d5)  
     

     
    (closest-path '(g5 cs3f3bb3gs4c5d5 fs5 a5b5eb6e6g2 cs3f3bb3gs4                 c5 d5fs5a5b5 eb6e6g2cs3 f3 bb3gs4c5 d5fs5a5                 b5eb6e6g2cs3f3 bb3 gs4c5d5fs5 a5b5 eb6e6g2cs3f3                 bb3gs4c5d5 fs5 a5b5eb6e6g2cs3 f3bb3gs4 c5                 d5fs5a5b5 eb6 e6g2cs3f3))  

     
    (closest-path '(g5 cs3f3bb3gs4c5d5 fs5 a5b5eb6e6g2 cs3f3bb3gs4                 c5 d5fs5a5b5 eb6e6g2cs3 f3 bb3gs4c5 d5fs5a5                 b5eb6e6g2cs3f3 bb3 gs4c5d5fs5 a5b5 eb6e6g2cs3f3                 bb3gs4c5d5 fs5 a5b5eb6e6g2cs3 f3bb3gs4 c5                 d5fs5a5b5 eb6 e6g2cs3f3)               :start 'c3eb4f5d6)  

     
    (closest-path '((eb3f3a3 f3a3b3 g3bb3cs4 e3g3bb3)                 (g4bb4cs5 bb4cs5e5 b4eb5f5 a4b4eb5)                 (b3eb4f4 eb4f4a4 e4fs4bb4 c4e4fs4)))  

    (closest-path '((eb3f3a3 f3a3b3 g3bb3cs4 e3g3bb3)                 (g4bb4cs5 bb4cs5e5 b4eb5f5 a4b4eb5)                 (b3eb4f4 eb4f4a4 e4fs4bb4 c4e4fs4)))               :start '(c3eb4 f5d5 eb4f5))  

     
     
     
     
    COMPARATIVE-CLOSEST-PATH
     
    The function COMPARATIVE-CLOSEST-PATH returns a series of chords taking the comparatively closest path to the previous chord, derived from randomising the pitch order of a given chord before the ‘find closest interval’ process.
     
    (comparative-closest-path '(b4g4e4c4 c5a4e4f4 b4a4f4d4 b4g4e4d4))
     
     
    Etc…
     
    (comparative-closest-path '(c4e4g4 c5e5a5 e5fs5a5b5 d5f5bb5d6 g4c5d5f5))  

     
    Etc…
     
     
    (comparative-closest-path '(c4e4g4 c5e5a5 e5fs5a5b5 d5f5bb5d6 g4c5d5f5)                           :start 'c3eb4f5d5)  

     
    Etc…
     
    (comparative-closest-path '(g5 cs3f3bb3gs4c5d5 fs5 a5b5eb6e6g2 cs3f3bb3gs4                             c5 d5fs5a5b5 eb6e6g2cs3 f3 bb3gs4c5 d5fs5a5                             b5eb6e6g2cs3f3 bb3 gs4c5d5fs5 a5b5 eb6e6g2cs3f3                             bb3gs4c5d5 fs5 a5b5eb6e6g2cs3 f3bb3gs4 c5                             d5fs5a5b5 eb6 e6g2cs3f3))  

     
    Etc…
     
    (comparative-closest-path '(g5 cs3f3bb3gs4c5d5 fs5 a5b5eb6e6g2 cs3f3bb3gs4                             c5 d5fs5a5b5 eb6e6g2cs3 f3 bb3gs4c5 d5fs5a5                             b5eb6e6g2cs3f3 bb3 gs4c5d5fs5 a5b5 eb6e6g2cs3f3                             bb3gs4c5d5 fs5 a5b5eb6e6g2cs3 f3bb3gs4 c5                             d5fs5a5b5 eb6 e6g2cs3f3)                           :start 'c3eb4f5d6)  

     
    Etc...
     
    (comparative-closest-path '((eb3f3a3 f3a3b3 g3bb3cs4 e3g3bb3)                             (g4bb4cs5 bb4cs5e5 b4eb5f5 a4b4eb5)                             (b3eb4f4 eb4f4a4 e4fs4bb4 c4e4fs4)))  

     
    Etc…
     
    (comparative-closest-path '((eb3f3a3 f3a3b3 g3bb3cs4 e3g3bb3)                             (g4bb4cs5 bb4cs5e5 b4eb5f5 a4b4eb5)                             (b3eb4f4 eb4f4a4 e4fs4bb4 c4e4fs4))                           :start '(c3eb4 f5d5 eb4f5))  

     
     
    Etc…
     
    With seed and 4 results:
    (gen-eval 4 '(comparative-closest-path               '(b4g4e4c4 c5a4e4f4 b4a4f4d4 b4g4e4d4)               :start '(c3c4c5c5)) :seed 23)  

     
     
     
     
     
    RELATIVE-CLOSEST-PATH
     
    The function RELATIVE-CLOSEST-PATH generates cartesian series of intervals form a given chord. It then selects randomly the relative closest path (transition) to the previous chord.
     
    (relative-closest-path '(b4g4e4c4 c5a4e4f4 b4a4f4d4 b4g4e4d4))  


     
    Etc…
     
    (relative-closest-path '(c4e4g4 c5e5a5 e5fs5a5b5 d5f5bb5d6 g4c5d5f5))  

     
    Etc…
     
    (relative-closest-path '(c4e4g4 c5e5a5 e5fs5a5b5 d5f5bb5d6 g4c5d5f5)                        :start 'c3eb4f5d5)  

     
    Etc…
     
    (relative-closest-path '(g5 cs3f3bb3gs4c5d5 fs5 a5b5eb6e6g2 cs3f3bb3gs4                          c5 d5fs5a5b5 eb6e6g2cs3 f3 bb3gs4c5 d5fs5a5                          b5eb6e6g2cs3f3 bb3 gs4c5d5fs5 a5b5 eb6e6g2cs3f3                          bb3gs4c5d5 fs5 a5b5eb6e6g2cs3 f3bb3gs4 c5                          d5fs5a5b5 eb6 e6g2cs3f3))  

     
    Etc…
     
    (relative-closest-path '(g5 cs3f3bb3gs4c5d5 fs5 a5b5eb6e6g2 cs3f3bb3gs4                          c5 d5fs5a5b5 eb6e6g2cs3 f3 bb3gs4c5 d5fs5a5                          b5eb6e6g2cs3f3 bb3 gs4c5d5fs5 a5b5 eb6e6g2cs3f3                          bb3gs4c5d5 fs5 a5b5eb6e6g2cs3 f3bb3gs4 c5                          d5fs5a5b5 eb6 e6g2cs3f3)                        :start 'c3eb4f5d6)  

     
    Etc…
     
    (relative-closest-path '((eb3f3a3 f3a3b3 g3bb3cs4 e3g3bb3)                          (g4bb4cs5 bb4cs5e5 b4eb5f5 a4b4eb5)                          (b3eb4f4 eb4f4a4 e4fs4bb4 c4e4fs4)))  

     
    Etc…
     
    (relative-closest-path '((eb3f3a3 f3a3b3 g3bb3cs4 e3g3bb3)                          (g4bb4cs5 bb4cs5e5 b4eb5f5 a4b4eb5)                          (b3eb4f4 eb4f4a4 e4fs4bb4 c4e4fs4))                        :start '(c3eb4 f5d5 eb4f5))  

     
    Etc…
     
    (gen-eval 4 '(relative-closest-path               '(b4g4e4c4 c5a4e4f4 b4a4f4d4 b4g4e4d4)) :seed 542) => ((c4e4g4b4 c4e4f4a4 a3b3d4f4 d4e4g4b4)     (c4e4g4b4 e4f4a4c5 d4f4a4b4 b3e4g4d5)     (g3e4b4c5 e3f4a4c5 d3a4b4f5 d3g4b4e5)     (g3e4b4c5 a3f4c5e5 f3a4b4d5 d3e4g4b4))  

     
     
     
     
    Live Coding option in PS function

    The :play :lc (live coding) option allows you to send the result of a PS function to ‘Live Coding Instrument’ in a live coding performance.
     
    (progn   (setf    mat '((-w.)          (h. eb4 pp q g3 -e q gs4 mf -s a5 p tie)          (e. a5 -e q bb4 mf -s q cs5 p -s q. e5 mf -e.)          (q cs5 p h. d5 mf -q c5 pp tie)          (h c5 pp h. gs3 -e a4 p<)          (h. fs5 mp q bb3 c5 p e4 mf tie)          (h e4 -e q cs4 mp h d5 p e f4)          (q d4 pp s eb4 < leg g4 < leg bb4 < leg a4 q. cs5 mf -e             3q gs5 > leg fs5 > leg c5 > b4 > leg f4 leg e4)          (t d4 p< leg eb4 < leg g4 f leg bb4 q. a4 marc             t fs4 mf leg gs4 leg e. c5 e b4 t f5 leg e5 leg d5 leg eb5             3q bb5 > a4 > bb5 > e a4 pp stacc -e)))      (setf    v1 (filter-density '(0.7 0.1 0.2 0.0 0.2 0.3 0.3) mat :type :length)    v2 (filter-density '(0.0 0.2 0.0 0.2 0.2 0.4 0.3) mat :type :length)    v3 (filter-density '(0.2 0.7 0.2 0.2 0.2 0.3 0.2) mat :type :length)    v4 (filter-density '(0.0 0.2 0.2 0.7 0.2 0.2 0.7) mat :type :length))      (setf    vn1 (unfold 'om '(t7 dyn bti vn) v1)    vn2 (unfold 'om '(t7 v? dyn bti vn) v2)    vla (unfold 'om '(v? ra dyn bti va) v3)    vlc (unfold 'om '(t-12 t-5 v? a-12-12 dyn bti vc) v4))      (ps 'gm :sq (list vn1 vn2 vla vlc) :tempo 68 :play :lc)   )  
     
     
    QUICK START WORKSPACE

    To update your 'Quick Start' workspace to the latest version you need to delete the 'Quick Start' folder from the Opusmodus directory first.
    After the deletion go to the Opusmodus menu 'Help' and select 'Install Quick Start Workspace'.
    To open the new 'Quick Start' workspace file simply select 'Open Quick Start Workspace' form the 'Help' menu.
     
    That's all for now,
    best wishes,
    Janusz
  13. Thanks
  14. Like
    opmo reacted to Wim Dijkgraaf in Neo-Riemannian approach (Tonnetz, etc.)   
    Have published the initial Tonnetz implementation (really bad code, has to be refactored and has some bugs):
     
    This is my first attempt ... still completely novice in Common Lisp.
     
    https://github.com/willemdijkgraaf/ClTonnetz
     
    Big hug
    Thanks Torsten! Will check it out. I'm fluent in C#, Typescript and Javascript but will check it out anyway.
  15. Like
    opmo reacted to Wim Dijkgraaf in Neo-Riemannian approach (Tonnetz, etc.)   
    A little extra feature to play with:
     
    (apply-tonnetz '(c4 e4 g4) '(l r n s p)) => ((c4 e4 g4) (b3 e4 g4) (b3 d4 g4) (c4 eb4 g4) (b3 eb4 fs4) (b3 d4 fs4))  
    Ability to not include a move in the output (by putting that move between parentheses):
     
    (apply-tonnetz '(c4 e4 g4) '(l r n (s) p)) => ((c4 e4 g4) (b3 e4 g4) (b3 d4 g4) (c4 eb4 g4) (b3 d4 fs4))  
  16. Like
    opmo got a reaction from ydepps in Opusmodus 1.3.24805   
    1.3.24805 
     
    – New functions:
     closest-path  comparative-closest-path  relative-closest-path  
    – Changes:
     CHORD-CLOSEST-PATH renamed to COMPARATIVE-CLOSEST-PATH.
     CHORD-RELATIVE-PATH renamed to RELATIVE-CLOSEST-PATH.
     A new keyword :lc (live coding) added to PS function.
     The default DEF-UNFOLD-SET set name renamed to om.
    :variant and :relative keywords removed from HARMONIC-PROGRESSION function.
     
    – Fixed:
     HARMONIC-PROGRESSION
     HARMONIC-PATH
     PITCH-VARIANT
     PITCH-ROW 
     
    – Documentation updates.
    – 'Quick Start' workspace update.
     
     
    VOICE LEADING FUNCTIONS
     
    CLOSEST-PATH
     
    The function CLOSEST-PATH returns a series of chords taking the closest path to the previous chord.
     
    (closest-path '(b4g4e4c4 c5a4e4f4 b4a4f4d4 b4g4e4d4))
    (closest-path '(c4e4g4 c5e5a5 e5fs5a5b5 d5f5bb5d6 g4c5d5f5))  

     
    (closest-path '(c4e4g4 c5e5a5 e5fs5a5b5 d5f5bb5d6 g4c5d5f5)               :start 'c3eb4f5d5)  
     

     
    (closest-path '(g5 cs3f3bb3gs4c5d5 fs5 a5b5eb6e6g2 cs3f3bb3gs4                 c5 d5fs5a5b5 eb6e6g2cs3 f3 bb3gs4c5 d5fs5a5                 b5eb6e6g2cs3f3 bb3 gs4c5d5fs5 a5b5 eb6e6g2cs3f3                 bb3gs4c5d5 fs5 a5b5eb6e6g2cs3 f3bb3gs4 c5                 d5fs5a5b5 eb6 e6g2cs3f3))  

     
    (closest-path '(g5 cs3f3bb3gs4c5d5 fs5 a5b5eb6e6g2 cs3f3bb3gs4                 c5 d5fs5a5b5 eb6e6g2cs3 f3 bb3gs4c5 d5fs5a5                 b5eb6e6g2cs3f3 bb3 gs4c5d5fs5 a5b5 eb6e6g2cs3f3                 bb3gs4c5d5 fs5 a5b5eb6e6g2cs3 f3bb3gs4 c5                 d5fs5a5b5 eb6 e6g2cs3f3)               :start 'c3eb4f5d6)  

     
    (closest-path '((eb3f3a3 f3a3b3 g3bb3cs4 e3g3bb3)                 (g4bb4cs5 bb4cs5e5 b4eb5f5 a4b4eb5)                 (b3eb4f4 eb4f4a4 e4fs4bb4 c4e4fs4)))  

    (closest-path '((eb3f3a3 f3a3b3 g3bb3cs4 e3g3bb3)                 (g4bb4cs5 bb4cs5e5 b4eb5f5 a4b4eb5)                 (b3eb4f4 eb4f4a4 e4fs4bb4 c4e4fs4)))               :start '(c3eb4 f5d5 eb4f5))  

     
     
     
     
    COMPARATIVE-CLOSEST-PATH
     
    The function COMPARATIVE-CLOSEST-PATH returns a series of chords taking the comparatively closest path to the previous chord, derived from randomising the pitch order of a given chord before the ‘find closest interval’ process.
     
    (comparative-closest-path '(b4g4e4c4 c5a4e4f4 b4a4f4d4 b4g4e4d4))
     
     
    Etc…
     
    (comparative-closest-path '(c4e4g4 c5e5a5 e5fs5a5b5 d5f5bb5d6 g4c5d5f5))  

     
    Etc…
     
     
    (comparative-closest-path '(c4e4g4 c5e5a5 e5fs5a5b5 d5f5bb5d6 g4c5d5f5)                           :start 'c3eb4f5d5)  

     
    Etc…
     
    (comparative-closest-path '(g5 cs3f3bb3gs4c5d5 fs5 a5b5eb6e6g2 cs3f3bb3gs4                             c5 d5fs5a5b5 eb6e6g2cs3 f3 bb3gs4c5 d5fs5a5                             b5eb6e6g2cs3f3 bb3 gs4c5d5fs5 a5b5 eb6e6g2cs3f3                             bb3gs4c5d5 fs5 a5b5eb6e6g2cs3 f3bb3gs4 c5                             d5fs5a5b5 eb6 e6g2cs3f3))  

     
    Etc…
     
    (comparative-closest-path '(g5 cs3f3bb3gs4c5d5 fs5 a5b5eb6e6g2 cs3f3bb3gs4                             c5 d5fs5a5b5 eb6e6g2cs3 f3 bb3gs4c5 d5fs5a5                             b5eb6e6g2cs3f3 bb3 gs4c5d5fs5 a5b5 eb6e6g2cs3f3                             bb3gs4c5d5 fs5 a5b5eb6e6g2cs3 f3bb3gs4 c5                             d5fs5a5b5 eb6 e6g2cs3f3)                           :start 'c3eb4f5d6)  

     
    Etc...
     
    (comparative-closest-path '((eb3f3a3 f3a3b3 g3bb3cs4 e3g3bb3)                             (g4bb4cs5 bb4cs5e5 b4eb5f5 a4b4eb5)                             (b3eb4f4 eb4f4a4 e4fs4bb4 c4e4fs4)))  

     
    Etc…
     
    (comparative-closest-path '((eb3f3a3 f3a3b3 g3bb3cs4 e3g3bb3)                             (g4bb4cs5 bb4cs5e5 b4eb5f5 a4b4eb5)                             (b3eb4f4 eb4f4a4 e4fs4bb4 c4e4fs4))                           :start '(c3eb4 f5d5 eb4f5))  

     
     
    Etc…
     
    With seed and 4 results:
    (gen-eval 4 '(comparative-closest-path               '(b4g4e4c4 c5a4e4f4 b4a4f4d4 b4g4e4d4)               :start '(c3c4c5c5)) :seed 23)  

     
     
     
     
     
    RELATIVE-CLOSEST-PATH
     
    The function RELATIVE-CLOSEST-PATH generates cartesian series of intervals form a given chord. It then selects randomly the relative closest path (transition) to the previous chord.
     
    (relative-closest-path '(b4g4e4c4 c5a4e4f4 b4a4f4d4 b4g4e4d4))  


     
    Etc…
     
    (relative-closest-path '(c4e4g4 c5e5a5 e5fs5a5b5 d5f5bb5d6 g4c5d5f5))  

     
    Etc…
     
    (relative-closest-path '(c4e4g4 c5e5a5 e5fs5a5b5 d5f5bb5d6 g4c5d5f5)                        :start 'c3eb4f5d5)  

     
    Etc…
     
    (relative-closest-path '(g5 cs3f3bb3gs4c5d5 fs5 a5b5eb6e6g2 cs3f3bb3gs4                          c5 d5fs5a5b5 eb6e6g2cs3 f3 bb3gs4c5 d5fs5a5                          b5eb6e6g2cs3f3 bb3 gs4c5d5fs5 a5b5 eb6e6g2cs3f3                          bb3gs4c5d5 fs5 a5b5eb6e6g2cs3 f3bb3gs4 c5                          d5fs5a5b5 eb6 e6g2cs3f3))  

     
    Etc…
     
    (relative-closest-path '(g5 cs3f3bb3gs4c5d5 fs5 a5b5eb6e6g2 cs3f3bb3gs4                          c5 d5fs5a5b5 eb6e6g2cs3 f3 bb3gs4c5 d5fs5a5                          b5eb6e6g2cs3f3 bb3 gs4c5d5fs5 a5b5 eb6e6g2cs3f3                          bb3gs4c5d5 fs5 a5b5eb6e6g2cs3 f3bb3gs4 c5                          d5fs5a5b5 eb6 e6g2cs3f3)                        :start 'c3eb4f5d6)  

     
    Etc…
     
    (relative-closest-path '((eb3f3a3 f3a3b3 g3bb3cs4 e3g3bb3)                          (g4bb4cs5 bb4cs5e5 b4eb5f5 a4b4eb5)                          (b3eb4f4 eb4f4a4 e4fs4bb4 c4e4fs4)))  

     
    Etc…
     
    (relative-closest-path '((eb3f3a3 f3a3b3 g3bb3cs4 e3g3bb3)                          (g4bb4cs5 bb4cs5e5 b4eb5f5 a4b4eb5)                          (b3eb4f4 eb4f4a4 e4fs4bb4 c4e4fs4))                        :start '(c3eb4 f5d5 eb4f5))  

     
    Etc…
     
    (gen-eval 4 '(relative-closest-path               '(b4g4e4c4 c5a4e4f4 b4a4f4d4 b4g4e4d4)) :seed 542) => ((c4e4g4b4 c4e4f4a4 a3b3d4f4 d4e4g4b4)     (c4e4g4b4 e4f4a4c5 d4f4a4b4 b3e4g4d5)     (g3e4b4c5 e3f4a4c5 d3a4b4f5 d3g4b4e5)     (g3e4b4c5 a3f4c5e5 f3a4b4d5 d3e4g4b4))  

     
     
     
     
    Live Coding option in PS function

    The :play :lc (live coding) option allows you to send the result of a PS function to ‘Live Coding Instrument’ in a live coding performance.
     
    (progn   (setf    mat '((-w.)          (h. eb4 pp q g3 -e q gs4 mf -s a5 p tie)          (e. a5 -e q bb4 mf -s q cs5 p -s q. e5 mf -e.)          (q cs5 p h. d5 mf -q c5 pp tie)          (h c5 pp h. gs3 -e a4 p<)          (h. fs5 mp q bb3 c5 p e4 mf tie)          (h e4 -e q cs4 mp h d5 p e f4)          (q d4 pp s eb4 < leg g4 < leg bb4 < leg a4 q. cs5 mf -e             3q gs5 > leg fs5 > leg c5 > b4 > leg f4 leg e4)          (t d4 p< leg eb4 < leg g4 f leg bb4 q. a4 marc             t fs4 mf leg gs4 leg e. c5 e b4 t f5 leg e5 leg d5 leg eb5             3q bb5 > a4 > bb5 > e a4 pp stacc -e)))      (setf    v1 (filter-density '(0.7 0.1 0.2 0.0 0.2 0.3 0.3) mat :type :length)    v2 (filter-density '(0.0 0.2 0.0 0.2 0.2 0.4 0.3) mat :type :length)    v3 (filter-density '(0.2 0.7 0.2 0.2 0.2 0.3 0.2) mat :type :length)    v4 (filter-density '(0.0 0.2 0.2 0.7 0.2 0.2 0.7) mat :type :length))      (setf    vn1 (unfold 'om '(t7 dyn bti vn) v1)    vn2 (unfold 'om '(t7 v? dyn bti vn) v2)    vla (unfold 'om '(v? ra dyn bti va) v3)    vlc (unfold 'om '(t-12 t-5 v? a-12-12 dyn bti vc) v4))      (ps 'gm :sq (list vn1 vn2 vla vlc) :tempo 68 :play :lc)   )  
     
     
    QUICK START WORKSPACE

    To update your 'Quick Start' workspace to the latest version you need to delete the 'Quick Start' folder from the Opusmodus directory first.
    After the deletion go to the Opusmodus menu 'Help' and select 'Install Quick Start Workspace'.
    To open the new 'Quick Start' workspace file simply select 'Open Quick Start Workspace' form the 'Help' menu.
     
    That's all for now,
    best wishes,
    Janusz
  17. Like
    opmo got a reaction from JulioHerrlein in Opusmodus 1.3.24805   
    1.3.24805 
     
    – New functions:
     closest-path  comparative-closest-path  relative-closest-path  
    – Changes:
     CHORD-CLOSEST-PATH renamed to COMPARATIVE-CLOSEST-PATH.
     CHORD-RELATIVE-PATH renamed to RELATIVE-CLOSEST-PATH.
     A new keyword :lc (live coding) added to PS function.
     The default DEF-UNFOLD-SET set name renamed to om.
    :variant and :relative keywords removed from HARMONIC-PROGRESSION function.
     
    – Fixed:
     HARMONIC-PROGRESSION
     HARMONIC-PATH
     PITCH-VARIANT
     PITCH-ROW 
     
    – Documentation updates.
    – 'Quick Start' workspace update.
     
     
    VOICE LEADING FUNCTIONS
     
    CLOSEST-PATH
     
    The function CLOSEST-PATH returns a series of chords taking the closest path to the previous chord.
     
    (closest-path '(b4g4e4c4 c5a4e4f4 b4a4f4d4 b4g4e4d4))
    (closest-path '(c4e4g4 c5e5a5 e5fs5a5b5 d5f5bb5d6 g4c5d5f5))  

     
    (closest-path '(c4e4g4 c5e5a5 e5fs5a5b5 d5f5bb5d6 g4c5d5f5)               :start 'c3eb4f5d5)  
     

     
    (closest-path '(g5 cs3f3bb3gs4c5d5 fs5 a5b5eb6e6g2 cs3f3bb3gs4                 c5 d5fs5a5b5 eb6e6g2cs3 f3 bb3gs4c5 d5fs5a5                 b5eb6e6g2cs3f3 bb3 gs4c5d5fs5 a5b5 eb6e6g2cs3f3                 bb3gs4c5d5 fs5 a5b5eb6e6g2cs3 f3bb3gs4 c5                 d5fs5a5b5 eb6 e6g2cs3f3))  

     
    (closest-path '(g5 cs3f3bb3gs4c5d5 fs5 a5b5eb6e6g2 cs3f3bb3gs4                 c5 d5fs5a5b5 eb6e6g2cs3 f3 bb3gs4c5 d5fs5a5                 b5eb6e6g2cs3f3 bb3 gs4c5d5fs5 a5b5 eb6e6g2cs3f3                 bb3gs4c5d5 fs5 a5b5eb6e6g2cs3 f3bb3gs4 c5                 d5fs5a5b5 eb6 e6g2cs3f3)               :start 'c3eb4f5d6)  

     
    (closest-path '((eb3f3a3 f3a3b3 g3bb3cs4 e3g3bb3)                 (g4bb4cs5 bb4cs5e5 b4eb5f5 a4b4eb5)                 (b3eb4f4 eb4f4a4 e4fs4bb4 c4e4fs4)))  

    (closest-path '((eb3f3a3 f3a3b3 g3bb3cs4 e3g3bb3)                 (g4bb4cs5 bb4cs5e5 b4eb5f5 a4b4eb5)                 (b3eb4f4 eb4f4a4 e4fs4bb4 c4e4fs4)))               :start '(c3eb4 f5d5 eb4f5))  

     
     
     
     
    COMPARATIVE-CLOSEST-PATH
     
    The function COMPARATIVE-CLOSEST-PATH returns a series of chords taking the comparatively closest path to the previous chord, derived from randomising the pitch order of a given chord before the ‘find closest interval’ process.
     
    (comparative-closest-path '(b4g4e4c4 c5a4e4f4 b4a4f4d4 b4g4e4d4))
     
     
    Etc…
     
    (comparative-closest-path '(c4e4g4 c5e5a5 e5fs5a5b5 d5f5bb5d6 g4c5d5f5))  

     
    Etc…
     
     
    (comparative-closest-path '(c4e4g4 c5e5a5 e5fs5a5b5 d5f5bb5d6 g4c5d5f5)                           :start 'c3eb4f5d5)  

     
    Etc…
     
    (comparative-closest-path '(g5 cs3f3bb3gs4c5d5 fs5 a5b5eb6e6g2 cs3f3bb3gs4                             c5 d5fs5a5b5 eb6e6g2cs3 f3 bb3gs4c5 d5fs5a5                             b5eb6e6g2cs3f3 bb3 gs4c5d5fs5 a5b5 eb6e6g2cs3f3                             bb3gs4c5d5 fs5 a5b5eb6e6g2cs3 f3bb3gs4 c5                             d5fs5a5b5 eb6 e6g2cs3f3))  

     
    Etc…
     
    (comparative-closest-path '(g5 cs3f3bb3gs4c5d5 fs5 a5b5eb6e6g2 cs3f3bb3gs4                             c5 d5fs5a5b5 eb6e6g2cs3 f3 bb3gs4c5 d5fs5a5                             b5eb6e6g2cs3f3 bb3 gs4c5d5fs5 a5b5 eb6e6g2cs3f3                             bb3gs4c5d5 fs5 a5b5eb6e6g2cs3 f3bb3gs4 c5                             d5fs5a5b5 eb6 e6g2cs3f3)                           :start 'c3eb4f5d6)  

     
    Etc...
     
    (comparative-closest-path '((eb3f3a3 f3a3b3 g3bb3cs4 e3g3bb3)                             (g4bb4cs5 bb4cs5e5 b4eb5f5 a4b4eb5)                             (b3eb4f4 eb4f4a4 e4fs4bb4 c4e4fs4)))  

     
    Etc…
     
    (comparative-closest-path '((eb3f3a3 f3a3b3 g3bb3cs4 e3g3bb3)                             (g4bb4cs5 bb4cs5e5 b4eb5f5 a4b4eb5)                             (b3eb4f4 eb4f4a4 e4fs4bb4 c4e4fs4))                           :start '(c3eb4 f5d5 eb4f5))  

     
     
    Etc…
     
    With seed and 4 results:
    (gen-eval 4 '(comparative-closest-path               '(b4g4e4c4 c5a4e4f4 b4a4f4d4 b4g4e4d4)               :start '(c3c4c5c5)) :seed 23)  

     
     
     
     
     
    RELATIVE-CLOSEST-PATH
     
    The function RELATIVE-CLOSEST-PATH generates cartesian series of intervals form a given chord. It then selects randomly the relative closest path (transition) to the previous chord.
     
    (relative-closest-path '(b4g4e4c4 c5a4e4f4 b4a4f4d4 b4g4e4d4))  


     
    Etc…
     
    (relative-closest-path '(c4e4g4 c5e5a5 e5fs5a5b5 d5f5bb5d6 g4c5d5f5))  

     
    Etc…
     
    (relative-closest-path '(c4e4g4 c5e5a5 e5fs5a5b5 d5f5bb5d6 g4c5d5f5)                        :start 'c3eb4f5d5)  

     
    Etc…
     
    (relative-closest-path '(g5 cs3f3bb3gs4c5d5 fs5 a5b5eb6e6g2 cs3f3bb3gs4                          c5 d5fs5a5b5 eb6e6g2cs3 f3 bb3gs4c5 d5fs5a5                          b5eb6e6g2cs3f3 bb3 gs4c5d5fs5 a5b5 eb6e6g2cs3f3                          bb3gs4c5d5 fs5 a5b5eb6e6g2cs3 f3bb3gs4 c5                          d5fs5a5b5 eb6 e6g2cs3f3))  

     
    Etc…
     
    (relative-closest-path '(g5 cs3f3bb3gs4c5d5 fs5 a5b5eb6e6g2 cs3f3bb3gs4                          c5 d5fs5a5b5 eb6e6g2cs3 f3 bb3gs4c5 d5fs5a5                          b5eb6e6g2cs3f3 bb3 gs4c5d5fs5 a5b5 eb6e6g2cs3f3                          bb3gs4c5d5 fs5 a5b5eb6e6g2cs3 f3bb3gs4 c5                          d5fs5a5b5 eb6 e6g2cs3f3)                        :start 'c3eb4f5d6)  

     
    Etc…
     
    (relative-closest-path '((eb3f3a3 f3a3b3 g3bb3cs4 e3g3bb3)                          (g4bb4cs5 bb4cs5e5 b4eb5f5 a4b4eb5)                          (b3eb4f4 eb4f4a4 e4fs4bb4 c4e4fs4)))  

     
    Etc…
     
    (relative-closest-path '((eb3f3a3 f3a3b3 g3bb3cs4 e3g3bb3)                          (g4bb4cs5 bb4cs5e5 b4eb5f5 a4b4eb5)                          (b3eb4f4 eb4f4a4 e4fs4bb4 c4e4fs4))                        :start '(c3eb4 f5d5 eb4f5))  

     
    Etc…
     
    (gen-eval 4 '(relative-closest-path               '(b4g4e4c4 c5a4e4f4 b4a4f4d4 b4g4e4d4)) :seed 542) => ((c4e4g4b4 c4e4f4a4 a3b3d4f4 d4e4g4b4)     (c4e4g4b4 e4f4a4c5 d4f4a4b4 b3e4g4d5)     (g3e4b4c5 e3f4a4c5 d3a4b4f5 d3g4b4e5)     (g3e4b4c5 a3f4c5e5 f3a4b4d5 d3e4g4b4))  

     
     
     
     
    Live Coding option in PS function

    The :play :lc (live coding) option allows you to send the result of a PS function to ‘Live Coding Instrument’ in a live coding performance.
     
    (progn   (setf    mat '((-w.)          (h. eb4 pp q g3 -e q gs4 mf -s a5 p tie)          (e. a5 -e q bb4 mf -s q cs5 p -s q. e5 mf -e.)          (q cs5 p h. d5 mf -q c5 pp tie)          (h c5 pp h. gs3 -e a4 p<)          (h. fs5 mp q bb3 c5 p e4 mf tie)          (h e4 -e q cs4 mp h d5 p e f4)          (q d4 pp s eb4 < leg g4 < leg bb4 < leg a4 q. cs5 mf -e             3q gs5 > leg fs5 > leg c5 > b4 > leg f4 leg e4)          (t d4 p< leg eb4 < leg g4 f leg bb4 q. a4 marc             t fs4 mf leg gs4 leg e. c5 e b4 t f5 leg e5 leg d5 leg eb5             3q bb5 > a4 > bb5 > e a4 pp stacc -e)))      (setf    v1 (filter-density '(0.7 0.1 0.2 0.0 0.2 0.3 0.3) mat :type :length)    v2 (filter-density '(0.0 0.2 0.0 0.2 0.2 0.4 0.3) mat :type :length)    v3 (filter-density '(0.2 0.7 0.2 0.2 0.2 0.3 0.2) mat :type :length)    v4 (filter-density '(0.0 0.2 0.2 0.7 0.2 0.2 0.7) mat :type :length))      (setf    vn1 (unfold 'om '(t7 dyn bti vn) v1)    vn2 (unfold 'om '(t7 v? dyn bti vn) v2)    vla (unfold 'om '(v? ra dyn bti va) v3)    vlc (unfold 'om '(t-12 t-5 v? a-12-12 dyn bti vc) v4))      (ps 'gm :sq (list vn1 vn2 vla vlc) :tempo 68 :play :lc)   )  
     
     
    QUICK START WORKSPACE

    To update your 'Quick Start' workspace to the latest version you need to delete the 'Quick Start' folder from the Opusmodus directory first.
    After the deletion go to the Opusmodus menu 'Help' and select 'Install Quick Start Workspace'.
    To open the new 'Quick Start' workspace file simply select 'Open Quick Start Workspace' form the 'Help' menu.
     
    That's all for now,
    best wishes,
    Janusz
  18. Like
    opmo reacted to AM in add-rnd-dust to lengths   
    i already did that 🙂
    (defun add-rnd-dust (omnseq &key (span '(0.1)) (seed nil) (quantize '(1 2 3 4 5 6 7 8 9)) (scale 1.0) (tolerance 0.05)) (let ((rhy (omn :length omnseq)) (sp)) (progn (setf rhy (loop with cnt = 0 for i in rhy do (setf sp (nth cnt span)) when (not (null seed)) do (incf seed) when (> i 0) collect (+ i (car (rnd-number 1 0.0 (* i sp) :seed seed))) else collect (- i (car (rnd-number 1 0.0 (* i sp) :seed seed))) when (< cnt (1- (length span))) do (incf cnt))) (make-omn :length (quantize (float-to-ratio rhy :ratio 1/1) quantize :scale scale :tolerance tolerance) :pitch (omn :pitch omnseq) :velocity (omn :velocity omnseq) :articulation (omn :articulation omnseq)))))  
  19. Like
    opmo reacted to AM in add-rnd-dust to lengths   
    an example: 
     
    this is the BASIC-version (without "dust"):
    all mapped in 1/32 - retrograde sorting processes (with GEN-SORT):
    pitch-process from chromatic to 12tone-row (by sort) and from sorted length-values (all 1/32,
    then all 1/16 etc... to more complex/mixed pattern (by sort))
     

     
     
    with this setup:
     

     
     
    the result with some "dust":
    if you you have a look to the span-list above (compare with the new score) you will see:
    no change at the beginning, then more and more randomized (or made flexible).
     

     
  20. Like
    opmo got a reaction from JulioHerrlein in Parsimonious Voice Leading (again): attempts to provide an algorithm   
    Should I change the name to CLOSEST-PATH, VOICE-LEADING or leave as it is 🙂
  21. Like
    opmo got a reaction from JulioHerrlein in Parsimonious Voice Leading (again): attempts to provide an algorithm   
    What you see above is a new revised function.
     
    Examples:
    Now the start is optional.
    (chord-closest-path '(f3d4e5 e3a3gs5)) => (f3e5d4 e5gs3a3) (chord-closest-path '(b3eb5g3 cs6e7gs3 b4f5g6 f7e5c2 d4f7e4 gs7e2a8)) => (g3b3eb5 gs3cs4e5 b3g3f5 c4f3e5 d4e5f3 e5gs3a3) (chord-closest-path '(b3eb5g3 cs6e7gs3 b4f5g6 f7e5c2 d4f7e4 gs7e2a8) :start '(c3eb4f5)) => (g5eb4b2 gs5cs3e4 b2g5f4 c3f4e5 d3e5f4 e5gs4a2) (chord-closest-path '(b4g4e4c4 c5a4e4f4 b4a4f4d4 b4g4e4d4)) => (c4b4e4g4 e4f4c4a4 b3f4d4a4 d4b3e4g4) (chord-closest-path '(b4g4e4c4 c5a4e4f4 b4a4f4d4 b4g4e4d4) :start '(c3eb4f5d6)) => (c3e6g4b5 e6f4c3a5 b2f6d4a5 d4b2e6g5)  
  22. Like
    opmo got a reaction from JulioHerrlein in Parsimonious Voice Leading (again): attempts to provide an algorithm   
    Please check:
    '(f3d4e5 e3a3gs5) (chord-closest-path '(f3d4e5) '(f3d4e5 e3a3gs5)) => (f3e5d4 e5gs3a3) '(b3eb5g3 cs6e7gs3 b4f5g6 f7e5c2 d4f7e4 gs7e2a8) (chord-closest-path '(b3eb5g3) '(b3eb5g3 cs6e7gs3 b4f5g6 f7e5c2 d4f7e4 gs7e2a8)) => (g3b3eb5 gs3cs4e5 b3g3f5 c4f3e5 d4e5f3 e5gs3a3) '(b4g4e4c4 c5a4e4f4 b4a4f4d4 b4g4e4d4) (chord-closest-path '(b4g4e4c4) '(b4g4e4c4 c5a4e4f4 b4a4f4d4 b4g4e4d4)) => (c4b4e4g4 e4f4c4a4 b3f4d4a4 d4b3e4g4) yours,
    Janusz
  23. Like
    opmo got a reaction from Stephane Boussuge in Parsimonious Voice Leading (again): attempts to provide an algorithm   
    It is not hard if we look for strict result e.i. smallest total without thinking about parallel movement etc...
    Here is the result of our example (strict):
     
    (chord-closest-path '(b4g4e4c4) '(b4g4e4c4 c5a4e4f4 b4a4f4d4 b4g4e4d4)) c-c = 0
    e-e = 0
    g-f = 2
    b-a = 2
    total 4
    etc...
     
  24. Like
    opmo got a reaction from Stephane Boussuge in Parsimonious Voice Leading (again): attempts to provide an algorithm   
    I always try to think of optional rules but I could add strict one as well 🙂
  25. Like
    opmo got a reaction from JulioHerrlein in Parsimonious Voice Leading (again): attempts to provide an algorithm   
    It is not hard if we look for strict result e.i. smallest total without thinking about parallel movement etc...
    Here is the result of our example (strict):
     
    (chord-closest-path '(b4g4e4c4) '(b4g4e4c4 c5a4e4f4 b4a4f4d4 b4g4e4d4)) c-c = 0
    e-e = 0
    g-f = 2
    b-a = 2
    total 4
    etc...
     
×
×
  • Create New...

Important Information

Terms of Use Privacy Policy