Jump to content

Jorvd

Members
  • Posts

    36
  • Joined

  • Last visited

Recent Profile Visitors

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

  1. Hi Stoney, It took some time to look into the issue this morning, but I can't find a clear answer for you as well. It might be the result from an earlier evaluation although I really doubt that since the video was recorded in one take, either way, sublists are the way to go! - Jor
  2. Thanks a lot, some great resources! I've started with just the very basics and working my way through
  3. Thanks Stephane, I see what I was doing wrong now. I was specifying the bar number in the :method, which of course isn't necessary for the Counterpoint function.
  4. Thanks André, this is still on my list, I definitely see the benefits in learning LISP. If you have specific sources (books/links/videos) that you think are good places to start, please feel free to share - Jor
  5. Hi everyone, Today I've been learning about the Counterpoint function in v2, I decided to start simple: (setf p01 '((-e e4 stacc g4 stacc b4 stacc s e4 fs4 leg e g4 leg fs4 b3 leg))) (setf p02 '(((leg -e b5 b5 a5 a5 eb5 q eb5 leg)))) (setf voices (counterpoint (list p01 p02) '( ((1 -) :methods (- -) :polyphony (7 o)) ((2 1) :methods (t-12 -) :polyphony (7 o)) ((2 1) :methods (t-5 r) :polyphony (7 ?)) ))) (ps 'gm :fl (list (assemble-voices 1 voices)) :cl (list (assemble-voices 2 voices)) :tempo '(80) :time-signature '(4 4) :start 1) In this example I would really like to change the "as4" in bar 3 but I haven't been able to figure out how to do so. I know that with the Unfold function I can process specific events, like so: ;;Transpose second bar and 3th and 7th note in bar 4 (unfold 'om '( (t12 2 ) (t-7 4 (3 7)) ) mat) However, that doesn't seem to work within the :methods for the counterpoint function. This then brought my attention to the build-in polyphony function, but so far it's taking a lot of time to understand how to use this function. Thanks in advance for the help! - Jor
  6. Wow that's amazing, I've looked at this for 15 minutes now and I think I gained a few braincells. Learning a lot from these examples, exactly what I needed as well, thanks so much!
  7. Hi Everyone, I'm looking for a method/function which changes the velocity only for notes that are repeating. In other words, if I have a sequence like this: '(c4 eb4 g4 ab4 ab4 ab4 d4 eb4) I would like to be able to create a crescendo/decrescendo or set a custom velocity for just the Ab notes. In the past I've customised a Pattern Matching function from Stephane to change the velocity for specific note lengths: (defun velocity-map-omn (map omn &key (otherwise '-)) (do-verbose ("velocity-map-omn") (let ((plist (disassemble-omn omn))) (setf (getf plist :velocity) (pattern-map map (getf plist :length) :otherwise otherwise :swallow t)) (apply 'make-omn plist)))) And I think this should be very close to what I want, however, I have no idea how to tell OM to process repeating notes only. Is there anyone who already has a function like this or can steer me in the right direction? Hope this makes sense, any help is very welcome! - Jor
  8. Parametric Composition allows you to interact with musical parameters derived from a near infinite amount of sources, process them, and combine them together in a full score. This score can be outputted to any DAW or plugin, which then serves as a playback device.
  9. Those examples are very helpful, thank you! Right now my output (SC input) is this: [ [ /thread1, 3, 1 ], 666.1542108, a NetAddr(127.0.0.1, 57796), 57120 ] Which I believe is, [[ ThreadName, Note Number, Gate], Time, Address, Port] Ideally what I want to be able to do is to send the Pitch/Gate and some other values (Filter Modulation, Pitchbend, etc.) to the same thread. So for example [[/thread1, NoteNumber, 1, val1, val2, val3] etc.]] In a perfect world they would also have independent Time values, they just should end up at the same Thread in SC. Probably this is very simple, I would just need to combine the lists in OM before sending it with send-osc-data , I just can't really figure out how to do this. Hope the example is clear enough Thanks again!
  10. Yes but for this project I would love to use native SC language, and not write everything in Lisp. CL-Collider only uses the server side (synths & FX)of SC but not the language side, which has a lot of good stuff as well. Following up on my previous question: Is there a way to send multiple messages to one Thread? In SC it's great to be able to filter out messages like so [1], [2]. Wich will get the first and the second message send to a specific thread. Is this possible with the current OSC implementation? I tried sending multiple messages with send-osc-data but I can't figure out how to format the messages in that case.
  11. Hi everyone, For the past two days I've been messing around with SuperCollider and OM. I want to be able to write my score in OMN format and send it via OSC to SuperCollider. So far I have this in OM: (defparameter to-sc '(127.0.0.1 57120)) (setf thd1 (create-osc-thread "thread1" to-sc)) (send-osc-data thd1 '( (12 1/2) (2 1/2) (0 1/2) (3 1/2) (14 1/2) (2 1/2) (0 1/2) (3 1/2) (8 1/2) (2 1/2) (0 1/2) (3 1/2) (7 1/2) (2 1/2) (0 1/2) (3 1/2) )) And this in SuperCollider (OSCdef.new( \toggle, { arg msg, time, addr, port; [msg, time, addr, port].postln; Synth(\synth1, [pitch:msg[1]+60]); }, '/thread1' ); ) ( SynthDef('synth1', { arg pitch=60, amp=0.2, ffreq=15000; var linen, env, sig1, sig2; linen = Env.linen(0.01, sustainTime:0, releaseTime:1); env = EnvGen.kr(linen, doneAction:2); sig1 = Mix(VarSaw.ar([pitch.midicps], 0, 0.5)); sig2 = LPF.ar(sig1, ffreq); Out.ar(0, sig2* env * amp); }).add; ) And this works great! However I would like to write my OM script in regular OMN format and then convert it to integers, which SuperCollider understands. I've tried to do this like so: (setf convert-test '( (q a3 e4 c4 f4) (q e3 b4 a3 c4))) (setf data (gen-osc-data 16 (pitch-to-midi (omn :pitch convert-test)) :time (flatten (omn :length convert-test)) :min 0 :max 127)) However, it seems like "gen-osc-data" really wants to use floating values, adding the Min and Max does seem to convert these values in the range 0-127 but still I end up having the wrong notes: (setf data (gen-osc-data 16 (pitch-to-midi (omn :pitch convert-test)) :time '(1/2 1/4 1/12 1/12 1/12) :min 0 :max 127)) >> (((0 91 127) 1/2) ((27 127 0) 1/4) ((0 106 127) 1/12) ((0 127 64) 1/12) ((0 91 127) 1/12) ((27 127 0) 1/2) ((0 106 127) 1/4) ((0 127 118) 1/12) ((0 127 118) 1/12) ((0 127 118) 1/12).... Any ideas on a straightforward method to deal with this? I hope my question is understandable, this is by far the most challenging project I've tried in OM, any help would be very appreciated! NOTE: I know that I can just send MIDI notes to SC however I would like to control my Synth Parameters via OSC and I'm a big fan of consistency, therefor it would be great if the Pitch and Length information also could be converted and send via OSC messages. Thanks very much in advance! - Jor
  12. Hi Everyone, This should be an easy one, yet I can't seem to figure it out: How do I remove double notes from a chord? I'm starting with this: (setf chords '(gs3gs4ds5ds5 ab3ab3ab3gs4)) And I would like the output to be this: '(gs3gs4ds5 ab3gs4) Thanks!
  13. Since the tempo slot in DefScore only takes integers, what would be the best way to get a more natural playback tempo? I'm using this method now but it doesn't sound very smooth. (setf tempo-4 (make-tempo (vector-round 58 61 (gen-white-noise 12)) left :type :length)) ;Left is the output of an assemble-seq I've also tried things like this: (setf tempo-2 '(("Mixed Tempi" q :accel 60 62 1/32 2) ("Mixed Tempi" q :accel 62 60 1/32 2) (:rit 60 64 1/32 12))) But most of it sounds either too intentional or too clunky, I just want the tempo to very slightly meander. Thanks in advance for the advice!
  14. Dear Janusz, today I tried to get OSC working (I'm on 1.3 now) but I couldn't get any messages to send out of OM. I've tried a lot of different methods, ports, receivers etc. but nothing seems to work so far, this is the basic layout I'm using: (defparameter reaktor '(127.0.0.1 10000)) (setf data (gen-osc-data 4 (gen-sine 40 4 1) :time '(1/2 1/4 1/12 1/12 1/12))) (setf test1 (osc-thread reaktor "param1" data)) I do have a fair amount of experience with OSC but the OMN side of things is a bit confusing to me. I'm also trying to understand the Reaktor OSC video which uses an osc-thread-trigger function, would I need that as well? On a separate note, I noticed a few inconsistencies in the OSC documentation, including a mixture of "OSC-STOP-THREADS" and "STOP-OSC-THREADS" Also, n the osc-threads help file it gives an example: (self thread1 (osc-thread '(127.0.0.1 10000) '((1/2 0.5) (1/4 0.3) (1/2 0.0)))) I assume "self" should be "setf" but even then the example gives me an error: > Error: Too few arguments in call to #<Compiled-function osc-thread #x3000013E4A5F>: Lastly, is the osc-examples.lisp file something I should look into, or is that not necessary to get this working? Thanks very much in advance! - Jor
  15. Wow that is some stellar work, I do play guitar but I mainly compose on piano will send this along to my guitar playing friends, seems like a very valuable source. I already had some new things to learn in the first few lines of your provided example so I had a productive day yesterday. I have no doubt that you're familiar with these, but for others that might be interested, I found some useful tools for PCS analysis as well as a nice explanation on the subject. https://www.fransabsil.nl/htm/toneset.htm#toneset_userguidelines https://www.mta.ca/pc-set/pc-set_new/pages/introduction/toc.html
×
×
  • Create New...

Important Information

Terms of Use Privacy Policy