Jump to content

Jorgalad

Members
  • Posts

    51
  • Joined

  • Last visited

Posts posted by Jorgalad

  1. 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
     

    Screenshot 2023-04-11 at 13.10.21.png

  2. 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?

  3. 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

  4. 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

  5. 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

  6. 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!

  7. 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.
     

  8. 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

  9. 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!

  10. 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!

  11. 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

  12. 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

  13. Hi everyone, this one should be pretty simple but I can't seem to figure it out yet.
    I am trying to notate this (see attachment) first bar in OM.
    So far I have this:

    (h e3c4g4e5 f3f4a4d5 z^q g4 f4 h g3d4b4 c3c4e4c5 )

    Which doesn't work yet, although it's close.
    Additionally, I would love to use the same figured bass notation (with the brackets and everything).
    I know how to use the text attribute for Instruments but it seems to map everything based on white-space between the text, maybe I'm missing something?

    Thanks!
    - Jor
     

    Screen Shot 2019-02-13 at 11.34.28.png

  14. Ah yes this seems to work well, however I am using a lot of different instruments (MIDI Channels) which differ per score section.
    So for example in the intro the chords might go to channel 1 and in section 2 they go to channel 7. The provided example  uses 3 different instruments that don't change channels, making the assemble-seq a lot more useful. I was hoping to find a more convenient way to manage this without having to re-write my scores, are there other alternatives to this approach?

  15. Hi,

    I've been following this thread in an attempt to build one score from multiple projects:

    https://opusmodus.com/forums/topic/415-working-with-large-pieces-in-multiple-sections/?tab=comments#comment-1014

     

     

    I've tried both the approach from Stephane and Janusz but I can't seem to play back the scores after each other.
    Instead when I compile the three different scores it plays them all back at the same time/on top of each other.
    I'm probably doing something stupid somewhere but I can't figure out what, here's a screenshot of my project:

     

     

    Screen Shot 2018-11-22 at 20.18.04.png

  16. So today I finally got my licence for OM, and I'm extremely happy with it!
    I am really looking forward to control my OpenGL libraries and SuperCollider via OSC but I've been having some troubles trying to figure out how to set it up.
    I did find the OSC folder in the "third-party" party directory inside the OM App but other than that there doesn't seem to be any documentation.
    My main question is, what do I need to do in order to get OSC running? I thought I wouldn't need the OSC packages because they're already inside the App but OM doesn't recognise the "sb-bsd-sockets", or any other imports for that matter.
    The supplied Readme file says I need to:

    Quote

    Install the current version of this code is avilable from github

        git clone https://github.com/zzkt/osc

    or via asdf-install.. .

        (asdf-install:install :osc)

     

    But the first options redirect me to the same files already inside the OM App and asdf install seems to be very out of date.
    I'm guessing it's something really simple but I've never installed Lisp packages or dealt with this stuff before, so any help would be very welcome!

     

    Thanks,

    - Jor

  17. Hi,
    Is it still possible to upgrade/crossgrade from Symbolic Composer to Opusmodus?

    I finally saved me up some funds to get my official OM licence, but I don't see the upgrade/discount option anymore.
    I fear the worst, but thought I might ask anyway!

    Thanks in advance for the reply 🙂

    - Jor

  18. Thank you Janusz, will look into INIT-SEED, I have seen it being used in a couple of examples already (including one massively impressive score by yourself)
    I also noticed that the code snippet from above gives me values outside of the defined range as well. I'm guessing that's because the vector-to-velocity gets evaluated after the vector-range?
     

    (setf rh-a-dynamics (gen-eval 8
                        '(vector-to-velocity (random* 0.7) (random* 0.9) 
                            (vector-range 0.55 0.69 (gen-white-noise 5 :seed 12)))))
    
    >> ((ppppp pppp ppppp ppppp pppp) (mp ff mp mf fff) (ppppp ppp ppppp pppp ppp)
        (mp p mp p p) (p ppp p pp ppp) (pp fff ppp p ffff) (ppp f pppp pp ff) (pp p pp p p))

     

  19. I'm probably over-complicating things but I'm trying to find the best approach to create 8 bars of random velocity values scaled to a certain range.

    This is what I have so far, I hope it makes sense:
     

    (setf rh-a-dynamics (gen-eval 8
                          (vector-range 0.55 0.69
                         '(vector-to-velocity (random* 0.7) (random* 0.9)) 
                            (gen-white-noise 5 :seed 12))))

    Result:

    > Error: Too many arguments in call to #<Compiled-function vector-range #x30000113FC4F>:
    >        4 arguments provided, at most 3 accepted. 

    I also tried making one list to insert into Vector-Range, which results to:
     

    > Error: The value (gen-white-noise 5 :seed 12) is not of the expected type real.


    Could anyone point me into the right direction?
    Thank you!

     

    - Jor

×
×
  • Create New...

Important Information

Terms of Use Privacy Policy