Skip 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.

Function Examples

Functions, arguments, values and results

  1. I've been having a long session with Opusmodus ChatGPT. My aim has been to make a process driven score with a group of functions, from which would randomly be selected one to produce patterns for each section. I have two versions of gen-euclidean-omn, one getting argument values from outside lists and one inside let-form, and one version of polygon-rhythm. Things have been developing quite complicated, even ChatGPT haven't found a solution. In the resulting omn '-markings have been expressed with quote-word, which doesn't produce any score. The last hint from ChatGPT was to clean the result with replace-quote function, which doesn't work either. In score example you see t…

  2. Hello , I try to write a function based on tonal expansion from Schillinger system of musical composition , with little success , do you have any idea how to write it for Opusmodus , i attached several example of expansion E0 E1 ...... E5 from the book Thank you Patrick Scale Tonal Expansion .pdf

  3. Started by david,

    Hi, I don't understand why I have a difference between my output (diatonic-chord '(:f Imaj7 ii7) :inv '(0 0)) =>(f4a4c5e5 g4bb4d5f4) and my snippet which displays a different voicing with f on basse of the second chord. Thank you for your help.

  4. It would be very useful in replace map an option to automatically replace-map all over octaves , i mean (Replace-map "(( c4 e4) (d4 f4 ) (e4 g4 ) ....... (b4 d5) (rnd-sample 12 '( c4 d4 e4 f4 g4 a4 b4 )) would map all the pitches to all octaves from the mapping origin and to the mapping destinations , instead of writing all of them by hand . Thanks Patrick

  5. Hello i am looking for a function which generate chords third by third from a scale pitch list For example : ( chord maker '3 '(c4 d4 ds4 f4 fs4 g4 gs4 a4 as4)) which would give as result ===>. ( c4ds4fs4 d4f4g4 ds4fs4gs4 f4g4a4 fs4gs4as4 g4a4c5 etc......) ( chord maker '4 '(c4 d4 ds4 f4 fs4 g4 gs4 a4 as4)) which would give as result ===>. ( c4ds4fs4gs4 d4f4g4a4 ds4fs4gs4as4 f4g4a4c5 fs4gs4as4d5 g4a4c5ds5 etc......) Thank you Patrick Mimran

  6. Started by PatrickMimran,

    how may i assign for example (12 1) to all bars of the composition instead of only bar one ? Or from bar 1 to bar x (counterpoint patterns '(((8 2 3 5) :harmony major) ((4 2 2 6) :harmony major) ((1 8 7 *) :harmony major) ((1 2 * 8) :harmony major) ((1 2 * 8) :harmony major) ((1 1 * 1) :harmony major)) :global-methods '((fl) (cl) (hn) (vc)) :global-polyphony '((1 p) (2 o) (10 o) (11 o) (12 1) (24 o) (36 o )(0 o)) :iterate t :index 'v1-) Thank you Patrick

  7. Hello i would like to divide a series of lengths into bar measure signature like 4/4 or 6/8 etc... But i would like to cut the overlapping lengths over the bar measure if any . I tested omn-to-measure but it doesn't cut oeverlap lengths over the measure Thank you Patrick

  8. Started by david,

    Hi, would it be possible to get the same result as harmonic-progression with the diatonic-chord function? thanks for your help (setf a (harmonic-progression '(1 6 2 5 3 6 2 5 1) scale :base 1 :size 3 :step '((2 2)))) (setf cad1 (diatonic-chord '(:c I vi ii V III vi ii v I)))

  9. Started by RST,

    Here is a small question for the gurus of Opusmodus. I am developing sketch materials for some piano music (a solo work and also a work for three pianos). I am generating material as 'rh and 'lh using the piano-solo-layout. What I am trying to figure out is how to make the layout three staves and to place the music by register into the three staves, so that the pianist can work out the fingering and hand-crossing more easily and effectively during the sketching and feedback process. Can anyone point me in a good direction? With thanks!

  10. Started by born,

    In earlier versions of OM there was a function called random*. This seems to be gone. Does anybody remember what it did? Thanks for a hint. Achim

  11. Started by david,

    Hi, I can't get this function to work with an error message (setf 000504b "~/Opusmodus/Media/MIDI/Bach/Chorals/000504b_.mid") (midi-to-omn 000504b :instrument 1)

  12. Started by david,

    Salut, J'aimerais utiliser la fonction omn-to-time-signature directement dans mon code Gr, si quelqu'un peut m'aider. Merci ! ;;;découpe de barre (setf time-signatures (gen-repeat 2 '((2 4 1) (3 4 1)(2 4 1)(2 4 1)(2 4 1))) ;;;11/4 bar trop long (setf Gr (butlast (omn-à-mesurer (make-omn :pitch (omn :pitch (omn-à-mesurer (boucle pour x dans tétra collecter (filtre-répéter 1 (rnd-order x :type :pitch :seed 5))) '(1/4 1/4 1/4 1/4 1/4 1/4 1/4 1/4 1/4 1/4 1/4 1/4 1/4 1/4 1/4 1/4 1/4 1/4 1/4 1/4 1/4 1/4 1/4 1/4))) :length (omn :length (omn-à-mesurer …

  13. Started by o_e,

    Hi, Is it possible to write a function which gives the following result: ((1)(1 2 2)(1 2 2 3 3 3)(1 2 2 3 3 3 4 4 4 4)(1 2 2 3 3 3 4 4 4 4 5 5 5 5 5))etc. Thanks for any suggestions!

  14. Started by TomTolleson,

    Hello! I've been coding in python for two weeks for work and I'm now having trouble figuring out what I'm doing wrong in my lisp loops. Cursor.ai isn't helping debug my lisp at all. I'm trying to loops through scales such as (setf a-pitches (loop for note in scalea collect (list note (+ note 4)))) And it's not evaluating. I was hoping to do this in OpusModus with a little help from cursor for lisp but that's not yielding good results. There's probably an OM function I'm not thinking of. Here's the whole set of functional code. Any advice is appreciated. ;;;---------------------------------------------…

  15. Hello, I'm trying generate midi to play Amplesound guitars where each midi event is on a channel per string basis. 1st string is midi channel 1, 2nd string midi channel 2. I tried doing it the way I pasted below, but the midi ends up being 6 instruments rather than 1 instrument with notes on 6 channels. So that doesn't work. Is there a way to have articulations for notes, translate into a midi channel? Or any other ideas? (setf 1-string '(-h e4)) (setf 2-string '(-eq q c4 eq c4)) (setf 3-string '(-q h g3 q g3)) (setf 4-string '(-e qh e3 e e3)) (setf 5-string '(q. c3 f e c3 p h c3 f)) (setf 6-string '(-w))…

  16. Dear Friends, I´m trying to make a function to get the complementary diatonic set for a diatonic chord. For example, if you relate the key of C major (C D E F G A B) with the chord Cmaj7 (C E G B), the complementary set is (D F A). Elliott Carter did this a lot in his Harmony Book, making all kinds of complementarities. This works for comparing stuff. Is there something easier in the system ? For comparing a sequence of chords in relation to a sequence of tonalities for getting the difference ? (defun compare-list-pairs (list-pairs) (loop for (list1 list2) in list-pairs collect (set-difference list1 list2 :test 'equal)))…

  17. Started by HenryT,

    ChatGPT made this function. It works if you change :forte to :pitches. But the results will also be :pitches type. Is there any way to find a Forte name for a set consisting of numbers or pitches? Pcs-analysis of course, but it has to be used one set at a time. (defun find-pitch-classes-with-interval (interval-value interval-class cardinality) (let* ((pitch-sets (pcs-cardinal cardinality :forte)) ; Retrieves sets in Forte notation (matching-sets (remove-if-not (lambda (set) (let ((vector (interval-vector set))) (and (>= (nth interval-class vector) interval-value)))) pitch-sets))) match…

  18. There are 10 functions that have a key parameter :assoc. None of the documentation is particularly clear on what it is or what it does. Most of the functions just list that it is an integer and that it defaults to 12. The only other description that is sometimes added is "row size," but that description is also attached to the :mod key parameter for a number of the functions. I ran the following code to generate a report of how :assoc impacts the row-variants function when run on ordered intervals under various levels of transposition: (pprint-expression (loop for x from 1 upto 11 collect (list (concatenate 'string "Set: (0 " (write-…

  19. Started by david,

    Hello, I am working on a 12-bar sequence based on the harmonic grid of Charlie Parker's "Blues for Alice." I have a list of pitches in sixteenth notes that correspond to the chords of the piece: (setf alice-chord4 '((s fs4 g4 b4 d5)(s bb4 b4 d5 fs5)(s cs5 d5 fs5 a5)(s f5 fs5 a5 cs6);GM7 (s f4 fs4 a4 c5) (s ab4 a4 c5 e5)(s bb4 b4 eb5 fs5)(s d5 eb5 fs5 a5);F#m7b5/B7 (s eb5 e5 g5 b5) (s fs4 g4 b4 d5) (s gs4 a4 cs5 e5)(s c5 cs5 e5 g5);Em7/A7 (s cs5 d5 f5 a5)(s e5 f5 a5 c6)(s fs5 g5 b5 d6)(s bb4 b4 d5 f5);Dm7/G7 (s b4 c5 e5 g5)(s eb5 e5 g5 bb5)(s fs4 g4 bb4 d5)(s a4 bb4 d5 fs5);C7 (s b4 c5 eb5 g5)(s d5 eb5 g5 bb5)(s e5 f5 a5 c6)(s ab5 a5 c6 eb6);Cm7/F7 …

  20. Hello, I have a lisp function called convert-chord-symbols-to-notes which works but is outputting backslashes. The function for D#/Eb is as follows (defun convert-chord-symbol-to-notes (chord-symbol) (cond ;; D# / Eb chords ((or (equal chord-symbol 'd#sus2) (equal chord-symbol 'ebsus2)) '(d#4 f4 a#4)) ((or (equal chord-symbol 'd#maj) (equal chord-symbol 'ebmaj)) '(d#4 g4 a#4)) ((or (equal chord-symbol 'd#m) (equal chord-symbol 'ebm)) '(d#4 f#4 a#4)) ((or (equal chord-symbol 'd#7) (equal chord-symbol 'eb7)) '(d#4 g4 a#4 c#5)) ((or (equal chord-symbol 'd#m7) (equal chord-symbol 'ebm7)) '(d#4 f#4 a#4 c#5)) ((or (equal ch…

  21. Started by david,

    Hi, is there the opposite of butlast ?

  22. Started by acrawnsley,

    I'm doing some work (analytically) with Messiaen's finite permutations of sequences (Livre d'Orgue, Catalogue d'Oiseaux etc) - and want to be able to develop more functions in OM to generate versions of the various options that Messiaen sets out in his later writings and that have been also been analysed in a number of academic writings by others. The messiaen-permutation function in OM is really simple to use, but the documentation is pretty minimal and I cannot figure out what specific permutation this function uses? It does not appear to be either of the two standard 'fan' permutations (open or closed) and it only appears to generate one type of permutation…

  23. Started by david,

    hello, I'm looking for a way in the last bar (9) to go to 2/4 despite my 4/4 rhythm, is this possible? (setf name '(#|1|# (s f5 g5 a5 c6 f5 g5 a5 c6) #|2|# (s f5 g5 a5 c6 f5 g5 a5 c6) #|3|# (s f5 g5 a5 c6 f5 g5 a5 c6) #|4|# (s f5 g5 a5 c6 f5 g5 a5 c6) #|5|# (s fs5 gs5 bb5 cs6 fs5 gs5 bb5 cs6) #|6|# (s fs5 gs5 bb5 cs6 fs5 gs5 bb5 cs6) #|7|# (s fs5 gs5 bb5 cs6 fs5 gs5 bb5 cs6) #|8|# (s fs5 gs5 bb5 cs6 fs5 gs5 bb5 cs6) #|9|# (s f5 g5 a5 c6 f5 g5 a5 c6) #|10|# (s f5 g5 a5 c6 f5 g5 a5 c6) #|11|# (s f5 g5 a5 c6 f5 g5 a5 c6) #|12|# (s f5 g5 a5 c6 f5…

  24. Started by RST,

    Greetings all, I am wondering if anyone has worked on the problem of rubato for playback performance.

    • 0 replies
    • 322 views
  25. How to use a user defined function, defined in my def-unfold-set "my-mehods" (in-package :Opusmodus), in the counterpoint function? Example (setf test-pattern '(e c4 d4 e4 f4 g4 a4 b4 c5)) (unfold ' my-mehods '(amb-c6b6) test-pattern) ;; works perfectly, shifting up pitches However how do I use this function amb-c6b6 in the counterpoint function? #|1|# ((2 - 6 5) :methods ( amb-c6b6 - (r t-12) t-12)) ;;error, how to unfold amb-c6b6? Thanks for any idea!


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

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.