Jump to content

opmo

Administrators
  • Posts

    2,903
  • Joined

  • Last visited

Everything posted by opmo

  1. You can processes OMN lengths but it is not that easy. To do that you need to use DISSEMBLE-OMN and then MAKE-OMN. (apply 'make-omn (disassemble-omn '(q c4 e d4 acc e acc h f4 q g4))) One day I will make documentation how to do that. Here is a short example: (defun add-len (omn add) (let ((plist (disassemble-omn omn))) (setf (getf plist :length) (loop for i in (getf plist :length) collect (+ add i))) (apply 'make-omn plist))) (add-len '(q c4 e d4 f4 h g4) '1/8) => (q. c4 q d4 f4 he g4)
  2. You forgot to add the seed into the LENGTH-DIVIDE function. To stop the endless print in the Listener you could add DO-VERBOSE marco: (defun durational-accent (lengths &key seed (divide 2) (set nil) (ignore nil)) (do-verbose ("durational-accent") (rnd-seed seed) (assert (and (listp lengths) (every #'listp lengths)) (lengths) "Given `lengths' ~A is not a sequence of bars (a list of lists).~%" lengths) (append (map-neighbours #'(lambda (bar1 bar2) (if (length-notep (first bar2)) (append (butlast bar1) (length-divide (rnd-pick '(0 1) :seed (seed)) (if (listp divide) (rnd-pick divide :seed (seed)) divide) (last bar1) :set set :ignore ignore :seed (seed))) bar1)) lengths) (last lengths))))
  3. I don't understand what you mean by "constant tracing printout likely caused by this macro".
  4. Snippet is for one expression only or list of atoms, this is not a bug. You don't need to make a selection, just place the course on the end on the expression.
  5. New: Plot snippets menu (shortcuts): Fixed the missing phase within the WAVES function when modulation option is used.
  6. Not that simple, but will be in the next update :-)
  7. The phase was missing when modulation. The bug is fixed now and will be part of the next update.
  8. the correct output should be: (c5 cs5 f5 fs5 g5 b5) (1 4 1 1 4) Thank you for spotting the error.
  9. Naturally I use multiple monitors in my work. I will add the multi screen support of one workspace document to my todo list.
  10. Fix to missing TIE is some instances. New: OMN-TO-MEASURE This function works the same way as the OMN-TO-TIME-SIGNATURE function but uses measures instead of time-signature form. ---------------------------------- omn-to-measure omn-form measures &key loop [Function] Arguments and Values: omn omn-form list. measures a list of length-symbols or ratios. loop NIL or T. The default is T. Description: The OMN-TO-MEASURE function is used to span an omn-form list to create sublists that match up with a list of time-signature measures. This is particularly valuable when organising the omn output from the import of a Midifile to allow for further processing. For example, here’s part of an improvisation captured to Midifile. First, its output before the OMN-TO-MEASURE: (setf rh-1 '(-dd h c7 p eb6 mp p - c7 q e6 - h_e g6 e mf bb5 mp -h.. q bb6 p -h. q. d6 e c4 -h.. q bb3 mf e g6 mp h_e e6 -h e g5 h a6 -e = h bb4 e6 p q bb6 mp e6 e g3 g6 p q. g3 e bb3 bb6 mp q g6 pp e c7 mp eb4 p)) Now, with this output organised to produce lists that adhere to the measure 4/4: (setf bw-rh1 (omn-to-measure rh-1 '(4/4))) => ((-w) (-w) (-w) (-w) (h c7 p eb6 mp) (h eb6 p -h) (h c7 p q e6 -q) (h_e g6 p e mf bb5 mp -e tie) (-h. q bb6 p) (-h. q d6 p tie) (e d6 p c4 -h.) (-e q bb3 mf e g6 mp h e6 tie) (e e6 mp -h e g5 q a6 tie) (q a6 mp -e a6 h bb4) (h e6 p q bb6 mp e6) (e g3 mp g6 p q. g3 e bb3 bb6 mp g6 pp tie) (e g6 pp c7 mp eb4 p)) Examples: The following examples show further possibilities of this function. Particularly notice in the next example how the tie is added automatically in the second bar. (setf measures '(q h. h. w h.)) (setf omn1 '(-q q c5 p eb4 h gb4 q gb5 p a4 f c5 q c6 p eb5 gb5 q gb6 p a5 c6)) (omn-to-measure omn1 measures) => ((-q) (q c5 p eb4 gb4 tie) (q gb4 p gb5 a4 f) (q c5 f c6 p eb5 gb5) (q gb6 p a5 c6)) The example below is interesting because it’s only featuring a single bass pitch. Remember that in omn when a part may have only a single pitch, simply stating the next rhythmic value automatically includes a repetition of that pitch. (setf omn2 '(s gb2 f -e. s fff -e. s f -e. s fff -e. s f -e. s -e. s -e. s -e. s -e. s fff -e. s f -e. s fff -e. s f -e. s -e. s -e. s -e. s -e. s fff -e. s f -e. s fff -e. s -e s -e s -e s -we s -q s -q s -q s -q s -q s -q s -)) (omn-to-measure omn2 '(q q. q. w)) => ((s gb2 f -e.) (s gb2 fff -e. s gb2 f -) (-e s gb2 fff -e.) (s gb2 f -e. s gb2 -e. s gb2 -e. s gb2 -e.) (s gb2 f -e. s gb2 fff -e. s gb2 f -e. s gb2 fff -e.) (s gb2 f -e. s gb2 -e. s gb2 -e. s gb2 -e.) (s gb2 f -e. s gb2 fff -e. s gb2 f -e. s gb2 fff -e.) (s gb2 fff -e s gb2 -e s gb2 -e s gb2 -q.) (-h. s gb2 fff -e.) (-s gb2 fff -q s gb2 -q s gb2 -q) (s gb2 fff -q s gb2 -q s gb2 -)) As in the initial example here’s a fragment barred with two measure values and with loop set to T. (setf omn3 '(s b4 d5 fs5 a5 e. g5 s c5 b4 a4 g4 b4 a4 cs5 e5 g5 e. fs5 s b4 a4 g4 fs4 a4 g4 b4 d5 fs5 e. e5 s a4 g4 fs4 e4 g4)) (omn-to-measure omn3 '(q. q) :loop t) => ((s b4 d5 fs5 a5 e g5 tie) (s g5 c5 b4 a4) (s g4 b4 a4 cs5 e5 g5) (e. fs5 s b4) (s a4 g4 fs4 a4 g4 b4) (s d5 fs5 e e5 tie) (s e5 a4 g4 fs4 e4 g4)) See OMN-TO-TIME-SIGNATURE
  11. It is not that simple. The panels working quite a different way (display). I use Opusmodus for developing Opusmodus and have no problem with it. I open all the source files I need in the assistant panel then if I need a specific file which is not on the top I use the file selector form the top left corner. I agree, to add multi screen support to Opusmodus would help.
  12. The TIE bug is fixed. Later today I will release a new update.
  13. You can open score files in the Assistant panel. Add the file to the Navigator, press ctrl and click on the file you like to open in the Assistant.
  14. Good idea to send the bugs here. Looks like the missing tie is a bug. Thank you for letting me know.
  15. I think the time signature is a bit problematic: (get-span '(w_5h. f5 pppp ord 5q g5 ppp ord)) => 6/5
  16. Grace notes in a tuplets is a bit problematic. The solution is to complete the tuplet value with the app lengths. Solution to your problem: (5q fs3 pppp ord -5d.q 5q d4 ppp ord -q 5h g4 ff ord (app - e4 fs4 gs4 f4) 5q e4 ppp ord -5q 5q b4 ff ord 5q a4 ff ord -5d.. 5q fs4 ppp ord (app - e4 fs4 gs4 f4) 5q e4 ppp ord -5ddq 5q fs4 ppp ord -5w.. 5q gs4 ppp ord -5h 5q f4 ff ord 5q eb4 ff ord -5h. 5q g4 ff ord -5w -5q 5w e5 pppp ord)
  17. I am working on a new omn symbol VOICES and wonder which way is more natural to write. I would like to hear your comments and ideas on this. Here are the two examples. With symbol :vx 1) Each voice after each event, next to each other (1 bar 4/4): symbol option :vx (:v1 q cs5 ff :v2 q gs4 ff :v3 q f4 ff :v4 q f3 ff :v1 q eb5 ff :v2 q gs4 ff :v3 q c4 ff :v4 q gs3 ff :v1 q cs5 ff :v2 q gs4 ff :v3 q f4 ff :v4 q cs3 ff :v1 q f5 ff :v2 q cs5 ff :v3 q gs4 ff :v4 q cs3 ff) symbol option :x (:1 q cs5 ff :2 q gs4 ff :3 q f4 ff :4 q f3 ff :1 q eb5 ff :2 q gs4 ff :3 q c4 ff :4 q gs3 ff :1 q cs5 ff :2 q gs4 ff :3 q f4 ff :4 q cs3 ff :1 q f5 ff :2 q cs5 ff :3 q gs4 ff :4 q cs3 ff) 2) Each voice in a separate bar (1 bar 4/4): symbol option :vx (:v1 (q bb4 ff g4 gs4 e g4 f4) :v2 (q cs5 ff b4 gs4 fs4) :v3 (q f4 ff bb3 gs3 e bb3 gs3) :v3 (q d3 ff e eb3 d3 q c3 bb2)) symbol option :x (:1 (q e4 ff h f4 q c5) :2 (e fs4 ff gs4 bb4 gs4 q fs4 f4) :3 (s g3 ff gs3 q bb3 s gs3 g3 q gs3 f4) :4 (q c3 ff h f2 q f3)) The symbol option :1 :2 :3 :4 (:1 (q e4 ff h f4 q c5) :2 (e fs4 ff gs4 bb4 gs4 q fs4 f4) :3 (s g3 ff gs3 q bb3 s gs3 g3 q gs3 f4) :4 (q c3 ff h f2 q f3)) will print in the Listener: (:|1| (q e4 ff h f4 q c5) :|2| (e fs4 ff gs4 bb4 gs4 q fs4 f4) :|3| (s g3 ff gs3 q bb3 s gs3 g3 q gs3 f4) :|4| (q c3 ff h f2 q f3)) I personally think the second option is better to control. Best wishes, JP
  18. OMN added to LENGTH-MAP function. I you used the function before please add the :otherwise keyword to the function in your score. -------------------------------- length-map map sequence &key repeat otherwise section exclude seed [Function] Arguments and Values: map a list (<length><item>). sequence list of lengths or omn list. otherwise an item or list of items. repeat nil, t and '? (at random). The default is nil. section an integer or list of integers. Selected list or lists to process. The default is NIL. This keyword is for omn lists only. exclude an integer or list of integers. Excluded list or lists from process. The default is NIL. This keyword is for omn lists only. seed NIL or an integer. The default is NIL. Description: LENGTH-MAP returns a copy of sequence in which each element that has been mapped (<length><item>) is replaced with a new item, if not, an otherwise item is chosen. If the sequence is omn-list and the otherwise is Nil, then the item is unchanged. (length-map '(e (c4fs4 eb4a4)) '(q q h -s s s s e -q - e - e s s h) :otherwise '(c4 cs5 d4 ds5)) => (c4 cs5 d4 ds5 c4 cs5 c4fs4 eb4a4 c4fs4 cs5 d4 ds5) (length-map '(e (c4fs4 eb4a4)) '(q q h -s s s s e -q - e - e s s h) :otherwise '(c4 cs5 d4 ds5) :repeat t) => (c4 cs5 d4 ds5 c4 cs5 c4fs4 c4fs4 c4fs4 cs5 d4 ds5) Examples: Mapping pitch to length: (length-map '(((s q) (c4db5 eb4d5))) '(q q h -s s s s e -q -q -e e -e s s h) :otherwise '(c4 cs4 fs4 g4)) => (c4db5 eb4d5 fs4 c4db5 eb4d5 c4db5 fs4 g4 eb4d5 c4db5 fs4) (length-map '(s (c4fs4 eb4a4)) '(q q h -s s s s e -q -q -e e -e s s h) :otherwise (rnd-row :type :pitch)) => (c4 cs4 d4 c4fs4 eb4a4 c4fs4 e4 gs4 eb4a4 c4fs4 g4) (length-map '((s (c4fs4 eb4a4)) (q (fs4c5g5))) '(q q h -s s s s e -q -q -e e -e s s h) :otherwise (rnd-row :type :pitch) :repeat t) => (fs4c5g5 fs4c5g5 fs4 c4fs4 c4fs4 c4fs4 d4 eb4 eb4a4 eb4a4 a4) Mapping velocity to length: (length-map '((s f) (q p)) '(q q h -s s s s e -q -q -e e -e s s h) :otherwise '(mp) :repeat t) => (p p mp f f f mp mp f f mp) Mapping articulation to length: (length-map '((1/8 (marc mordent2)) (1/16 (ped stacc)) (1/4 (ped leg))) '(1/16 1/16 1/8 1/2 1/16 1/16 1/8 1/4 1/2 1/4) :otherwise '(tr1 tr2) :repeat t) => (ped ped marc tr2 stacc stacc mordent2 ped tr1 leg) (length-map '((1/8 (spicc marc)) (1/16 (pizz stacc)) (1/4 (vib leg))) '(1/16 1/16 1/8 1/2 1/16 1/16 1/8 1/4 1/2 1/4) :otherwise '(ord)) => (pizz stacc spicc ord pizz stacc marc vib ord leg) (setf length '((1/2 4/5 1/5) (5/16 1/16 1/2 3/16 1/8) (4/5 1/2 1/4 1/5) (1/2 5/16 3/16 1/8 1/16) (1/16 1/2 5/16 1/8 3/16 1/8 5/16 1/2 1/16 1/16 1/2) (1/2 5/16 3/16 1/16 1/8 1/16 3/16 5/16 1/2) (1/10 1/5 3/10 1/2 4/5 3/10 1/2 4/5 1/2 3/10 1/5) (1/8 5/16 1/16 1/2 3/16) (1/8 3/16 1/2 1/16 5/16) (1/2 4/5 1/10 3/10 1/5 1/5 3/20))) (length-map '((1/2 (pfp-vib-4s detache-short stacc)) ((1/8 5/16) (tas-detache detache-long)) ((1/10 3/10) (tas-sus dyn-me-novib-1.5s tas-trem)) ((2/3 7/6) (tas-sus pfp-vib-4s dyn-me-novib-3s))) length :otherwise '(sus-novib)) => ((pfp-vib-4s sus-novib sus-novib) (tas-detache sus-novib pfp-vib-4s sus-novib detache-long) (sus-novib pfp-vib-4s sus-novib sus-novib) (pfp-vib-4s tas-detache sus-novib detache-long sus-novib) (sus-novib pfp-vib-4s tas-detache detache-long sus-novib tas-detache detache-long detache-short sus-novib sus-novib stacc) (pfp-vib-4s tas-detache sus-novib sus-novib detache-long sus-novib sus-novib tas-detache detache-short) (tas-sus sus-novib dyn-me-novib-1.5s pfp-vib-4s sus-novib tas-trem detache-short sus-novib stacc tas-sus sus-novib) (tas-detache detache-long sus-novib pfp-vib-4s sus-novib) (tas-detache sus-novib pfp-vib-4s sus-novib detache-long) (pfp-vib-4s sus-novib tas-sus dyn-me-novib-1.5s sus-novib sus-novib sus-novib)) OMN: (setf omn '((e c4 fff cs5 f q d4 f ds5 p s f4 p fs5 p c5 p pp) (s cs4 p f d4 f e eb5 p f4 p eb4 f h d3 p ff))) Mapping pitch to length: (length-map '((s (c4fs4 fs3f4)) (e c6ds6) (q (rnd-sample 12 '(fs4 fs3 gs5) :seed 45))) omn :otherwise '(c3fs4g4 gs5)) => ((e c6ds6 fff f q fs3 fs4 p s c4fs4 fs3f4 c4fs4 fs3f4 pp) (s c4fs4 p fs3f4 f c4fs4 e c6ds6 p c6ds6 c6ds6 f h c3fs4g4 p gs5 ff)) (length-map '((s (c4fs4 fs3f4)) (e c6ds6) (q (rnd-sample 12 '(fs4 fs3 gs5) :seed 45))) omn :repeat t) => ((e c6ds6 fff f q fs3 fs3 p s c4fs4 c4fs4 c4fs4 c4fs4 pp) (s c4fs4 p f c4fs4 e c6ds6 p c6ds6 c6ds6 f h d3 p ff)) Mapping articulation to length: (length-map '((s stacc) (e ped) (q (rnd-sample 12 '(tr1 marc)))) omn) => ((e c4 fff ped cs5 f ped q d4 tr1 ds5 p tr1 s f4 stacc fs5 stacc c5 stacc c5 pp stacc) (s cs4 p stacc cs4 f stacc d4 stacc e eb5 p ped f4 ped eb4 f ped h d3 p ff)) Mapping velocity to length: (length-map '((s ff) (e f) (q (rnd-sample 12 '(pp ppp)))) omn :otherwise '(ppp)) => ((e c4 f cs5 q d4 ppp ds5 pp s f4 ff fs5 c5 c5) (s cs4 ff cs4 d4 e eb5 f f4 eb4 h d3 ppp d3)) Best wishes, JP
  19. In order to get the user defined attributes (articulations) to the package you need the export the symbols: (defpackage :Opusmodus (:nicknames :om) (:use :common-lisp) (:export user-symbol1 user-symbol2 )) Everything else is in the package. I like your CONVERT-TO-PACKAGE function.
  20. As from ver.1.2.21732 pitch, length, velocity and articulation symbols are part of the OM package and can be used with other packages.
  21. New added Menu Items and key shortcut changes. Evaluation: Snippet: Last Score: Contextual Menu: For example Snippet with cmd-1 will play and display the notation etc... Best wishes, Janusz
  22. New: VELOCITY-VARIANT velocity-variant sequence &key variant section exclude omn [Function] Arguments and Values: sequence list(s) of velocities or omn-form lists. variant 'p (prime), 'r (retrograde), 'i (invert), 'ri (retrograde-invert), 'a (ascending), 'd (descending) and '? (at random). The default is ? (random). section an integer or list of integers. Selected list or lists to process. The default is NIL. exclude an integer or list of integers. Excluded list or lists from process. The default is NIL. omn NIL or T. If true force OMN style output. The default is T. Description: This function can process a sequence of common variant forms on lists of velocities. (velocity-variant '(ppp p mf ff p<>f < <) :variant 'i) => (fff f mp pp f><p > >) The variant processes included in this function are all standard forms used throughout most composition practice. The function does not use any speculative or random-based processes. All the function processes used can be found in OPUSMODUS as standalone functions. (setf velocity (gen-repeat 6 '((ppp p mf ff p<>f < <)))) (velocity-variant velocity :variant '(p r i ri a d)) => ((ppp p mf ff p<>f < <) (> > f><p ff mf p ppp) (fff f mp pp f><p > >) (< < p<>f pp mp f fff) (ppp p mf mf mf f ff) (ff f mf mf mf p ppp)) Examples: (velocity-variant '(p<>mf p<>ff fff><ff pppp<ff>ppp p>ppp<f 0<mp) :variant 'i) => (f><mp f><pp ppp<>pp ffff>pp<fff f<fff>p mf>0) (velocity-variant '(p<>mf p<>ff fff><ff pppp<ff>ppp p>ppp<f 0<mp) :variant 'ri) => (0<mf p<fff>f fff>pp<ffff pp><ppp pp<>f mp<>f) OMN: (velocity-variant '(q e4 mf f4 f g4 ff) :seed 5) => (q e4 pp f4 p g4 mp) (velocity-variant '((e c4 f cs5 f d4 f ds5 p f4 p fs5 p c5 p pp) (e cs4 p f d4 f eb5 p f4 p eb4 f d3 p ff)) :variant '(r i)) => ((e c4 pp cs5 p d4 ds5 f4 fs5 f c5 c5) (e cs4 f p d4 eb5 f f4 eb4 p d3 f pp)) (velocity-variant '((e c4 fff cs5 f d4 f ds5 p f4 p fs5 p c5 p pp) (e cs4 p f d4 f eb5 p f4 p eb4 f d3 p ff))) => ((e c4 pp cs5 p d4 ds5 f4 fs5 f c5 c5 fff) (e cs4 p f d4 eb5 p f4 eb4 f d3 p ff)) . . . (setf omn '((h. eb4 pp tasto q g3 0<pp>0 ponte) (-e) (q gs4 fp tasto) (-s) (q a5 ffp) (-e) (q bb4 fffp) (-s) (q cs5 pf) (-s q. e5 fp -e.) (q cs5 p h. d5 pfp) (-q h. c5 pp) (h. gs3 0<ppp>0 ponte -e a4 p< tasto) (h. fs5 mp q bb3 0<pp>0 ponte) (q c5 p tasto h. e4 pfp) (-e) (q cs4 fp h d5 pp>pppp) (h. f4 pp>pppp))) (velocity-variant omn :variant '(ri i r p)) => ((h. eb4 0<ff>0 tasto q g3 ff ponte) (-e) (q gs4 fp tasto) (-s) (q a5 ffp) (-e) (q bb4 fffp) (-s) (q cs5 pf) (-s q. e5 fp -e.) (q cs5 pfp h. d5 p) (-q h. c5 pp) (h. gs3 f< ponte -e a4 0<fff>0 tasto) (h. fs5 mf q bb3 0<ff>0 ponte) (q c5 pfp tasto h. e4 p) (-e) (q cs4 fp h d5 pp>pppp) (h. f4 ffff>ff)) ----------------------------------------- Fix to RESPELL and chord sort function and handful of new dynamic symbols. To see the list of all the velocity and dynamic symbols please go to: Documents/1. OMN The Language/2. Four Elements/3rd Element - Velocity More optimisation and minor bug fixes. Best wishes, Janusz
×
×
  • Create New...

Important Information

Terms of Use Privacy Policy