Jump to content
View in the app

A better way to browse. Learn more.

Opusmodus

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

All Activity

This stream auto-updates

  1. Today
  2. Hi, does anyone has by any chance a drum kit def-score template which is compatible with Musescores Instruments "Drum Kit (large)"? Thanks for help. Achim
  3. born started following Percussion Template
  4. Yesterday
  5. No replies on this one yet? I don't use this technique myself but you can use lists of lists to combine time-signatures with the three-element list option - see the def-score helpfile: time-signature is either a two list, e.g. (4 4), or a list of three-lists, e.g. ((4 4 3) (4 8 1) (3 4 1)), where the first two element of each list are the numerator and denominator of the time signature, and the element is the number of bars. The bar count maybe omitted from the final time signature. so you could do-- :time-signature ((3 4 1) (1 8 1) (4 4 1) (1 16 1)) As a rule, the Lisp nested lists allow you to combine in different ways - but check the relevant help files for the sorts of options. This is integers in lists so straightforward. bw Andrew
  6. Last week
  7. nico joined the community
  8. SonicShang joined the community
  9. Earlier
  10. I've searched the archive and saw that there was some discussion about implementing nested tuplets for version 2.0, but nothing that ever indicated that they were actually implemented. I cannot seem to make them work with version 4.0 no matter what I try. Should they work? If so, would someone be willing to post an example? Thanks, -Beth
  11. BethD started following Nested tuplets?
  12. loancahvsz806 joined the community
  13. Hi Julio, One possibility is to use the MAYBE-SECTION function within your function. However, Janusz has more powerful tricks to add :section and :exclude in functions. 😊 Additionally, I believe it would be beneficial to include a slot for possible intervals in this function, similar to the ones we have in the length-divide and length-subdivision functions. Best Stéphane
  14. Vani started following torstenanders
  15. Here is what I need ! (setf mat '((h c4 q. d4 e e4 -q w c4 h d4 q e4 -q)(h c4 q. d4 e e4 -q w c4 h d4 q e4 -q)(h c4 q. d4 e e4 -q w c4 h d4 q e4 -q))) (do-section '(0 1 0) '(motive-subdivision x '(1/8)) mat)
  16. Janusz, is there some general function to apply selectively any function to a list ? It would be useful in conjunction to this. For example, selectively applying the motive-subdivision in the first and third measure of a list while mantaining the rest of the list original. A kind of general bypass to any kind of list. Thanks in advance,
  17. Already in my extensions folder ! Thanks a lot ! Very inspiring !
  18. I'm just starting out with OMN so please bear with me here. I don't see a way to represent additive meters like 3/4+1/8 or 4/4+1/16 in the :time-signature argument to def-score. Is there a way to do this? Thanks, -Beth
  19. Dear Jesper, Thanks a lot for your beautiful solution. It worked great ! Nice examples too ! Janusz, please put this in the core system in the next update if everybody agree ! Best, Julio
  20. a (perhaps poor) attempt at a function. Jesper (defun motive-subdivision (omn-mat val &optional (time-sig '(4 4))) (let* (tms v (time (if (atom (car omn-mat)) time-sig (get-time-signature omn-mat))) (seq (single-events (omn-merge-ties (flatten-omn omn-mat)))) (vl (list! val)) (vlen (length vl))) (omn-to-time-signature (loop for x in seq and i from 0 do (setf v (nth (mod i vlen) vl)) (setf tms (/ (omn-encode (car x)) v)) collect (if (and (integerp tms) (> tms 1)) (append (list v) (cdr x) (make-list (1- tms) :initial-element (cadr x))) (progn (decf i) x))) time))) (setf mat '(h c4 q. d4 e e4 -q w c4 h d4 q e4 -q)) (motive-subdivision mat '(1/8)) (motive-subdivision mat '(1/16)) (motive-subdivision mat '(1/12 1/8 1/16)) (motive-subdivision (omn-to-measure mat '(5/8 3/4)) '(1/16)) (motive-subdivision mat '(1/12 1/8 1/16) '(5 4)) (setf mat2 '((w g4 tie) (q g4 e bb4 h eb5 e gs4 tie) (h.. gs4 -e) (q cs5 fs5 h a4 tie) (h. a4 e eb5 g4 tie) (q. g4 he bb4 tie) (q. bb4 -e q e5 a4) (w cs5 tie) (q cs5 e fs5 h bb4 e eb5 tie) (h.. eb5 -e) (q g4 c5 h e5 tie) (h. e5 e gs4 cs5 tie) (q. cs5 he fs5 tie) (q. fs5 -e q a4 d5) (w g4 tie) (q g4 e c5 h eb5 e gs4 tie) (h.. gs4 -e) (q cs5 e5 h a4 tie) (h. a4 e eb5 g4 tie) (q. g4 he c5 tie) (q. c5 -e q e5 a4) (w cs5 tie) (q cs5 e fs5 h bb4 e eb5 tie) (h.. eb5 -e) (q g4 c5 h e5 tie) (h. e5 e gs4 cs5 tie) (q. cs5 he fs5 tie) (q. fs5 -e q a4 d5) (w g4 tie) (q g4 e bb4 h eb5 e gs4 tie) (h.. gs4 -e) (q cs5 fs5))) (ps 'gm :p (list mat2 (pitch-transpose -7 (motive-subdivision mat2 '(1/4 1/20 1/16 1/8 1/32)))) :tempo 132 :time-signature '(4 4) ) (setf mat3 '((w c3a3c4eb4e4g4 p tie+ten) (q c3a3c4eb4e4g4 p e d2d3g3bb3d4g4 mp marc+ten h d3cs4eb4g4gs4bb4 marc+ten e d3bb3eb4gs4bb4eb5 tie+marc+ten) (h.. d3bb3eb4gs4bb4eb5 mp -e) (q g3d4fs4gs4a4cs5 mp marc+ten g3cs4fs4a4cs5fs5 marc+ten h g3c4d4fs4g4a4 tie+marc+ten) (h. g3c4d4fs4g4a4 mp e c3e3a3cs4e4a4 p ten c4e4g4bb4c5eb5 tie+ten) (q. c4e4g4bb4c5eb5 p he d2d3g3bb3d4g4 mp marc+ten+tie) (q. d2d3g3bb3d4g4 mp -e q eb3c4eb4fs4g4bb4 p ten eb3c4e4a4c5e5 ten) (w g3d4fs4gs4a4cs5 mp tie+marc+ten) (q g3d4fs4gs4a4cs5 mp e c3a3cs4fs4a4cs5 p ten h c4g4bb4cs5eb5fs5 ten e c3fs3bb3eb4fs4bb4 tie+ten) (h.. c3fs3bb3eb4fs4bb4 p -e) (q eb3a3c4eb4e4g4 p ten eb3g3c4e4g4c5 ten h eb4fs4a4c5cs5e5 tie+ten) (h. eb4fs4a4c5cs5e5 p e gs3cs4e4a4cs5e5 mp marc+ten g2a3cs4eb4fs4gs4 tie+marc+ten) (q. g2a3cs4eb4fs4gs4 mp he c3a3cs4fs4a4cs5 p ten+tie) (q. c3a3cs4fs4a4cs5 p -e q fs3g4b4cs5d5fs5 mp marc+ten d2e3a3d4e4a4 marc+ten) (w eb3a3c4eb4e4g4 p tie+ten) (q eb3a3c4eb4e4g4 p e g2d3g3c4d4g4 mp marc+ten h g3cs4eb4g4gs4c5 marc+ten e g3c4eb4gs4c5eb5 tie+marc+ten))) (ps 'gm :p (list (pitch-transpose 12 (subseq mat2 0 16)) (motive-subdivision mat3 '(1/4 1/8))) :tempo 132 :time-signature '(4 4) )
  21. microcompose472 joined the community
  22. Dear All, Here is a proto-function idea... If Janusz or someone are interested in transform it in a core function, I think it could be interesting... Sometimes I like to take a motive or chorale texture and use it to make a kind of accompaniment or texture ala Reich. I created my way to do it, but it could be perfected in a better function and integrated in the core system. Here is the idea: ;; Motive (setf mat '(h c4 q. d4 e e4 -q w c4 h d4 q e4 -q)) ;; small value (setf fig-value '(e)) The "proto-function". What I could not achieve was how to make it respect the rests in the motive, but it works for generating the texture, respecting the pitch and length boundaries of the motive. (flatten (make-omn :pitch (omn :pitch (omn-to-time-signature mat (get-time-signature (omn-to-measure (length-legato mat) (flatten (length-legato (omn :length mat))))))) :length (omn-to-time-signature (length-span (get-span mat) (gen-repeat 200 fig-value)) (get-time-signature (omn-to-measure (length-legato mat) (flatten (length-legato (omn :length mat)))))) )) RESULT (e c4 mf c4 c4 c4 e d4 mf d4 d4 e e4 mf e4 e4 e c4 mf c4 c4 c4 c4 c4 c4 c4 e d4 mf d4 d4 d4 e e4 mf e4 e4 e4) It could be perfected to result this: (e c4 mf c4 c4 c4 d4 d4 d4 e4 -q e c4 c4 c4 c4 c4 c4 e c4 c4 d4 mf d4 d4 d4 e4 e4 -q) Same texture with the fig-value set do 16th note (setf fig-value '(s)) Best wishes, Julio
  23.    Vani reacted to a post in a topic: Use of various kinds of alternative templates
  24. Edu joined the community
  25. y2j joined the community
  26.    Vani reacted to a post in a topic: Logic Pro X 48 Midi Instruments Template
  27. Nicksnow99 joined the community
  28. MilenElen joined the community
  29. Thank you for the feedback. I have had that work. In particular rebooting helped briefly, but it just keeps coming back! I did also confirm that the MIDI Mode is Off in the MIDI Sync tab in Settings. I believe that's what we're talking about.
  30. yuqian joined the community
  31. opmo replied to etu's topic in Ncode
    loop macro isn’t very Lispy, so it isn’t really suitable for Ncode. We could add simple loop templates like repeat etc. but this can be done with other functions.
  32. Set the MIDI clock to OFF: Mode Off
  33. cdg joined the community
  34. close and restart Opusmodus.
  35. Am I doing something weird, or is it normal for the MIDI player to skip notes and play erratically like this (evidence in video below)? I only started noticing it recently. I'm running OpusModus on a MacBook Pro (Tahoe 26.1) M1 with 32 GB of RAM. This particular work is set up as follows, not including all the variable definitions: (def-score drums (:key-signature 'chromatic :time-signature '(4 4) :tempo 120) (kik :omn bd :sound 'gm :channel 10 :program 0 :port 0) (snr :omn sn) (hht :omn hh) (clap :omn clp) (ohht :omn ohh) (clav :omn clv) (hht2 :omn hh2) ) (display-midi 'drums) Thank in advance for any advice, Brenden opusmodus performance issues.mov
  36. etu posted a topic in Ncode
    It would be fun if we could get instant feedback when changing function parameters. For example if I press enter in a parameter field and the graph window is open, it updates with the new result. Or, clicking the Refresh All button refreshes the graph view if it's open or even the notation view. I know instant feedback isn't the intent of a program like Opusmodus, but Ncode is breaking new ground! I think this would be a fun interactive experience, if it's possible.
  37. etu posted a topic in Ncode
    Could I get an example of the proper syntax of the body of the loop function?
  38.    etu reacted to a post in a topic: adding existing variables to new functions
  39. The code colorization works only at the Opusmodus editor level.
  40. Done in 4.0.30673 Contextual variable insertion (Function and Argument fields) To reuse existing history variables while composing a new function call, NCODE provides a contextual insertion menu in the Function and Argument fields. How to use: right-click inside the Function field or an argument field to open a contextual menu of available history variables. Insert behaviour: selecting a variable inserts its name at the current caret position. The existing field text is preserved (it is not replaced). Purpose: this supports rapid reuse of previously computed materials without recalling (loading) the variable’s originating function. Notes: insertion is purely textual. It does not evaluate the function and it does not alter the history selection.
  41. I like the automatic variable name generator. Since the intent of NCODE is to facilitate exploring musical ideas quickly in an interactive interface, would it make sense to facilitate adding existing variables to new functions? Either drag and drop, point and click, or drop down list, or similar.
  42. Hello is there a way to export the code in color as a PDF? When I print it to PDF it comes out black and white. But it would be extremely helpful if I can print it to PDF in color. Thank you!
  43. Additional Ncode functionality (Ncode Manual): 2.2.4 SETF mode, templates, and pages NCODE provides a template-driven mode for constructing structured values via SETF pages. This mode is used when the Function field is SETF and a template is selected. Rather than entering a single expression, the user fills a set of pages; NCODE then reconstructs a quoted value and evaluates a (setf …) form. Figure 3 SETF mode, templates and pages. SETF pages provide a UI method for building complex, repeatable list structures (collections of labelled items) without manual list syntax. This is particularly useful when the value is naturally expressed as multiple items that must be ordered. Templates A template defines: the number and organisation of pages, and the fields available on each page (key–value pairs). Selecting a different template changes the page layout and the meaning of the fields. The selected template and page contents are saved in the .omnc session and restored when reopened. Each page corresponds to one logical item in the resulting value. Next page creates a new item. Remove page removes an item. Empty pages are ignored when the final value is constructed. Field values Fields accept numbers, strings, keywords, lists, and symbols. Symbols entered without a leading quote may be treated as variable references (for example, previously stored history variables). When a literal symbol is required, enter it as a quoted symbol. Constructed value When evaluated, NCODE converts the populated pages into a single quoted form: if one page is populated, the value becomes a quoted single item; if multiple pages are populated, the value becomes a quoted list of items. NCODE then evaluates the corresponding (setf …) form, storing the result in the history like any other entry. Reproducibility SETF pages are stored as structured page data in the session. When reloading a session or using Refresh All, NCODE reconstructs the same quoted value from the saved pages and re-establishes consistent bindings. https://opusmodus.com/forums/ncode/ NCODE is still in beta, but with every update, it is becoming a more stable tool. Best wishes, Janusz --- Here are few files to play with. Add this file into Media/MusicXML folder: Webern-Op.5.xml Add this files into the Media/Ncode folder: Maderna.omnc Tonnetz3.omnc Ulam-Perc.omnc Voice-Variant.omnc MusicXML.omnc
  44. OK, thanks for help! My eyes were too much fixed on (asdf:load-system :tot). With etu's fix I now could evaluate both Stephane's and etu's scores. Henry

Copyright © 2014-2026 Opusmodus™ Ltd. All rights reserved.
Product features, specifications, system requirements and availability are subject to change without notice.
Opusmodus, the Opusmodus logo, and other Opusmodus trademarks are either registered trademarks or trademarks of Opusmodus Ltd.
All other trademarks contained herein are the property of their respective owners.

Powered by Invision Community

Important Information

Terms of Use Privacy Policy

Account

Navigation

Search

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.