Jump to content
Sign in to follow this  
opmo

Opusmodus version 1.2

Recommended Posts

 

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

 

Share this post


Link to post
Share on other sites

cool!!! thanx a lot!

andré

Share this post


Link to post
Share on other sites

so appreciated...this is splendid indeed!

 

Share this post


Link to post
Share on other sites

Congratulations to the whole Opusmodus team for the great work!

 

- Rangarajan

Share this post


Link to post
Share on other sites

Can't wait to get into the new functions..!

Share this post


Link to post
Share on other sites

Thanks for this work,  it's really great.

Didier 

Share this post


Link to post
Share on other sites

"And finally for night composers we have added the flexible background colorisation option: Toggle Dark. "

Sorry but i don't find this function...Where is it?

Thanks

Share this post


Link to post
Share on other sites

You find the 'Toggle Dark' option in the the Preferences/Fonts&Colors.

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Sign in to follow this  

×
×
  • Create New...