Jump to content

Opusmodus 2.2.26880 Update


Recommended Posts

2.2.26880

 

– New function:

  • GET-BEATS
  • ATTRIBUTE-SERIES

 

– Changes:

  • PITCH-EXPANSION-VARIANT now PITCH-SEGMENT-VARIANT
  • GET-EVENTS - additional functionality

 

Downloads

 

 

GET-BEATS

 

The function GET-BEATS allows you to assemble a new sequence from a number of beats of a given bar and a given omn sequence. The beat value is taken from the bar time-signature. The variant - if defined - is applied to the entire bar before the beat collection.

 

Examples:

(setf omn '((q c4 eb4 g4 bb4) (h g3f4cs5 p c5)))

(get-beats '(1 1) omn)
=> (q c4 mf eb4 g4 bb4)

(get-beats '(1 1 1) omn)
=> (q c4 mf)

(get-beats '(1 1 (1 4)) omn)
=> (q c4 mf bb4)

(get-beats '((1 1 (1 3))
             (1 2 1)) omn)
=> ((q c4 mf g4) (q g3f4cs5 p tie))

(get-beats '((1 1 (1 3) r)
             (1 2 1 i)) omn)
=> ((q bb4 mf eb4) (q g3a2cs2 p tie))

 

Collecting beat values from two voices with variant set to '? (at random):

(setf
seq1 '((s g4 pp e s cs5 c4 -e s fs5 g4 mf q s gs5 mp e)
        (s a3 f g4 pp e s gs5 gs5 -e s a3 gs4 mf q s a5 mp a5))

seq2  '((h e4f5 p c5a4) (h b3d3 gs4eb2fs3) (h bb2g5cs5 gs4d4eb2)
         (w bb2 mp) (h g3f4cs5 p c5) (h fs5a5b3 e4b3) (h bb2)
         (w e2eb4) (h c5cs6 a5) (h f4g3 gs4d3) (h fs5 bb2fs5g3)
         (h d3e5eb4 gs4) (h a2c6 f2) (h b0 cs6c5) (h gs4d3)))

(get-beats '((1 1 1 ?)
             (2 3 2 ?)
             (1 2 2..4 ?)
             (2 5 2 ?)) (list seq1 seq2) :seed 42)
=> ((s gs5 pp e s fs5)
    (q g5cs5bb2 p)
    (s gs5 pp a5 -e s a5 gs5 mf e gs4 tie gs4 s g4 mp a3)
    (q g3f4cs5 p))

 

Collecting beat values from four voices:

(setf cello1 '((s g2 p d3 b3 a3 b3 d3 b3 d3)
               (s g2 d3 b3 a3 b3 d3 b3 d3))

      cello2 '((s g2 p e3 c4 b3 mf c4 e3 c4 e3)
               (s g2 e3 c4 b3 c4 e3 c4 e3))

      cello3 '((s g2 mf fs3 c4 b3 c4 fs3 c4 fs3)
               (s g2 fs3 c4 b3 c4 fs3 c4 fs3))

      cello4 '((s g2 mf g3 b3 a3 b3 g3 b3 g3)
               (s g2 g3 b3 a3 b3 g3 b3 fs3)))

(get-beats '((1 1 2 ?)
             (2 1 2 ri)
             (3 2 2 ?)
             (4 2 1 ?)
             (2 2 2 ?)
             (3 2 2 ?))
           (list cello1 cello2 cello3 cello4)
           :seed 59)
=> ((s a3 p g2 b3 b3)
    (s a2 mf gs2 e3 cs4)
    (s c4 mf c4 fs3 fs3)
    (s g2 mf g3 a3 b3)
    (s c4 mf c4 e3 e3)
    (s b3 mf c4 c4 c4))

 

 

 

ATTRIBUTE-SERIES

 

The function ATTRIBUTE-SERIES inserts a series of attributes into an omn-form sequence. The series list consists of two values: attribute and its count.

 

Examples:

