Jump to content

Stephane Boussuge

Moderators
  • Posts

    1,070
  • Joined

  • Last visited

Reputation Activity

  1. Like
    Stephane Boussuge reacted to AM in a little markov game   
    ;;; little markov-game: ;;; gen-markov => analyze the output => produce new rules => gen-markov ;;; make x-times the list-plot and you will see how the system most of the times ;;; comes to a "constant STATE" (defun self-analyzing/generating-markov (transitions size generations) (loop repeat generations with list = (gen-markov-from-transitions transitions :size size :start 1) append (setq list (gen-markov-from-transitions (gen-markov-transitions list) :size size :start (car (last list)))))) ;;; a "neutral table with 4 values" (setf transition-table '((1 (1 1) (2 1) (3 1) (4 1)) (2 (1 1) (2 1) (3 1) (4 1)) (3 (1 1) (2 1) (3 1) (4 1)) (3 (1 1) (2 1) (3 1) (4 1)) (4 (1 1) (2 1) (3 1) (4 1)))) ;;; evaluate a few times and have a look on the output (list-plot (self-analyzing/generating-markov transition-table 20 20) :point-radius 0 :style :fill)  
  2. Like
    Stephane Boussuge reacted to opmo in Opusmodus version 1.2   
    Opusmodus - made as simple as possible, but not simpler
     
    We are very excited to announce our biggest update yet Opusmodus version 1.2. The last few months have been a marathon and a sprint at the same time knowing all of you are waiting patiently wanting to see the next step in functionality, bug fixes etc…
     
    Below you will find the list of the new algorithms, tools, notation layout and fixes.
     
    For this release our main goal was to improve the notation display especially the length grouping. To achieve this we have developed an entirely new rewrite-lengths algorithm that improves: the notation display, a better tuplets display, time signature grouping, as well as an open-end bracket for incomplete tuplets.
     
    We also restructured the System Library, added new Developer documents, a few more score examples, new attributes (articulations) and a handful of new functions.
     
    I like to thank especially Achim Bornhoeft, Stephane Boussuge and Andre Meier for their contribution to the new function set.
     
    REWRITE-LENGTHS
     
    The REWRITE-LENGTHS system is now the default for notation display (snippet) and in DEF-SCORE macro. Composer intent (notation) can be achieved by setting the REWRITE-LENGTHS to Nil in the DEF-SCORE options: :rewrite-lengths nil 
     
    New Opusmodus Developer documents for anyone wishing to extend their application functionality - this section will expand with time.
     
    New DEF-SCORE optional (global):
     
    rewrite-lengths            NIL or T. The default is T
    merge-rests                NIL or T. The default is T.
    ignore—velocity            NIL or T. The default is NIL.
    ignore-tempo               NIL or T. The default is NIL.
    octave-shift               NIL, T or range i.e. (c2 c6). The default is Nil.
    accidentals                :all :natural or :cautionary. The default is :natural.
    flexible-clef              NIL or T. The default is NIL.
    ignore-time-signature      NIL or T. The default is NIL.
     
     
    New functions:
     
    CHORD-RELATIVE-PATH
     
    (chord-relative-path '(c3eb4f5d5) '(c4eb4e4g4fs4ds5))
    => (c3fs3eb4g4eb5e5)
     
    (chord-relative-path
     '(c3eb4f5d5)
     '(c4cs4d4g4 cs4d4fs4 c4eb4e4g4 c4d4eb4f4 e4f4g4a4))
    => (c3cs4d5g5 cs3fs4d5 eb3e3c4g5 eb3f3c4d5 e3g3a3f5)
     
    (chord-relative-path
     '(c3eb4f5d6)
     '(q c4cs4d4g4 s c4 cs4 d4 fs4 q c4eb4e4g4 c4d4eb4f4 e4f4g4a4)
     :ambitus-chord 13)
    => (q d4cs4c5g4 s c3 cs3 d3 fs3 q c3eb3e3g3 c3d3eb3f3 e3f3g3a3)
     
    (chord-relative-path
     '(c3eb4f5d6)
     '((c4cs4d4g4 c4cs4d4fs4) (c4eb4e4g4 c4d4eb4f4 e4f4g4a4)))
    => ((g2c4cs5d6 d2cs4c5fs6) (eb3c4g5e6 f3eb4d5c6 e3f4g5a5))
     
    (chord-relative-path
     '((c3eb4f5d6) (cs3d4e4f5))
     '((e c4cs4d4g4 c4cs4d4fs4) (s c4eb4e4g4 c4d4eb4f4 e4f4g4a4)))
    => ((e d3g4c5cs6 d3cs4c5fs6) (s eb3e4g4c5 eb3d4c5f5 a3e4f5g5))
     
     
    CHORD-CLOSEST-PATH
     
    (chord-closest-path '(c3eb4f5d5) '(c4eb4e4g4fs4ds5))
    => (c3eb4fs5eb5e4g4)
     
    (chord-closest-path
     '(c3eb4f5d5)
     '(c4cs4d4g4 cs4d4fs4 c4eb4e4g4 c4d4eb4f4 e4f4g4a4))
    => (c3d4g5cs5 cs3d4fs5 c3eb4g5e4 c3eb4f5d4 a2e4f5g4)
     
    (chord-closest-path
     '(c3eb4f5d5)
     '(q c4cs4d4g4 s c4 cs4 d4 fs4 q c4eb4e4g4 c4d4eb4f4 e4f4g4a4))
    => (q c3d4g5cs5 s c3 cs3 d3 fs3 q g3c4eb4e4 f3c4eb4d4 f3a3e4g4)
     
    (chord-closest-path
     '((c3eb4f5d6) (cs3d4e4f5))
     '((e c4cs4d4g4 c4cs4d4fs4) (s c4eb4e4g4 c4d4eb4f4 e4f4g4a4)) :seed 43)
    => ((e c3d4g5cs6 c3d4fs5cs6) (s c3eb4e4g5 c3eb4f4d5 a2e4f4g5))
     
     
    SECTION-TO-BINARY
     
    (section-to-binary '(0 1 3 5 8 9 11))
    => (1 1 0 1 0 1 0 0 1 1 0 1)
     
    (section-to-binary '((0 1 3) (5 8 9 11)))
    => ((1 1 0 1) (0 0 0 0 0 1 0 0 1 1 0 1))
     
     
    BINARY-TO-SECTION
     
    (binary-to-section '(1 1 0 1 0 1 0 0 1 1 0 1))
    => (0 1 3 5 8 9 11)
     
    (binary-to-section '((1 1 0 1) (0 0 0 0 0 1 0 0 1 1 0 1)))
    => ((0 1 3) (5 8 9 11))
     
     
    SECTION-TO-TIMELINE
     
    (section-to-timeline
     '(0 1 2 5 6 7 8 10 11 15 16 23 24 25 27 28 29 30 31 32 33 36 37))
    => (xxx--xxxx-xx---xx------xxx-xxxxxxx--xx)
     
     
    TIMELINE-TO-SECTION
     
    (timeline-to-section '(xxx--xxxx-xx---xx------xxx-xxxxxxx--xx))
    => (0 1 2 5 6 7 8 10 11 15 16 23 24 25 27 28 29 30 31 32 33 36 37)
     
     
    DO-TIMELINE additional timeline format - compressed.
     
    (do-timeline
       '(              ;   5    10   15   20
                       ;   |    |    |    |
         clarinet3     t
         contrabassoon (xxxxxxxxxxxxxxxx-x---xxx)
         horn3         (xx---xxxxxxxxxxxxxxxxxxx)
         trumpet3      (xxxxxxxxxxxxxxxxxxxxxxxx)
         violinx       nil
         violin2       (xxxxxx----xxxxxxx-xx-xxx)
         viola         (xxxxxxxxxx-x-xxxxxxxxxxx)
         violoncello   (xx-xx-xxxxxxxxxxxx—x-x--)
         contrabass    (xxx-xx-xxxxxx-x-x-xxxxxx)
         ) '(pitch-variant x :variant 'i))
     
     
    GEN-TRANSITION
     
    (gen-transition 1 10 10 1)
    => (1.0 2.0 3.0 4.0 5.0 6.0 7.0 8.0 9.0 10.0)
     
    (gen-transition 0.5 11.2 10 1)
    => (0.5 1.6888889 2.8777778 4.0666666 5.2555556
        6.4444447 7.633333 8.822223 10.011111 11.2)
     
    (list-plot
     (gen-transition 0 10 50 0.7) 
     :zero-based t :point-radius 1.5 :join-points t)
     
    (list-plot 
     (gen-transition 0 10 50 1.3) 
     :zero-based t :point-radius 1.5 :join-points t)
     
    (list-plot 
     (gen-transition '(0 1 2) '(10 11 12) 10 '(1.5 1 0.5)) 
     :zero-based t :point-radius 1.5 :join-points t)
     
    (list-plot 
     (gen-transition '(2 1 0) '(10 11 12) 10 '(1.5 0.5)) 
     :zero-based t :point-radius 1.5 :join-points t)
     
    (list-plot 
     (gen-transition '(0 1) '(10 30) 50 1 :rounded t)
     :zero-based t :point-radius 1.5 :join-points t)
     
    (chordize-list 
     (gen-transition '(0 4 7) '(11 22 33) 10 1
                     :chords t :rounded t :type :pitch))
    => (c4e4g4 cs4fs4bb4 d4gs4cs5 e4bb4e5 f4c5g5
        fs4d5a5 g4e5c6 a4fs5eb6 bb4gs5fs6 b4bb5a6)
     
    (chordize-list 
     (gen-transition '(0 4 7) '(11 22 33) 10 .5
                     :chords t :rounded t :type :pitch))
    => (c4e4g4 e4bb4e5 f4c5g5 fs4d5bb5 g4e5c6
        gs4f5d6 a4g5e6 bb4gs5fs6 bb4a5gs6 b4bb5a6)
     
    (chordize-list  
     (gen-transition '(0 4 7) '(11 22 33) 10 2
                     :chords t :rounded t :type :pitch))
    => (c4e4g4 c4e4g4 cs4f4gs4 cs4fs4bb4 d4gs4c5
        eb4bb4eb5 f4c5g5 g4eb5b5 a4fs5e6 b4bb5a6)
     
    (chordize-list  
     (gen-transition '(0 4 7) '(11 22 33) 10 '(1.5 1 0.5)
                     :chords t :rounded t :type :pitch))
    => (c4e4g4 c4fs4e5 cs4gs4g5 d4bb4bb5 eb4c5c6
        f4d5d6 fs4e5e6 gs4fs5fs6 a4gs5gs6 b4bb5a6)
     
     
    GEN-SYMMETRICAL
     
    (gen-symmetrical 24 '(1 2 3 4 5 6))
    => (5 2 6 2 3 2 1 5 2 3 5 4 4 5 3 2 5 1 2 3 2 6 2 5)
     
    (gen-symmetrical 24 '(1 2 3 4 5 6) :repeat t)
    => (1 1 3 1 1 2 4 6 4 5 5 2 2 5 5 4 6 4 2 1 1 3 1 1)
     
    (gen-symmetrical '(6 8 12) '(1/16 1/32 1/8))
    => ((1/8 1/32 1/8 1/8 1/32 1/8)
        (1/16 1/8 1/16 1/32 1/32 1/16 1/8 1/16)
        (1/8 1/32 1/16 1/32 1/16 1/32 1/32
             1/16 1/32 1/16 1/32 1/8))
     
     
    GEN-MULTISYMMETRICAL
     
    (gen-multisymmetrical 8 '(1 2 3 4 5 6))
    => (2 3 2 1 1 2 3 2 4 5 2 5 5 2 5 4 1 5 4 6 6 4
          5 1 6 5 3 1 1 3 5 6 6 5 3 1 1 3 5 6 1 5 4 6
          6 4 5 1 4 5 2 5 5 2 5 4 2 3 2 1 1 2 3 2)
     
    (gen-multisymmetrical 8 '(1 2 3 4 5 6) :repeat t)
    => (1 1 2 4 4 2 1 1 6 4 5 5 5 5 4 6 2 2 2 5 5 2
          2 2 5 5 5 3 3 5 5 5 5 5 5 3 3 5 5 5 2 2 2 5
          5 2 2 2 6 4 5 5 5 5 4 6 1 1 2 4 4 2 1 1)
     
     
    GEN-SIEVE
     
    (gen-sieve '(c4 g7) '(2 1))
    => (0 2 3 5 6 8 9 11 12 14 15 17 18 20 21 23
          24 26 27 29 30 32 33 35 36 38 39 41 42)
     
    (gen-sieve '(c4 g7) '(2 1) :type :pitch)
    => (c4 d4 eb4 f4 fs4 gs4 a4 b4 c5 d5 eb5 f5 fs5 gs5
        a5 b5 c6 d6 eb6 f6 fs6 gs6 a6 b6 c7 d7 eb7 f7 fs7)
     
    (gen-sieve '((c4 g7) (c1 g7)) '((2 1 12) (3 5)))
    => (-36 -33 -28 -25 -20 -17 -12 -9 -4 -1 0 2 3 4
            7 12 15 17 18 20 23 28 30 31 32 33 36 39)
     
    (gen-sieve '((c4 g7) (c1 g7)) '((2 1 12) (3 5)) :type :pitch)
    => (c1 eb1 gs1 b1 e2 g2 c3 eb3 gs3 b3 c4 d4 eb4 e4 g4
           c5 eb5 f5 fs5 gs5 b5 e6 fs6 g6 gs6 a6 c7 eb7)
     
    (gen-sieve '(violin (c1 g6) piccolo) '((2 1 12) (3 5) (3 6))
               :type :interval)
    => (3 5 3 5 3 5 3 4 1 1 1 1 5 3 3 2 1 2 5 1 2 1 1 2 1 2 1 2 6 1 2 1 5)
     
     
    GEN-DYNAMIC
     
    (gen-dynamic '(3 5 4 4 5) '(pp f ff mf f))
    => (pp< < < f< < < < < ff> > > > mf< < < < f f f f f)
     
    Avec valeur de vélocité de fin optionelle:
     
    (gen-dynamic '(3 5 4 4 5) '(pp f ff mf f) 'p)
    => (pp< < < f< < < < < ff> > > > mf< < < < f> > > > p)
     
    (gen-dynamic '(3 5 4 4 5) '(pp f ff mf f) '>)
    => (pp< < < f< < < < < ff> > > > mf< < < < f> > > > >)
     
    (gen-dynamic '(3 5 4 4 5) '(pp f ff mf f) '<)
    => (pp< < < f< < < < < ff> > > > mf< < < < f< < < < <)
     
    (gen-dynamic '((3 5) (4 4) (5 3)) '((pp f) (p mf) (f p)))
    => ((pp< < < f> > > > >) (p< < < < mf< < < <) (f> > > > > p p p))
     
    (gen-dynamic '((3 5) (4 4) (5 3)) '((pp f) (p mf) (f p)) 'f)
    => ((pp< < < f> > > > >) (p< < < < mf< < < <) (f> > > > > p< < f))
     
    (gen-dynamic '((3 5) (4 4) (5 3)) '((pp f) (p mf) (f p)) '<)
    => (pp< < < f< < < < < ff> > > > mf< < < < f< < < < <)
     
     
    VELOCITY-TO-DYNAMIC
     
    (velocity-to-dynamic '(p p f f f mp mp f f))
    => (p< < f> > > mp< < f f)
     
    (velocity-to-dynamic '(p p f f f mp mp f f) :end '>)
    => (p< < f> > > mp< < f> >)
     
    (velocity-to-dynamic '(p p f f f mp mp f f) :end 'p)
    => (p< < f> > > mp< < f> p)
     
    (velocity-to-dynamic '((p p f f f mp mp f ff) (f mp mp f f f)))
    => ((p< < f> > > mp< < f< ff>) (f> mp< < f f f))
     
    (velocity-to-dynamic '((p p f f f mp mp f ff) (f mp mp f f f))
                         :section 0)
    => ((p< < f> > > mp< < f< ff) (f mp mp f f f))
     
     
    GEN-LENGTH-CONSTANT
     
    (gen-length-constant '(1 2 -2 5) 'h)
    => (1/20 1/10 -1/10 1/4)
     
    (gen-length-constant '(1 2 -2 5) 'h :rnd-order t)
    => (1/4 1/10 1/20 -1/10)
     
    (gen-length-constant '(1 2 -2 5) 'h :rnd-rest-order t)
    => (-1/20 1/10 1/10 1/4)
     
    (gen-length-constant '(1 2 -2 5) 'h
                         :rnd-order t
                         :rnd-rest-order t)
    => (-1/4 1/10 1/10 1/20)
     
    (gen-length-constant
     (gen-loop 12 '(3 -2 5)) 'h
     :rnd-order t
     :rnd-rest-order t)
    => ((-3/20 1/10 1/4) (1/10 -3/20 1/4) (3/20 -1/10 1/4)
        (-1/4 3/20 1/10) (-1/4 1/10 3/20) (1/10 1/4 -3/20)
        (3/20 -1/4 1/10) (1/4 -3/20 1/10) (-1/10 3/20 1/4)
        (1/4 3/20 -1/10) (-3/20 1/10 1/4) (1/4 -3/20 1/10))
     
     
    GEN-LENGTH-DENSITY
     
    (gen-length-density 2)
    => ((-1/16 -1/16 -1/16 1/16 1/16 1/16
         1/16 -1/16 -1/16 -1/16 -1/16 -1/16) 
        (-1/16 -1/16 1/16 -1/16 1/16 -1/16
         1/16 -1/16 1/16 -1/16 1/16 1/16))
     
    (gen-length-density 2 :omn t)
    ((s = - = = - = - - = - =) (s - - - - = - = = = - -))
     
    (gen-length-density 2 :level 12 :density 10 :type 2)
    => ((5/16 3/16 1/4) (3/16 1/2 1/16))
     
    (gen-length-density 2 :level 12 :density 48 :type 2)
    => ((3/16 1/16 1/16 1/16 1/16 1/16 1/16 3/16)
        (1/8 1/16 1/8 1/16 1/8 1/16 3/16))
     
    (gen-length-density 2 :level 12 :density 85 :type 2)
    => ((1/16 1/16 1/8 1/8 1/16 1/16 1/16 1/16 1/16 1/16)
        (1/16 1/16 1/16 1/8 1/16 1/16 1/16 1/16 1/16 1/16 1/16))
     
    (gen-length-density 2 :level 24 :density '(1 100) :type 2 :omn t)
    => ((w.) (s = = = = = = = = = = = = = = = = = = = = = = =))
     
    (gen-length-density 2 :level 8 :ratio 'e :density '(25 75) :type '(2 1))
    => ((3/8 5/8) (1/8 1/8 -1/8 1/8 1/8 1/8 1/8 1/8))
     
    SPLIT-TUPLET-LENGTHS
     
    (split-tuplet-lengths
     '(5/32 1/32 1/4 1/32 5/32 1/20 1/10 1/10 3/32 1/32 5/32 1/16 1/32))
    => ((5/32 1/32 1/4 1/32 5/32) (1/20 1/10 1/10)
        (3/32 1/32 5/32 1/16 1/32))
     
    (split-tuplet-lengths
    '((3/5 1/10 1/20 3/10 1/16 1/8 1/4 2/5 1/2)
      (3/20 9/20 1/8 1/4 1/8 7/20 1/5 11/20)))
    => ((3/5 1/10 1/20 3/10) (1/16 1/8 1/4) (2/5) (1/2)
        (3/20 9/20) (1/8 1/4 1/8) (7/20 1/5 11/20))
     
    All new function documentation as usual you’ll find in the Utilities System Library.
     
    The MAKE-OMN function by default will display length as a ratio from now on. Any of you preferring to see the output in length symbols can do that by setting the :length-symbols to true.
     
    New Attribute:
    octave-shift
     
    '(q ab5 marc+8va -e c6 marc+8va s g5 stacs+8va
      e g6 ten+8va -s e ab6 marc+stacs+8va -)
     
    Fixed to ped and ped1 midi playback.
    Fixed to leg (legato) when length-rest next.
    In DO-TIMELINE, DO-TIMLINE2 and TONALITY-MAP the :resolution keyword has changed to :span.
     
    The Opusmodus user interface has been extended with invaluable tools: Search Files… you will find the new tool in the Tools menu. Search Files… will allow you to search and replace a bunch of files all in one go. For example replacing the :resolution name to :span in all of your scores, is a matter of seconds.
     
    Other minor bug fixes and plenty of optimisation. 
     
    And finally for night composers we have added the flexible background colorisation option: Toggle Dark.
     
    Happy composing,
    Janusz Podrazik
     
  3. Like
    Stephane Boussuge got a reaction from lviklund in 3 Frasques for Chamber Ensemble   
    Finally, here's the 3 "Frasques" for Chamber Ensemble.
     

     
    Happy Opusmodusing !
     
    SB.
  4. Like
    Stephane Boussuge got a reaction from opmo in 3 Frasques for Chamber Ensemble   
    Finally, here's the 3 "Frasques" for Chamber Ensemble.
     

     
    Happy Opusmodusing !
     
    SB.
  5. Like
    Stephane Boussuge reacted to AM in substitute markov transition-weight   
    ;;; little program to change markov-weight for a specific value ;;; to give markov a "rule-tendency" (setq transitions '((a (b 1) (c 3) (d 2) (e 1)) (b (a 2) (d 3)) (c (a 2) (e 1) (b 3)) (d (c 2) (b 1) (a 3)) (e (a 2) (b 2) (d 1)))) (defun substitute-transition-weight (transition-list value new-weight) (loop for j in transition-list collect (append (list (first j)) (loop repeat (1- (length j)) for cnt = 1 then (incf cnt) when (equal (first (nth cnt j)) value) collect (list (first (nth cnt j)) new-weight) else collect (nth cnt j))))) (substitute-transition-weight transitions 'a 100) ;;; example for "concrete use" (loop repeat 20 with transitions = '((a (b 3) (c 3) (a 2)) (b (a 2) (b 3) (c 5)) (c (a 2) (c 1))) with weight = 1 do (setq transitions (substitute-transition-weight transitions 'a weight)) do (incf weight 2) collect (gen-markov-from-transitions transitions :size 20 :start 'a)) best wishes 
    andré
  6. Like
    Stephane Boussuge reacted to opmo in Un jardin à Keranchaudel   
    molto tranquillo 🙂
  7. Like
    Stephane Boussuge reacted to opmo in Coming Soon: REWRITE-LENGTHS   
    (1/12 1/20 1/4 1/4 1/5 1/6)  

    (5/32 1/32 1/4 1/32 5/32 1/4 3/32 1/32 5/32 1/16 1/16)  

     
    (1/20 1/10 3/20 1/5 1/4 3/10 7/20 2/5 9/20 1/2 11/20)  

     
    ((1/20 1/20 1/20) (1/10 1/20) (2/20 2/20 -1/20) (1/20 1/20) (1/12 1/2))  

  8. Like
    Stephane Boussuge reacted to opmo in gen-sieves   
    Part of the next release, thanks to Andre:
    (gen-sieve '(c4 g7) '(2 1)) => (0 2 3 5 6 8 9 11 12 14 15 17 18 20 21 23 24 26 27 29 30 32 33 35 36 38 39 41 42) (gen-sieve '(c4 g7) '(2 1) :type :pitch) => (c4 d4 eb4 f4 fs4 gs4 a4 b4 c5 d5 eb5 f5 fs5 gs5 a5 b5 c6 d6 eb6 f6 fs6 gs6 a6 b6 c7 d7 eb7 f7 fs7) (gen-sieve '((c4 g7) (c1 g7)) '((2 1 12) (3 5))) => (-36 -33 -28 -25 -20 -17 -12 -9 -4 -1 0 2 3 4 7 12 15 17 18 20 23 28 30 31 32 33 36 39) (gen-sieve '((c4 g7) (c1 g7)) '((2 1 12) (3 5)) :type :pitch) => (c1 eb1 gs1 b1 e2 g2 c3 eb3 gs3 b3 c4 d4 eb4 e4 g4 c5 eb5 f5 fs5 gs5 b5 e6 fs6 g6 gs6 a6 c7 eb7) (gen-sieve '(violin (c1 g6) piccolo) '((2 1 12) (3 5) (3 6)) :type :interval) => (3 5 3 5 3 5 3 4 1 1 1 1 5 3 3 2 1 2 5 1 2 1 1 2 1 2 1 2 6 1 2 1 5)  
  9. Like
    Stephane Boussuge reacted to AM in pick-sample-from-center   
    if you want to pick a sample from approx.center (depends on odd/even)  of a list... 
     
    (defun pick-sample-from-center (list span) (let ((center (if (evenp (length list)) (/ (length list) 2) (/ (1+ (length list)) 2))) (span (if (> span (length list)) (length list) (append span)))) (loop repeat span with startpoint = (if (evenp span) (- center (/ span 2)) (- center (/ (1+ span) 2))) for i = startpoint then (incf startpoint) collect (nth i list)))) ;;;EXAMPLES: (pick-sample-from-center '(1 2 3 4 5 4 3 2 1) 7) => (2 3 4 5 4 3 2) (pick-sample-from-center '(1 2 3 4 5 4 3 2 1) 3) => (4 5 4) (pick-sample-from-center '(1 2 3 4 5 4 3 2 1) 6) => (3 4 5 4 3 2) (pick-sample-from-center '(1 2 3 4 5 4 3 2 1) 20) ; (if (> span length) => input-list as output => (1 2 3 4 5 4 3 2 1)  
  10. Like
    Stephane Boussuge reacted to AM in adjust-pitch-sequence   
    kind of transposing.... in ONE function...
     
    (defun adjust-pitch-sequence (pitch-sequence pitch1 pitch2) (pitch-transpose (car (pitch-to-interval (list pitch1 pitch2))) pitch-sequence)) ;;;'b3 (and all around) will be transposed to 'a6 (adjust-pitch-sequence '(c3 b3 a4 g1) 'b3 'a6) => (bb5 a6 g7 f4)  
    here a simple self-similarity-example - but it's not for what i coded it..
     
    (setq seq '(c3 b3 a4 g2)) (loop for i in seq collect (adjust-pitch-sequence seq 'c3 i))  
  11. Like
    Stephane Boussuge got a reaction from erka in Un jardin à Keranchaudel   
    Here's a minimalist style soundtrack made as one of the tests for my new orchestral template.
     
     

    SB.
  12. Like
    Stephane Boussuge got a reaction from o_e in Un jardin à Keranchaudel   
    Here's a minimalist style soundtrack made as one of the tests for my new orchestral template.
     
     

    SB.
  13. Like
    Stephane Boussuge reacted to opmo in gen-sieves   
    With AMBITUS-FORM function:
    (defun gen-sieve (ambitus interval) (do-verbose ("gen-sieve") (flet ((gen-sieve* (ambitus interval) (integer-to-pitch (loop with cnt = -1 for int = (first ambitus) then (setf int (+ (nth cnt interval) int)) when (<= int (second ambitus)) collect int into bag else return bag do (incf cnt) when (= cnt (length interval)) do (setf cnt 0))))) (let ((ambitus (ambitus-form ambitus))) (if (listsp ambitus) (sort-asc (find-unique (loop for a in ambitus for i in interval append (gen-sieve* a i)))) (gen-sieve* ambitus interval)))))) (gen-sieve '(c4 g7) '(2 1)) => (c4 d4 eb4 f4 fs4 gs4 a4 b4 c5 d5 eb5 f5 fs5 gs5 a5 b5 c6 d6 eb6 f6 fs6 gs6 a6 b6 c7 d7 eb7 f7 fs7) (gen-sieve '((c4 g7) (c1 g7)) '((2 1 12) (3 5))) => (c1 eb1 gs1 b1 e2 g2 c3 eb3 gs3 b3 c4 d4 eb4 e4 g4 c5 eb5 f5 fs5 gs5 b5 e6 fs6 g6 gs6 a6 c7 eb7) (gen-sieve 'violin '(2 1)) => (g3 a3 bb3 c4 cs4 eb4 e4 fs4 g4 a4 bb4 c5 cs5 eb5 e5 fs5 g5 a5 bb5 c6 cs6 eb6 e6 fs6 g6 a6 bb6 c7 cs7 eb7 e7 fs7 g7) (gen-sieve '(violin (c1 g6) piccolo) '((2 1 12) (3 5) (3 6))) => (c1 eb1 gs1 b1 e2 g2 c3 eb3 g3 gs3 a3 bb3 b3 e4 g4 bb4 c5 cs5 eb5 gs5 a5 b5 c6 cs6 eb6 e6 fs6 g6 a6 eb7 e7 fs7 g7 c8)  
    AMBITUS-FORM is embedded in many ambitus functions:
    (ambitus-form 'violin) (ambitus-form '(2 34)) (ambitus-form '(violin)) (ambitus-form '(violin (2 34))) (ambitus-form '((2 34) midi)) (ambitus-form '((2 34) (2 34))) (ambitus-form '(violin cello))  
  14. Like
    Stephane Boussuge reacted to AM in gen-sieves   
    nice :-) i have a lot of extra function on SYMMETRIES in my USER-library, it's a part of my momentary project
     
    - chained-symmetries
    - symmetries based on markov
    - shifted symmetries
    ..................................................
     
     
  15. Like
    Stephane Boussuge reacted to opmo in gen-sieves   
    I truly love your contribution to the Forum and Opusmodus.
    Two of your functions will be part of the next release.
     
    GEN-SYMMETRICAL
    (gen-symmetrical 24 '(1 2 3 4 5 6)) => (5 2 6 2 3 2 1 5 2 3 5 4 4 5 3 2 5 1 2 3 2 6 2 5) (gen-symmetrical 24 '(1 2 3 4 5 6) :repeat t) => (1 1 3 1 1 2 4 6 4 5 5 2 2 5 5 4 6 4 2 1 1 3 1 1) (gen-symmetrical '(6 8 12) '(1/16 1/32 1/8)) => ((1/8 1/32 1/8 1/8 1/32 1/8) (1/16 1/8 1/16 1/32 1/32 1/16 1/8 1/16) (1/8 1/32 1/16 1/32 1/16 1/32 1/32 1/16 1/32 1/16 1/32 1/8))  
    GEN-MULTISYMMETRICAL
    (gen-multisymmetrical 8 '(1 2 3 4 5 6)) => (2 3 2 1 1 2 3 2 4 5 2 5 5 2 5 4 1 5 4 6 6 4 5 1 6 5 3 1 1 3 5 6 6 5 3 1 1 3 5 6 1 5 4 6 6 4 5 1 4 5 2 5 5 2 5 4 2 3 2 1 1 2 3 2) (gen-multisymmetrical 8 '(1 2 3 4 5 6) :repeat t) => (1 1 2 4 4 2 1 1 6 4 5 5 5 5 4 6 2 2 2 5 5 2 2 2 5 5 5 3 3 5 5 5 5 5 5 3 3 5 5 5 2 2 2 5 5 2 2 2 6 4 5 5 5 5 4 6 1 1 2 4 4 2 1 1) (gen-multisymmetrical '(6 8 12) '(1/16 1/32 1/8)) => ((1/8 1/32 1/16 1/16 1/32 1/8 1/16 1/32 1/8 1/8 1/32 1/16 1/16 1/32 1/8 1/8 1/32 1/16 1/16 1/32 1/8 1/8 1/32 1/16 1/16 1/32 1/8 1/8 1/32 1/16 1/8 1/32 1/16 1/16 1/32 1/8) (1/32 1/8 1/32 1/16 1/16 1/32 1/8 1/32 1/16 1/32 1/8 1/16 1/16 1/8 1/32 1/16 1/32 1/8 1/16 1/8 1/8 1/16 1/8 1/32 1/8 1/32 1/8 1/32 1/32 1/8 1/32 1/8 1/8 1/32 1/8 1/32 1/32 1/8 1/32 1/8 1/32 1/8 1/16 1/8 1/8 1/16 1/8 1/32 1/16 1/32 1/8 1/16 1/16 1/8 1/32 1/16 1/32 1/8 1/32 1/16 1/16 1/32 1/8 1/32) (1/32 1/8 1/16 1/32 1/16 1/32 1/32 1/16 1/32 1/16 1/8 1/32 1/8 1/16 1/32 1/8 1/16 1/32 1/32 1/16 1/8 1/32 1/16 1/8 1/16 1/8 1/32 1/16 1/32 1/16 1/16 1/32 1/16 1/32 1/8 1/16 1/16 1/8 1/16 1/32 1/8 1/32 1/32 1/8 1/32 1/16 1/8 1/16 1/8 1/32 1/8 1/16 1/32 1/8 1/8 1/32 1/16 1/8 1/32 1/8 1/16 1/8 1/16 1/8 1/32 1/16 1/16 1/32 1/8 1/16 1/8 1/16 1/16 1/8 1/16 1/8 1/32 1/16 1/16 1/32 1/8 1/16 1/8 1/16 1/8 1/32 1/8 1/16 1/32 1/8 1/8 1/32 1/16 1/8 1/32 1/8 1/16 1/8 1/16 1/32 1/8 1/32 1/32 1/8 1/32 1/16 1/8 1/16 1/16 1/8 1/32 1/16 1/32 1/16 1/16 1/32 1/16 1/32 1/8 1/16 1/8 1/16 1/32 1/8 1/16 1/32 1/32 1/16 1/8 1/32 1/16 1/8 1/32 1/8 1/16 1/32 1/16 1/32 1/32 1/16 1/32 1/16 1/8 1/32))  
  16. Like
    Stephane Boussuge reacted to opmo in gen-sieves   
    (make-scale 'c4 29 :alt '(2 1)) JP
  17. Like
    Stephane Boussuge reacted to opmo in interval-mapping   
    Examples with newly added keyword :sort (the default is t):
    ;;; TEST (setf mat '(c4 cs4 d4 ds4 e4 f4 fs4 g4 gs4 a4 bb4 b4 c5 cs5 d5)) (mapcar 'pitch-to-integer (list (tonality-map '((3 0 1 4 6 11 13) :root 3 :sort nil) mat) (tonality-map '((3 0 1 4 6 11 13) :root 3 :sort nil :shift t) mat) (tonality-map '((3 0 1 4 6 11 13) :root 3 :sort t :shift t) mat) (tonality-map '((3 0 1 4 6 11 13) :root 3 :sort nil :fixed t) mat) (tonality-map '((3 0 1 4 6 11 13) :root 3 :sort t :fixed t) mat) )) => ((3 4 4 6 6 6 11 11 11 12 13 13 15 16 16) (3 0 1 4 6 11 13 15 12 13 16 18 23 25 27) (3 4 6 7 9 14 16 15 16 18 19 21 26 28 27) (3 4 4 6 6 6 11 11 11 13 13 13 13 13 13) (3 4 4 6 7 7 9 9 9 14 14 14 16 16 16))  
  18. Like
    Stephane Boussuge reacted to opmo in interval-mapping   
    Tonality can be any sequence:
    (setf messiaen (append (expand-tonality '(c4 messiaen-mode1)) (expand-tonality '(c5 messiaen-mode2)) (expand-tonality '(c6 messiaen-mode3)))) (tonality-map '(messiaen :shift t) '(c4 cs4 d4 eb4 e4 f4 fs4 g4 gs4 a4 bb4 b4 c5 cs5 d5 eb5)) => (c4 d4 e4 fs4 gs4 bb4 c5 cs5 eb5 e5 fs5 g5 a5 bb5 c6 d6)  
     
     
  19. Like
    Stephane Boussuge reacted to AM in interval-mapping   
    i'm sure that it would also work with tonality-map,
    but i was interested to code a simple version for my own to understand all the things :-)
     
    ;;; i wanted to map every interval-sequence to every possible pitchfield... ;;; all the sequences are "centered" (i needed that for my project) ;;; with :base you could move up and down the center ;;; :pitchfield has to be a OMN-pitch-sequence ;;; FUNCTION (defun interval-projection-on-pitchfield (&key pitchfield intervals (base 0)) (let ((integers (pitch-to-integer (interval-to-pitch intervals))) (base-0-integers) (centering) (pos)) (setq base-0-integers (loop for i in integers collect (+ (abs (find-min integers)) i))) (setq centering (if (evenp (find-max base-0-integers)) ;; finds the center of the seq (/ (find-max base-0-integers) 2) (/ (1+ (find-max base-0-integers)) 2))) (loop for i in base-0-integers do (setq pos (+ i (* -1 centering) base)) ;; compensating center & base when (< pos 0) do (setq pos 0) ;; corr if intervals to big (+/-) when (> pos (1- (length pitchfield))) do (setq pos (1- (length pitchfield))) collect (nth pos pitchfield)))) ;;; EXAMPLE (interval-projection-on-pitchfield :pitchfield (append (expand-tonality '(c4 messiaen-mode5)) (expand-tonality '(c5 messiaen-mode5)) (expand-tonality '(c6 messiaen-mode5))) :intervals '(1 2 3 1 2 -4 -3 -2 3 5 7 -2) :base 12)  
    short question: is there a possibilty to build this
    (append (expand-tonality '(c4 messiaen-mode5)) (expand-tonality '(c5 messiaen-mode5)) (expand-tonality '(c6 messiaen-mode5))) with ONE function (i need more ambitus then 1 octave)...
     
    thanx, andré
     
     
     
  20. Like
    Stephane Boussuge got a reaction from Deb76 in After The Club for Piano   
    Thanks Deb76 !
     
    S.
  21. Like
    Stephane Boussuge reacted to lviklund in After The Club for Piano   
    "Jazz ain't dead! It just smells funny." (F. Zappa)
     
    Nice one.
  22. Like
    Stephane Boussuge got a reaction from jesele in After The Club for Piano   
    Hi,
     
    here's a quiet speed piece playing around the jazz piano ;-)
     

    SB.
     
     
  23. Like
    Stephane Boussuge reacted to TomTolleson in Converting MIDI or MusicXML to OMN   
    Hi Stephane,
     
    Thank you! It worked perfectly.
     
    Regards,
     
    Tom
  24. Like
    Stephane Boussuge got a reaction from TomTolleson in Converting MIDI or MusicXML to OMN   
    Hi Tom,
     
    you need to open the midi-file into the Opusmodus Player and click in it for give it the focus.
     
    After that, go to the File menu (top left in Opusmodus software) and select Export => Midi to score.
     
    SB.
     
     
  25. Like
    Stephane Boussuge reacted to Deb76 in Rock It !! for Piano from Piano suite No.1   
    Bonjour, 
    J'aime beaucoup.  Et merci pour le script qui est très intéressant à découvrir et à étudier. 
    Didier
×
×
  • Create New...

Important Information

Terms of Use Privacy Policy