Jump to content

JimmyTheSaint

Members
  • Posts

    19
  • Joined

Recent Profile Visitors

The recent visitors block is disabled and is not being shown to other users.

  1. Stephane, you change instrumentation by uncommenting the desired instrumentation in the variable *orchestrations*. I can't see where and how *orchestrations* gets used in the code. I guess this means there are other files involved (somehow) in the demo, and that we're waiting until the video pack is released to learn and use this utility, right? If so, I'm happy to wait. If I'm missing something, I would like to ask about that because the only way I can figure out to audition different instrumentation while lived coding involves cumbersome commenting/uncommenting.
  2. OK, thanks, for digging into that. I guess this has become more a question of how the code works because I'm rusty at that. For practical musical considerations, the dev said, "it is better for all scores to use def-score instance" instead of the ps function. So I guess you generally recommend using counterpoint for altering sequences and sticking with def-score for juggling instrumentation and orchestration?
  3. I understand, and that it's best for me to work from your proper way. My question is: how does my example generate an arbitrary number of bars when your example's number of bars is limited to the cardinality of its dictum? I can't see what causes such a dramatic difference in behavior between these two similar pieces of code.
  4. In my original question, the dictum is only 4 bars long: (progn (setf my-dictum '(((- 1 2 -)) ((1 - - 2)) ((2 - - 2)) ((1 2 2 1)))) (setf times (* 10 (length my-dictum))) (setf my-root -0) (setf my-intervals '(0 1 4 7)) (setf my-pitches (pitch-transpose my-root (integer-to-pitch my-intervals))) (setf my-lengths (rnd-sample times '((q e) (q q)) :seed 356)) (setf my-articulations (span my-lengths '(-))) (setf my-velocities '(p mp mf f mf mp)) (setf my-sequence (make-omn :length my-lengths :pitch my-pitches :velocity my-velocities)) (setf my-chord-sequence (make-omn :length my-lengths :pitch (gen-chord2 '(2 4) '(2 2 3 4) '((c4 cs4 e4 g4) (c4 cs4 e4 g4))) :velocity my-velocities :articulation my-articulations)) (setf my-time-signature (get-time-signature my-sequence)) (counterpoint (list my-sequence my-chord-sequence) my-dictum :global-methods '((fl) (cl) (hn) (vc)) :index 'voice1-) (ps 'gm :fl (list voice1-1) :cl (list voice1-2) :hn (list voice1-3) :vc (list voice1-4) :tempo 161 :time-signature my-time-signature) ) Then by making times a multiple of the dictum's length, I scale up the total number of bars. I asked the original question because the time signature wasn't spanning (which you addressed), but now my total number of bars doesn't scale, or even go beyond 6. I can't see the difference why your change limits it to 6 when my original was any multiple of the dictum's length that I wanted (but without the time signatures I wanted).
  5. OK, I understand about the (apparent) error, but I still have my question about the strange behavior: When I do cmd-E to evaluate the PS function, the score only has six bars. Regardless of whatever times evaluates to, the score only shows six bars. I've simply copied and pasted Stephane's code from above. When I did that last week, I got many more bars, depending on the multiplier I enter for times. Now, however, I just get six bars. When I evaluate my-sequence and my-chord-sequence separately, they have much more omn than six bars, so I'm certainly missing something trivial here. I can't figure out what it is because when I simply cut and paste Stephane's code (with the ps, not the one with the def-score), I get this strange behavior: six bars regardless of what the omn evaluates to. I've attached the file. Do you see some typo in it or something? I use the .lisp extension because I prefer OM files to open in Emacs when launched from the Finder. counterpoint-example-orig.lisp
  6. This is strange. When you first posted this solution, I got the informative output, and the number of bars depended on what I set for times. Today, when I cut and paste your code, no matter what I set for times, when I do cmd-1 with the cursor after the last parenthesis, I only get six bars of output. What am I not seeing? I also get this error message: OM 25 > audition-musicxml-omn-snippet Error: While trying to compute notation: SeeScore returned error code 3 at line 2, column 626: "expected element not encountered" 1 (abort) Abort display notation. 2 Return to top loop level 0. Type :b for backtrace or :c <option number> to proceed. Type :bug-form "<subject>" for a bug report template or :? for other options.
  7. Thanks so much--I'll study this. It seems that messing with COUNTERPOINT because it looked cool took me too far away from what's covered in the stages. I got confused too easily. For example, COUNTERPOINT seems to be more about re-structuring sequences with unfold sets, but then I saw that example where it was used to pass the sequence between different combinations of instrumentation, which I really wanted to do. But that led me to PS and global-methods, which also aren't in the stages, so maybe I've bitten off more than I can chew for now. I'm now thinking that passing the sequence between different instrument combos might best be done without COUNTERPOINT by extracting different portions of the sequence list for different instruments in a DEF-SCORE rather than messing with PS. Please add any learning advice you think is appropriate. Is the book more a presentation of graduated tutorials, or is it a collection of relatively independent recipes?
  8. In the toy I made for learning from documented examples, my time signatures only go on for the 4 bars that realize the first list in my dictum. After that, the score just keeps re-using the 4th bar's time signature rather than repeating the same group of meter changes. Clearly, I'm misunderstanding something fundamental, so rather than describe the situation in words, if you preview the toy's score, you'll see how my 2/4 3/8 2/4 2/4 meter only gets used for the first 4 bars. How do I make it span over everything counterpoint generates? (progn (setf my-dictum '(((- 1 2 -)) ((1 - - 2)) ((2 - - 2)) ((1 2 2 1)))) (setf times (* 1 (length my-dictum))) (setf my-root -0) (setf my-intervals '(0 1 4 7)) (setf my-pitches (pitch-transpose my-root (integer-to-pitch my-intervals))) (setf my-lengths (rnd-sample times '((q e) (q q)) :seed 356)) (setf my-articulations (span my-lengths '(-))) (setf my-velocities '(pp p mp mf f ff)) (setf my-sequence (make-omn :length my-lengths :pitch my-pitches :velocity my-velocities)) (setf my-chord-sequence (make-omn :length my-lengths :pitch (gen-chord2 '(2 4) '(2 2 3 4) '((c4 cs4 e4 g4) (c4 cs4 e4 g4))) :velocity my-velocities :articulation my-articulations)) (setf my-time-signature (get-time-signature my-sequence)) (counterpoint (list my-sequence my-chord-sequence) my-dictum :global-methods '((fl) (cl) (hn) (vc)) :index 'voice1-) (ps 'gm :fl (list voice1-1) :cl (list voice1-2) :hn (list voice1-3) :vc (list voice1-4) :tempo 161 :time-signature my-time-signature) )
  9. (gen-chord 11 3 3 0 0 '(c4 cs4 fs4 g4 c5 f5 fs5 b5)) => (c4cs4fs4 g4c5f5 fs5b5) Specifying an ambitus of 11 means that each generated chord's ambitus will be <11, which I can see from the output. All notes from all generated chords also lie within the list of pitches. Then when I do (gen-chord 3 2 2 0 0 '(c4 cs4 fs4 g4 c5 f5 fs5 b5)) =>(c4cs4 fs4g4 c5bb4 fs5e5) The third and fourth chords generated have notes that have been adjusted to stay within the smaller ambitus of 3. What determines the adjustment? The third chord gets a bb4, which does not lie in the list of pitches, and the fourth chords gets an e5, which also doesn't lie within the list of pitches. What algorithm determines the bb4 and e5?
  10. Thanks, I'll study this. rnd-pick and, more importantly, get-time-signature are new for me, or more likely stuff from the tutorials that I've forgotten. Currently, I'm just trying to build toys to get used to the basic functionality and to learn what's available in the library of functions.
  11. OK, thanks, I thought I simplified it without losing any important info. Here's everything except the time signature: (setf my-root -24) (setf my-intervals '(0 1 4 7)) (setf my-pitches (pitch-transpose my-root (integer-to-pitch my-intervals))) (setf my-lengths (rnd-sample 1 '((q s) (q q)))) (setf times 100) (setf my-sequence (make-omn :length (gen-loop times (rnd-sample 1 '((q s) (q q)))) :pitch (gen-repeat times my-pitches) :span :pitch)) (def-score my-score (:title "my-score" :key-signature 'chromatic :time-signature <what should I put here?> :tempo 161) (instrument-1 :omn my-sequence :port 0 :channel 1 :volume 100 ) (instrument-2 :omn my-sequence :port 0 :channel 2 :volume 60) )
  12. (setf my-sequence (make-omn :length (gen-loop times (rnd-sample 1 '((q s) (q q)))) :pitch (gen-repeat times my-pitches) :span :pitch)) (def-score my-score (:title "my-score" :key-signature 'chromatic :time-signature (gen-repeat times '((5 8 1) (4 4 1))) :tempo 161) In my-sequence, my bars are going to be a random sequence of 5/8 and 4/4. I want my score's time-signature to match, of course, but the code above will strictly alternate. It's been a very long time since I've worked with Lisp. I tried a few things using LET, but I just can't figure this out. How do I pass the current lengths generated by gen-loop's evaluations of rnd-sample so that my score ends up with a matching time-signature? I wouldn't ask for this spoonfeeding if this weren't a paradigmatic situation that I need to re-understand for various uses.
  13. I've gone through all the stages and the beginner docs, and somewhere I can't recall, it did something like: (setf my-rhythm '(3h 3h 3h 3h 3h 3h)) to get a 4/4 measure of triplet quarters. Where is this approach to tuplets documented? In a lot of cases, it will be more convenient to write out straightforward irrational rhythms this way than to use GEN-TUPLET. I'd like to see more detailed documentation if that exists.
  14. How about simply provide a function that will send a byte of data to a MIDI port? That way, the user could compose any MIDI message they want or need, and it would be up to the user to write useful sysex messages. OM wouldn't have to support sysex messages, just the data transfer that it already performs. The user would send MIDI data "at their own risk." OM already sends data to MIDI ports, so it wouldn't take much development to provide such a minimal MIDI communication function.
×
×
  • Create New...

Important Information

Terms of Use Privacy Policy