Jump to content

Jorgalad

Members
  • Posts

    47
  • Joined

  • Last visited

Everything posted by Jorgalad

  1. In this video we learn about the various methods cl-collider exposes to manipulate recorded sound (samples), we look at regular Samplers, as well as Granular synthesis. In addition we briefly look into FX and 'probability' based sample control. The code file with samples: Working with Samples in Opusmodus.zip
  2. In this video we explore how we can control SuperCollider synthesizers via Opusmodus, thereby merging the fascinating worlds of sound design and Composition.
  3. I've never liked drawing automation curves, luckily, with Opusmodus, we don't have to. This video shows you how to create accurate automation shapes and apply them to any parameter you want.
  4. Starting with a graph is a great way to come up with new musical ideas. This video will show you how to modulate a sine-wave and map the result to a sequence of pitches.
  5. Being able to visualize a code-snippet can go a long way in understanding how a function works. This video shows you how to create multiple graphs and apply them in a musical way.
  6. It's easy to get stuck with the same old drum patterns, not with Opusmodus though. This video shows you how to use the polygon-rhythm function to create interesting and new patterns.
  7. Writing for four voices traditionally takes a lot of practice and patience, as it should be. Still, it's great to get a little bit of help sometimes. In this video I show you how to use the choralis function to experiment with voice leading in a very straightforward way.
  8. The power of Parametric Composition lies in the ability to separate individual aspects of your compositions. This video will show you how to experiment with different velocities before mapping them again to a row of pitches.
  9. An overview of the Music Composition system, highlighting techniques for controlling complexity.
  10. Hi everyone, Today, when starting OM I got a Fatal error due to a missing file (see attached). This error was caused by opening a MIDI file in Opusmodus, closing again, and then removing the file on disk. Just in case you run into the same error: For me resetting the preferences didn't work, but replacing the MIDI file with a random file of the same name did. - Jor
  11. I had OM running successfully in Doom Emacs, which in case you are unfamiliar with it, uses Vim keybindings. And I loved it! The only thing I couldn't figure out was how to quickly get to the documentation, but you can look op some of Torsten's posts regarding this. Not sure if all of this will still work when switching to Lispworks in v3 though?
  12. 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
  13. Thanks a lot, some great resources! I've started with just the very basics and working my way through
  14. 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.
  15. 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
  16. 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
  17. 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!
  18. 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
  19. 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!
  20. 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.
  21. 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
  22. 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!
  23. 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!
  24. 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
  25. 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