(attribute-series
'(leg 8)
'(s g2 d3 b3 a3 b3 d3 b3 d3 g2 d3 b3 a3 b3 d3 b3 d3))

i1.jpg

 

(attribute-series
'((leg 4) (- 4))
'(s g2 d3 b3 a3 b3 d3 b3 d3 g2 d3 b3 a3 b3 d3 b3 d3))

i2.jpg

 

(setf omn
      (make-omn
       :length '(s)
       :pitch (vector-to-pitch '(c2 c5) (gen-sine 64 5 .4))
       :span :pitch))

i3.jpg

 

(attribute-series '((leg 4) (stacc 4)) omn)

i4.jpg

 

 

In this example we generate the attribute values and its count separately:

(setf attr (rnd-sample 12 '(leg stacc -)))
=> (- - stacc stacc leg - leg - leg stacc leg stacc)

(setf div (rnd-sample 12 '(2 3 4 5)))
=> (4 2 3 5 2 5 4 5 5 5 3 4)

 

The next step is to create lists with two values each containing attribute and its count. The MCLIST function helps us to create such lists:

(setf series (mclist attr div))
=> ((- 4) (- 2) (stacc 3) (stacc 5) (leg 2) (- 5)
    (leg 4) (- 5) (leg 5) (stacc 5) (leg 3) (stacc 4))

(attribute-series series omn)

 

i5.jpg

 

 

 

PITCH-SEGMENT-VARIANT

 

This function returns a number of segments of a sequence from an existing list or lists with a defined variant. The segment is defined by the size value (percent) and the number of returned segments. The segment start position is defined by the position value.

 

(pitch-segment-variant '(c4 d4 e4 f4 g4 a4 b4)
                        :percent 50
                        :segment 1
                        :position 's
                        :variant 'r)
=> (b4 a4 g4 f4)

 

 

Examples:

 

In the following example the segment count is set to 2. The first segment is 50 percent in size with a retrograde variant, while the second segment is 30 percent in size with an inversion variant:

(pitch-segment-variant '(c4 d4 e4 f4 g4 a4 b4)
                        :percent '(50 30)
                        :segment 2
                        :position 'e
                        :variant '(r i))
=> ((f4 e4 d4 c4) (eb3 cs3))

 

To retain the initial sequence in the result we set the :initial option to T. The :lists option set to NIL will flatten the entire process:

(pitch-segment-variant '(c4 d4 e4 f4 g4 a4 b4)
                       :percent '(50 30)
                       :segment 2
                       :position 'e
                       :variant '(r i)
                       :initial t
                       :lists nil)
=> (c4 d4 e4 f4 g4 a4 b4 f4 e4 d4 c4 eb3 cs3)

 

(setf omn
      (omn-to-time-signature
       (make-omn
        :length '(s)
        :pitch (vector-to-pitch '(c2 c5) (gen-sine 64 5 .4))
        :span :pitch)
       '(4 4)))

i6.jpg

 

 

The following expression will return 4 segments each 15 percent in size taken from every bar. Each segment is transposed by 13 semitones. The total of return bars is 16 (4 bars x 4 segments):

(pitch-segment-variant
 omn
 :percent 15
 :segment 4
 :position '?
 :variant '?
 :transpose 13
 :seed 32)

i7.jpg

 

 

(pitch-segment-variant
 omn
 :percent '((20) (30) (40) (100))
 :segment '(1 2 3 4)
 :position '?
 :variant '?
 :transpose '((0) (13))
 :seed 32)

i8.jpg

 

 

In this example every segment in each bar has its own size, start position, variant and transposition value:

(setf percent '((30 50 20) (20 50 70) (40 60 70) (50 20 70)))
(setf transp '((0 0 0) (13 0 0) (0 0 13) (0 0 13)))

(pitch-segment-variant
 omn
 :percent percent
 :segment 3
 :position '?
 :variant '?
 :transpose transp
 :seed 32)

i9.jpg

 

 

(pitch-segment-variant
 omn
 :percent (gen-eval 3 '(rnd-sample 3 '(40 50 60 80 20 70)) :seed 45)
 :segment 3
 :position '?
 :variant '?
 :omit '(a d ad da p)
 :transpose (gen-eval 3 '(rnd-sample 3 '(0 13)) :seed 35)
 :seed 45)

i10.jpg

 

 

More examples:

 

(progn
  (init-seed 53)
  
  (setf segments
        (quantize
         (pitch-segment-variant
          (library 'maderna 'serenata-per-un-satellite nil :random 12)
          :percent 20
          :segment '(1 2 1 2 1 2)
          :position '?
          :variant '?
          :transpose 6)
         '(1 2 3 4 5 6 7 8)))
  
  (ps 'gm :treble (list segments)
      :tempo 72)
  
  (init-seed nil)
  )

i11.jpg

 

 

(progn
  (init-seed 34)
  
  (setf segments
        (quantize
         (pitch-segment-variant
          (library 'maderna 'serenata-per-un-satellite nil :random 12)
          :percent 20
          :segment '(1 2 1 2 1 2)
          :position '?
          :variant '?
          :transpose 6)
         '(1 2 3 4 5 6 7 8)))
  
  (ps 'gm :treble (list segments)
      :tempo 72)
  
  (init-seed nil)
  )

i12.jpg

 

 

 

Best wishes,

Janusz

Link to comment
Share on other sites

  • opmo changed the title to Opusmodus 2.2.26880 Update
×
×
  • Create New...

Important Information

Terms of Use Privacy Policy