Jump to content

opmo

Administrators
  • Posts

    2,903
  • Joined

  • Last visited

Everything posted by opmo

  1. Code possibly with next update.
  2. Short variation for piano. Best wishes, Janusz Vienna Variations.mp3
  3. Possibly something to do with your midi setup. The SCORE-PLAYER is no an official OM function, it was written for Andre with all the limitations - pure hack
  4. get-beats is the function you are looking for.
  5. Midi Export is working as it should.
  6. Example with def-score and score-player only: (setf pattern (gen-repeat 50 (list '(s e4 fs4 b4 cs5 d5 fs4 e4 cs5 b4 fs4 d5 cs5)))) (setf tempo (mclist (gen-integer 110 60) (gen-repeat 50 1))) (def-score score1 ( :key-signature 'chromatic :time-signature '(3 4) :tempo tempo ) (inst1 :omn pattern :sound 'gm :channel 1 :program 0 :pan 27)) (def-score score2 ( :key-signature 'chromatic :time-signature '(3 4) :tempo (reverse tempo) ) (inst1 :omn pattern :sound 'gm :channel 2 :program 0 :pan 100)) (progn (score-player 'score1) (score-player 'score2) ) The score-player plays midi-files and scores. (score-player "~/Opusmodus/Media/MIDI/Bach/Chorals/036500b_.mid")
  7. I did the SCORE-PLAYER for Andre. I will make a documentation for it soon.
  8. list is missing :trumpet (list p1)
  9. Piano needs two voices For example: (ps 'group1 :trumpet (list p1) :piano (list (gen-retrograde p1) (pitch-variant p1 :variant 'i)) :tempo '((88 1) (89 1) (100 1)) :time-signature '(1 4 10))
  10. 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)) (attribute-series '((leg 4) (- 4)) '(s g2 d3 b3 a3 b3 d3 b3 d3 g2 d3 b3 a3 b3 d3 b3 d3)) (setf omn (make-omn :length '(s) :pitch (vector-to-pitch '(c2 c5) (gen-sine 64 5 .4)) :span :pitch)) (attribute-series '((leg 4) (stacc 4)) omn) 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) 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))) 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) (pitch-segment-variant omn :percent '((20) (30) (40) (100)) :segment '(1 2 3 4) :position '? :variant '? :transpose '((0) (13)) :seed 32) 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) (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) 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) ) (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) ) Best wishes, Janusz
  11. Please send me your serial number directly to me by email.
  12. After the new installation we resent your licence count.
  13. To buy an upgrade you go here: https://opusmodus.com/forums/store/category/3-software/
  14. Something wrong with the 'quote' (') possibly. Copy expressions (cod) from other text editor is using different quote symbol. As for the example from above you simply need to flatten the expression: (flatten-omn (merge-voices voice1 voice2)) No need to use omn-to-time-signature. I will fix this in the next update - lists with length 1 will be flatten automatically.
  15. No errors here: (merge-voices voice1 voice2) or (merge-voices voice2 voice2) The second expression is redundant
  16. Maybe a part of the next update
  17. This would be quite a change. Why can't you use round. What is the purpose of having 64.3 tempo value.
  18. We added default time-signature value (4 4) if none. Next update
  19. Your midi file dose not include tempo and time-signature values. Please check your Musescore setup - something is wrong there.
  20. It is no clear how all this work and where is the midi (x) coming from.
×
×
  • Create New...

Important Information

Terms of Use Privacy Policy