-
marqrdt started following Formatting Lisp code , Weird notation behavior with chordize , Additional method of specifying key signature and 1 other
-
Weird notation behavior with chordize
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
-
-
Additional method of specifying key signature
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.
-
Incorrect pitch notation for minor key in def-score
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
-
-
Unexpected behavior in integer-to-pitch
Awesome! 100% problem solved 😄
-
Unexpected behavior in integer-to-pitch
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
-
Fuction for sequence polarity
This is excellent -- and the feature to accept lists of lists is very helpful -- thank you 😀
-
-
-
-
Fuction for sequence polarity
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
-
-
Formatting Lisp code
Thanks -- that seems to work. It doesn't always give me what I expect, but I'm a fairly novice Lisper LOL.
-
Formatting Lisp code
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.
-
-
-
Timeframe to run on Catalina
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.
-
License key for 1.3 upgrade
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?
-
License key for 1.3 upgrade
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?
-
Permutations
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
-
-
Forcing certain notes flat or sharp
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.
- Selection from lists of varying lengths
marqrdt
Members
-
Joined
-
Last visited