Jump to content

jon

Members
  • Joined

  • Last visited

  1.    jon reacted to a video: Spectral Analysis and Music
  2. The code I shared was just what I ran to have OM run through a lot of combinations to see if I could find a pattern to how the :assoc parameter affects the output of functions like row-variant. My interest at this point is exploratory. I'm just trying to see if there's a predictable pattern to how changes to :assoc impact the output. Thanks, Jon
  3. 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-to-string x) ")") (loop for tto in '(i 4 5) collect (list (concatenate 'string "TTO: " (write-to-string tto)) (loop for transpo from 0 upto 11 collect (list (concatenate 'string "T" (write-to-string transpo)) (loop for assoc from 12 downto 1 collect (list (concatenate 'string "assoc" (write-to-string assoc)) (row-variant transpo tto (list 0 x) :assoc assoc)))))))))) I was hoping there would be a discernible pattern, but I couldn't find one. It did not impact the "p" or "r" variants, no matter the transposition, so I removed them from the tto list. For the other three variants, however, it seems to be chaotic. How does that parameter figure into the calculations? When it's at its default of 12, the variants behave as one would expect. But even the inversion of (0 1) gets pretty crazy with smaller values of :assoc (see below). Thank you, Jon S ("Set: (0 1)" (("TTO: i" (("T0" (("assoc12" (0 11)) ("assoc11" (0 12)) ("assoc10" (0 9)) ("assoc9" (0 10)) ("assoc8" (0 7)) ("assoc7" (0 6)) ("assoc6" (0 5)) ("assoc5" (0 9)) ("assoc4" (0 11)) ("assoc3" (0 7)) ("assoc2" (0 7)) ("assoc1" (0 6)))) ("T1" (("assoc12" (11 10)) ("assoc11" (12 9)) ("assoc10" (9 8)) ("assoc9" (10 11)) ("assoc8" (7 10)) ("assoc7" (8 12)) ("assoc6" (11 8)) ("assoc5" (6 7)) ("assoc4" (3 6)) ("assoc3" (8 4)) ("assoc2" (9 12)) ("assoc1" (7 1)))) ("T2" (("assoc12" (10 9)) ("assoc11" (9 8)) ("assoc10" (8 7)) ("assoc9" (11 6)) ("assoc8" (10 11)) ("assoc7" (12 11)) ("assoc6" (4 9)) ("assoc5" (3 8)) ("assoc4" (10 7)) ("assoc3" (4 9)) ("assoc2" (4 7)) ("assoc1" (4 9)))) ("T3" (("assoc12" (9 8)) ("assoc11" (8 7)) ("assoc10" (7 6)) ("assoc9" (12 5)) ("assoc8" (5 12)) ("assoc7" (11 11)) ("assoc6" (9 2)) ("assoc5" (2 1)) ("assoc4" (1 8)) ("assoc3" (6 10)) ("assoc2" (1 8)) ("assoc1" (6 6))))
  4. While we're on the topic, I'd like to point out how well-designed the rnd-order function is. My initial thought was that you'd have to do a mapcar on the the list of sublists in order to avoid just shuffling the order of the sublists. It was great to see in the documentation (which is overall quite excellent for a system this complex) that the default behavior is to shuffle the order within the sublists, but that a key parameter (:list) allowed access to shuffling the order of the sublists. In another system with the same initials, mapcar and lambda modes would be needed to achieve this. (Don't take this as a flame on that other system--I still quite like that system.) Cheers, Jon
  5. Edit: Stephane's answer showed on my feed just as I was hitting send. As a rank amateur, I was happy to see my answer matches his. --- Hi David. I'm a relative newbie to OM, so I can't answer the why. I can only note that it worked when the rhythm was split into nested lists, each a 1/4 duration (to match the nested lists of the pitches), but when both the pitches and rhythms were flattened before the make-omn, it no longer worked. As far as randomizing the pitches, you need to do that before the omn assembly. (setf alice.aligned.rnd (omn-to-time-signature (make-omn :pitch (rnd-order alice.pch) :length alice.rhy :swallow t) '(4 4))) works as you want Cheers, Jon
  6. I think this might get you want you want in the simplest way. Essentially, by extracting the pitches from alice-chord3 and grouping the individual beats of the rhythm, you can then use ":swallow t" to keep the overall rhythm aligned. (setf alice-chord3 '((s g4 b4 d5 g5)(s b4 d5 fs5 b5)(s d5 fs5 a5 d6)(s a4 cs5 e5 a5);Gmaj7 (s fs4 a4 c5 fs5) (s a4 c5 e5 a5)(s b4 eb5 fs5 b5)(s eb5 fs5 a5 eb6); F#m7b5/ B7 (s e5 g5 b5 e6) (s g4 b4 d5 g5) (s a4 cs5 e5 a5)(s cs5 e5 g5 cs6);Em7/A7 (s d5 f5 a5 d6)(s f5 a5 c6 f6)(s g4 b4 d5 g5)(s b4 d5 f5 b5);Dm7/G7 (s c5 e5 g5 c6)(s e5 g5 bb5 e6)(s g4 bb4 d5 g5)(s bb4 d5 fs5 bb5);C7 (s c5 eb5 g5 c6)(s eb5 g5 bb5 eb6)(s f5 a5 c6 f6)(s a4 c5 eb5 a5);Cm7/F7 (s b4 d5 fs5 b5)(s d5 fs5 a5 d6)(s e5 gs5 b5 e6)(s gs4 b4 d5 gs5);Bm7/E7 (s bb4 cs5 f5 bb5)(s db5 f5 ab5 db6)(s eb5 g5 bb5 eb6)(s g4 bb4 db5 g5);Bbm7/Eb7 (s a4 c5 e5 a5)(s c5 e5 g5 c6)(s e5 g5 b5 e6)(s g4 b4 d5 g5);Am7 (s d5 fs5 a5 d6)(s fs5 a5 c6 fs6)(s a4 c5 e5 a5)(s c5 e5 gs5 c6);D7 (s g4 b4 d5 g5)(s b4 d5 fs5 b5)(s e5 gs5 b5 e6)(s gs4 b4 d5 gs5);Gmaj7/E7 (s a4 c5 e5 a5)(s c5 e5 g5 c6)(s d5 fs5 a5 d6)(s fs4 a4 c5 fs5)));Am7/D7 (setf alice.rhy (gen-repeat 4 '((e. s)(-q)(-q)(e. s)(-q)(-q)(e. s)(-q)(-q)(e. s)(-q)(-q)))) (setf alice.pch (omn :pitch alice-chord3)) (setf alice.aligned (omn-to-time-signature (make-omn :pitch alice.pch :length alice.rhy :swallow t) '(4 4))) Cheers, Jon
  7. While playing around with it, I found that this only works reliably when there are no duplicate items in the list to be permuted. So, it's neither perfect nor universally applicable, but as long as the caveat is understood it does the job. Cheers, Jon
  8. Julio, The easiest procedure for eliminating the rotations is to perform the permutations on all but the first (or last) item in the list, and then append that item back to the front (or back) of the list. For example: (defun perms-no-rots (lst) (let ((perms (permute (cdr lst)))) (loop for x in perms collect (append (list (car lst)) x)))) I'm still a Lisp rookie, so there might be better, cleaner, more Lisp-y ways to do it, but it seems to work: (perms-no-rots '(1 2 3 4)) ==> ((1 2 3 4) (1 2 4 3) (1 3 2 4) (1 3 4 2) (1 4 2 3) (1 4 3 2)) (perms-no-rots '(1 2 3 4 5)) ==> ((1 2 3 4 5) (1 2 3 5 4) (1 2 4 3 5) (1 2 4 5 3) (1 2 5 3 4) (1 2 5 4 3) (1 3 2 4 5) (1 3 2 5 4) (1 3 4 2 5) (1 3 4 5 2) (1 3 5 2 4) (1 3 5 4 2) (1 4 2 3 5) (1 4 2 5 3) (1 4 3 2 5) (1 4 3 5 2) (1 4 5 2 3) (1 4 5 3 2) (1 5 2 3 4) (1 5 2 4 3) (1 5 3 2 4) (1 5 3 4 2) (1 5 4 2 3) (1 5 4 3 2)) Edit: Here's another version I came up with after sending the version above. It is maybe a little nicer to read since I replaced `(append (list....` with `(cons...` : (defun perms-no-rots (lst) (let ((perms (permute (cdr lst)))) (loop for x in perms collect (cons (car lst) x)))) Cheers, Jon
  9. Thanks @Stephane Boussuge! That makes sense.
  10. The tonality-map function isn't working as expected on my Intel MacBook Pro (Monterey 12.6.6) in Opusmodus (v3.0.29006). I have an Opusmodus v2.2.26941M on an Intel iMac (Monterey 12.6.7) that I have tested and it yields something more like I'd expect. Did the default behavior of tonality-map change between versions? Below, I've included sample code along with the different output from the two different versions. Thanks, Jon ;;; code -- common between versions (setf progression (harmonic-progression '(1 6 4 2 5 1 2 4 5) '(c4 natural-minor) :size 7 :step 1 :base 1 )) (setf progression-list (mclist progression)) (setf accomp-shell '((q c3 p g3e4 c4e4 e3c4))) (setf accomp-phrase (gen-repeat 8 accomp-shell)) (setf accomp-map (tonality-map progression-list accomp-phrase)) ;; Opusmodus 3 output OM 2 > harmonic-progression (c4d4eb4f4g4gs4bb4 gs4bb4c5d5eb5f5g5 f4g4gs4bb4c5d5eb5 d4eb4f4g4gs4bb4c5 g4gs4bb4c5d5eb5f5 c4d4eb4f4g4gs4bb4 d4eb4f4g4gs4bb4c5 f4g4gs4bb4c5d5eb5 g4gs4bb4c5d5eb5f5) OM 3 > mclist ((c4d4eb4f4g4gs4bb4) (gs4bb4c5d5eb5f5g5) (f4g4gs4bb4c5d5eb5) (d4eb4f4g4gs4bb4c5) (g4gs4bb4c5d5eb5f5) (c4d4eb4f4g4gs4bb4) (d4eb4f4g4gs4bb4c5) (f4g4gs4bb4c5d5eb5) (g4gs4bb4c5d5eb5f5)) OM 4 > ((q c3 p g3e4 c4e4 e3c4)) OM 5 > gen-repeat ((q c3 p g3e4 c4e4 e3c4) (q c3 p g3e4 c4e4 e3c4) (q c3 p g3e4 c4e4 e3c4) (q c3 p g3e4 c4e4 e3c4) (q c3 p g3e4 c4e4 e3c4) (q c3 p g3e4 c4e4 e3c4) (q c3 p g3e4 c4e4 e3c4) (q c3 p g3e4 c4e4 e3c4)) OM 6 > tonality-map ((q c4 p c4f4 c4f4 c4) (q gs4 p gs4 gs4 gs4) (q f4 p f4 f4 f4) (q d4 p d4f4 d4f4 d4) (q g4 p g4 g4 g4) (q c4 p c4eb4 c4eb4 c4) (q d4 p d4eb4 d4eb4 d4) (q f4 p f4 f4 f4)) ;; Opusmodus 2 output ? harmonic-progression (c4d4eb4f4g4gs4bb4 gs4bb4c5d5eb5f5g5 f4g4gs4bb4c5d5eb5 d4eb4f4g4gs4bb4c5 g4gs4bb4c5d5eb5f5 c4d4eb4f4g4gs4bb4 d4eb4f4g4gs4bb4c5 f4g4gs4bb4c5d5eb5 g4gs4bb4c5d5eb5f5) ? mclist ((c4d4eb4f4g4gs4bb4) (gs4bb4c5d5eb5f5g5) (f4g4gs4bb4c5d5eb5) (d4eb4f4g4gs4bb4c5) (g4gs4bb4c5d5eb5f5) (c4d4eb4f4g4gs4bb4) (d4eb4f4g4gs4bb4c5) (f4g4gs4bb4c5d5eb5) (g4gs4bb4c5d5eb5f5)) ? ((q c3 p g3e4 c4e4 e3c4)) ? gen-repeat ((q c3 p g3e4 c4e4 e3c4) (q c3 p g3e4 c4e4 e3c4) (q c3 p g3e4 c4e4 e3c4) (q c3 p g3e4 c4e4 e3c4) (q c3 p g3e4 c4e4 e3c4) (q c3 p g3e4 c4e4 e3c4) (q c3 p g3e4 c4e4 e3c4) (q c3 p g3e4 c4e4 e3c4)) ? tonality-map ((q c3 p g3f4 c4eb4 f3c4) (q gs3 p eb4c5 gs4c5 c4gs4) (q f3 p c4bb4 f4gs4 gs3f4) (q d3 p bb3f4 d4g4 g3d4) (q g3 p d4c5 g4bb4 bb3g4) (q c3 p g3eb4 c4f4 eb3c4) (q d3 p gs3f4 d4g4 g3d4) (q f3 p c4bb4 f4bb4 bb3f4)) ?
  11. Thanks @HenryT. Looks like some "light" reading for this summer. It's giving me flashbacks to the DSP course I audited in grad school. -Jon
  12. In the documentation for both the gen-ma-time-series and gen-ar-time-series functions, there are similar passages: What is the SAPA book referenced here? I can't seem to find the right google query to find it. Thanks, Jon
  13. OK. Thanks for the response. Cheers, Jon
  14. That was certainly not the series of responses I expected to elicit with my question. Having worked for software companies of various sizes (though none as small as I suspect Opusmodus to be) I am probably more tolerant than many when it comes to release delays or scheduling hiccups between announcements and license server deployments, etc. My perspective is also probably skewed by years working with and relying on arcane and expensive software by a one-man shop (SCORE, by Leland Smith). Finding ways to continue to run an MS-DOS program as each new iteration of Windows throws up new and exciting roadblocks is the SCORE-user's Intel vs M1. Regardless, my time spent working for software companies and graphic design teams has fostered an outlook where I prefer to have multiple versions available for use whenever possible to ease transition and cope with any compatibility issues (e.g., functions renamed or deprecated). So, I ask again, is it possible to have both v2.x and v3.x installed at the same time on a single machine so that they can be run at different times (not simultaneously)? Thank you, Jon
  15. Greetings! Opusmodus notified me today that the new version was available. Congratulations on the release! Before I upgrade, I'm wondering if it is possible to have both 2.x and 3.x installed simultaneously. Not to run simultaneously, mind you, just to have both versions available. Thank you, Jon
  16. I'm a bit confused. This entire thread is about loading Torsten's libraries (fenv, cluster-engine, cluster-rules, tot). Regardless, I'll reach out to Torsten directly. Thanks, Jon

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