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.

marqrdt

Members
  • Joined

  • Last visited

  1. Hi! I'm encountering a notation glitch/issue that I just can't nail down. I have a function (assign-registers) that assigns a list of pitch-classes to different registers. My goal is to notate them as chords on a Piano Staff as whole-notes. The chords should not have any octave duplications, and in this case should all have eight notes. To illustrate that, I've added a format statement that shows both the list of chords created by the (pitch-transpose -24 (chordize pitch-list))) as well as the original untrnsposed list of pitches. [Note: The OpusModus forum interface wants to consume the asterisks (*) in my variable names. The variables are correct regardless of the actual string shown here] My starting PC-set and octave range is: (setf *my-set* '(0 1 2 3 4 6 7 9)) (setf *octave-range* 3) Here is how I am trying to create the list of chords I want to notate: (dotimes (n 12) (let ((*pitch-list* (mapcar (lambda (x) (integer-to-pitch x)) (assign-registers-nonrec *my-set* octave-range*)))) (setq new-chord (sort-asc (pitch-transpose -24 (chordize pitch-list)))) (setq chord-list (append chord-list (list new-chord))) (format t "Added chord ~d with length ~d :: Pitches: ~a :: Chordized: ~a" n (length *pitch-list*) *pitch-list* new-chord ) ) ) (terpri) (format t "*chord-list*: ~a ~%" chord-list) (setq chords-rh (ambitus-filter '(0 96) chord-list)) (setq chords-lh (ambitus-filter '(-60 -1) chord-list)) (def-score my-pcseq-score (:key-signature 'atonal :time-signature '(4 4 4) :title (format nil "set:~a" my-set) :tempo base-tempo :accidentals :all :ignore-velocity t :flexible-clef nil ) (rh :omn (make-omn :length (gen-repeat num-chords 'w) :pitch chords-rh :velocity '(mp)) :sound 'gm :channel 1 :program 'acoustic-grand-piano) (lh :omn (make-omn :length (gen-repeat num-chords 'w) :pitch chords-lh :velocity '(mp)) :sound 'gm :channel 1 :program 'acoustic-grand-piano) ) ) The output of the line: (format t "Added chord ~d with length ~d :: Pitches: ~a :: Chordized: ~a" n (length new-chord) *pitch-list* new-chord ) seems to verify that the chords have only 8 notes and do not contain any duplicated pitch-classes: Added chord 0 with length 8 :: Pitches: (c7 cs6 d7 eb7 e7 fs6 g6 a6) :: Chordized: (cs4fs4g4a4c5d5eb5e5)gen-weight :seed 623605 Added chord 1 with length 8 :: Pitches: (c7 cs7 d5 eb7 e6 fs7 g7 a7) :: Chordized: (d3e4c5cs5eb5fs5g5a5)gen-weight :seed 415867 Added chord 2 with length 8 :: Pitches: (c6 cs7 d6 eb7 e6 fs6 g7 a6) :: Chordized: (c4d4e4fs4a4cs5eb5g5)gen-weight :seed 537044 Added chord 3 with length 8 :: Pitches: (c5 cs7 d6 eb7 e5 fs7 g7 a7) :: Chordized: (c3e3d4cs5eb5fs5g5a5)gen-weight :seed 497550 And here is the list of chords: chord-list: ((cs4fs4g4a4c5d5eb5e5) (d3e4c5cs5eb5fs5g5a5) (c4d4e4fs4a4cs5eb5g5) (c3e3d4cs5eb5fs5g5a5) (cs3fs3g3d4e4a4c5eb5) (d3g3eb4c5cs5e5fs5a5) (c4fs4cs5d5eb5e5g5a5) (c3a3cs4d4eb4g4e5fs5) (eb3a3d4g4c5cs5e5fs5) (cs3e4c5d5eb5fs5g5a5) (c3d3eb3a3fs4cs5e5g5) (d4eb4e4g4c5cs5fs5a5)) The clearest example is the third chord (c4d4e4fs4a4cs5eb5g5) (chord 2 in the list above). In the attached image, the treble staff contains the correct rendition of the chord (c4d4e4fs4a4cs5eb5g5). But the bass staff '(cs3 fs3 g3) has spurious notes not found in (c4d4e4fs4a4cs5eb5g5) that are also duplicated in the treble staff. Also easily notable is that the previous chord (chord 1) has the C-natural and E-natural duplicated between the two staves. Any ideas are much appreciated. If it solves the duplication problem, it may even be clearer to render these pitch-sets as an ascending series of quavers/eight-notes. If there's an easy way of doing that, that would work just as well. OpusModus weird chord behavior.xml Thanks for any ideas. Regards, Paul M
  2.    marqrdt reacted to a post in a topic: Opusmodus 4.0 (Upgrade)
  3. Hi, I posted this question to the forum a few days ago: https://opusmodus.com/forums/topic/3886-incorrect-pitch-notation-for-minor-key-in-def-score/#comment-13346. The main issue was that OM was respelling my accidentals when I rendered my score with def-score and set the key-signature to '(d minor). For example it was rendering cs4 as db4, etc. I partially solved the problem by setting the key-signature to 'chromatic or 'atonal. Now all the accidentals are rendered correctly as per my OMN. What's missing is that my score does not have a b-flat in the key signature. My suggestion: Allow the key-signature parameter in def-score to specify a custom key-signature such that the OMN rendered in the is not respelled as per a common key signature. This could also allow composers to render uncommon key signatures like those found in some Bartok scores, like just having a b-flat and a-flat with no e-flat. I imagine it could look something like: :key-signature '(bb ab), or ('bb fs) to combine sharps and flats. OM is by far the most powerful software available for algorithmic composition, but I, maybe others, have gotten pretty quick with writing raw OMN to sketch out music I've written on paper or otherwise. In many cases, it can be a more efficient and ergonomic way of entering music than tools like Sibelius which often require switching between a mouse, keyboard (computer or musical). Thanks for taking the time to read this.
  4. Hi, I'm seeing that some of my pitches in OMN are getting re-spelled in def-score. The score below shows that in a score in d minor, the c-sharps are notated as d-flats. If I just view the OMN as a snippet, it's rendered properly. Is there some function I can apply or some parameter in def-score I can pass to force the accidentals to be rendered exactly as I specify in the OMN? My score: (progn (setf main-lh-ver-01 '( (q d2 stacc h d3f3a3 ten) (q e2 stacc h e3g3cs4 ten) (q f2 stacc h f3a3d4 ten) (q fs2 stacc h eb3a3c4 ten) (q g2 stacc h d3g3bb3 ten) (q gs2 stacc h d3f3b3 ten) (q a2 stacc h e3a3cs4 ten) (-h.))) ;(gen-repeat 2 main-lh-ver-01) (def-score waltz-score-example (:title "Waltz Chaconne" :key-signature '(d minor) :time-signature '(3 4) :tempo 160 :layout (bass-layout 'lh)) (lh :omn (gen-repeat 4 main-lh-ver-01) :channel 1 :sound 'gm :program 'acoustic-grand-piano) ) ) If I view the Snippet here: (setf main-lh-ver-01 '( (q d2 stacc h d3f3a3 ten) (q e2 stacc h e3g3cs4 ten) (q f2 stacc h f3a3d4 ten) (q fs2 stacc h eb3a3c4 ten) (q g2 stacc h d3g3bb3 ten) (q gs2 stacc h d3f3b3 ten) (q a2 stacc h e3a3cs4 ten) (-h.))) it's rendered correctly: In the score rendered with def-score, I get this: It's probably something obvious, but I've searched the forum and RTFM'ed with little success. Thanks! Paul
  5.    marqrdt reacted to a post in a topic: Opusmodus 3.0.29556 (split-chord)
  6. Awesome! 100% problem solved 😄
  7. Hi, It's likely I'm not fully understanding the integer-to-pitch function in this case, so any help is much appreciated. I have an arbitrary integer sequence with no repeated elements: (setf test-seq '(13 80 61 81 74 72 46 64 31 47 77 22 19 69 7 2 26 71 33 73 59 55 3 39 62 5 65 44 38 49 14 4 52 53 66 57 29 21 6 78 35 10 41 88 76 9 28 8 15 17 43 25 58 42 12 67 70 20 82 87 63 18 56 16 30 34 86 50 27 84 24 45 51 40 75 85 37 36 23 32 60 68 83 11 54 79 48 1)) ; all the notes on the piano ; I can see that the elements are unique: (equalp (length test-seq) (length (remove-duplicates test-seq))) t ; Here's what I'm failing to understand -- (integer-to-pitch test-seq) should not have any duplicates, but it does: (sort-asc (integer-to-pitch *my-log-seq* :quantize 1/2)) (cs4 d4 eb4 e4 f4 fs4 g4 gs4 a4 bb4 b4 c5 cs5 d5 eb5 e5 f5 fs5 g5 gs5 a5 bb5 b5 c6 cs6 d6 eb6 e6 f6 fs6 g6 gs6 a6 bb6 b6 c7 cs7 d7 eb7 e7 f7 fs7 g7 gs7 a7 bb7 b7 c8 c8 c8 cs8 cs8 cs8 d8 d8 d8 eb8 eb8 eb8 e8 e8 e8 f8 f8 fs8 fs8 g8 g8 gs8 gs8 gs8 a8 a8 a8 bb8 bb8 bb8 b8 b8 b8 c9 cs9 d9 eb9 e9 f9 fs9 g9) Perhaps I'm not fully understanding integer-to-pitch. Is there a better function I can use to map an integer to a unique pitch? Many Thanks, Paul Marquardt
  8. This is excellent -- and the feature to accept lists of lists is very helpful -- thank you 😀
  9.    marqrdt reacted to a post in a topic: Fuction for sequence polarity
  10.    Stephane Boussuge reacted to a post in a topic: Fuction for sequence polarity
  11.    opmo reacted to a post in a topic: Fuction for sequence polarity
  12. OMers, I wrote this function and use it in my composition work. Please feel free to steal use it. It returns the "polarity" of a sequence, defined as the ratio of consecutive uneven and even interval classes (IC) in a sequence. I use this as a way of testing if a generated sequence contains a balanced mix of even or uneven ICs. (defun polarity (in-seq) (when (equal (length in-seq) 0) return 0 ) (let((accum 0) (int-pairs (interval-class in-seq))) (mapcar (lambda (x) (when (evenp x) (incf accum) )) int-pairs) (/ (* accum 1.0) (- (length in-seq) 1)) ) ) Some examples: ;; The polarity of a chromatic scale is 0.0, as there are no even interval classes. OM 9 > (polarity '(0 1 2 3 4 5 6 7 8 9 10)) 0.0 ;; The polarity of a whole-tone scale is 1.0, as there are no uneven interval classes. OM 10 > (polarity '(0 4 8 2 6 10)) 1.0 ;; The polarity of a chromatic scale is 0.0, as there are no even interval classes. OM 9 > (polarity '(0 1 2 3 4 5 6 7 8 9 10)) 0.0 ;; The polarity of a sequence of alternating even and uneven ICs is 0.5. OM 14 > (polarity `(0 6 11 5 10 4 9 3 8 2 7 1 6)) interval-class Right now it only works on sequences of numbers and there's no error handling. I would appreciate very much any advice on a concise and OM-ian way to extend it to accepts either integers or pitch symbols like '(c4 fs4 b4 f5 bb5). Thanks! Paul Marquardt
  13.    marqrdt reacted to a post in a topic: Happy New Year 2024
  14. Thanks -- that seems to work. It doesn't always give me what I expect, but I'm a fairly novice Lisper LOL.
  15. Is there a command or key combination to format Lisp code? I'm still learning the formatting standards for Common Lisp and more complex forms in my code are a total mess. I'm not seeing anything in Help -> Display Commands List... Thanks! Paul M.
  16.    marqrdt reacted to a post in a topic: Apple M1 Arm processor?
  17.    marqrdt reacted to a post in a topic: Variations on Variations (2019)
  18. I see OpusModus 2.0 is scheduled for release soon-- I look forward to some of the new features. I've been running Catalina for several months. I used to have two Macs, where I could have them at different versions, but no I have only one with 10.15 Catalina. It's been several months since I've been able to use OpusModus. I'd like to know: 1. Will there be a pre-2.0 version that will be released with compatibility with OS Catalina 10.15? 2. If so, will it be a free or paid upgrade? 3. Will 2.0 be compatible with OS Catalina 10.15 when it comes out? Thanks in advance, Paul M.
  19. Hi, So I found what seems to be my license key. It's a string of 68 numbers and capital letters. When I paste it in the verification field to buy the upgrade, it returns "License Key can't be found in our database". Is there an alternate method to upgrade?
  20. Hi, I have OpusModus 1.2.23428 and am considering the upgrade to 1.3. It asks for a license key, but I can find it in the application itself (Help, About, Register, etc) or in other common places, such as $HOME/Library/Application Support, etc. What's the best way for me to get my license? Thanks! Paul M. Hot diggity dawg-- found the license email from 2015! It's safely stored away now 🙂 In case I didn't, is there a recovery process?
  21. I find the permute function very useful, but I've some across the need to work with a very large number of permutations (all possible 12-note rows, but other situations as well). I think it would be great to have a companion function, something like nth-permutation, that returns the nth permutation of a list, as we know there will be (setq num-perms (factorial (length my-list))) permutations, and they can be traversed in a simple (loop from i upto num-perms (do-stuff (nth-permutation i))). For numbers beyond 10, the list is too large to store in memory. The Wikipedia article on permutations has some excellent strategies on cycling through all permutations one at a time and even offers some pseudo-code. I'm working on one in Common Lisp but I'm pretty much of a newbie. I'll gladly share it if I can get it working. Thanks! Paul
  22.    marqrdt reacted to a post in a topic: The Planet
  23. Is there a function or some parameter I can set to avoid note collisions in chords? For a very simple example, to re-notate the chord (c4 cs4 e) as C, D flat, E. If not, another question-- maybe a way to set all D sharps to be notated as E flat, etc. Thanks! Paul M.

Copyright © 2014-2025 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

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.