I didn't know what MPI was, just had a quick check (only got the gist of it). I'm learning a lot of things through Chuck. :) I think it would be interesting, but might be a bit tricky to implement with chuck? I don't know enough though, just wondering.

My approach might have been a bit clumsy. I had two situations to solve:

- Sending an array of primitives of an unknown length. This is relatively easy to solve, adding all the args to the OscMessage in a loop.

- Sending a complex type that includes mixed primitive types. This was a bit trickier, and some conversion needs to happen anyway when using time or dur.

My (probably a bit inefficient) solution was to .stringify and .destringify my objects (using Tokenizer), and then just sending a string over OSC. It's a bit delicate/error prone, but it works, and once I've added those methods to a class, it becomes quite easy to use, for the actual communication. For instance, to transfer myObject would look something like this:

// The sender. Sets up an OscOut, then:
oscOut.start("my/adress/pattern");
oscOut.add(myObject.stringify());
oscOut.send();


// The receiver. Gets an OscMsg, then:
if (oscMsg.address == "...") {
  oscMsg.getString(0) => string stringifiedVersion;
  MyClass.destringify(stringifiedVersion) @=> MyClass myObject;
}

I've also encapsulated the sender part into a method to be able to simply write:

this.response("my/adress/pattern", myObject);

Is this a decent approach? The type conversion to/from string can be a bit fiddly, but it seems to work. One thing I like is that complex types composed of other complex types are easy to (de)stringify, calling their children's methods.

In the spirit of doing things the "wrong" way... ;) (I like that!)
Gz



On 28.08.18 07:31, mike clemow wrote:
Hey that's great!

Do you think it's worth building a library and standard framework around sending/receiving those types of messages over OSC? A sort of Chuck/OSC version of Message Passing Interface. Or do you think that OSC is general enough to do the job all by itself?

Curious what your learnings were!

Congrats!

-Mike

--
Michael Clemow
he/him/his
Artist/Composer/Sound Designer
http://michaelclemow.com <http://michaelclemow.com/>



On Mon, Aug 27, 2018 at 5:03 AM Gonzalo <gonz...@dense13.com <mailto:gonz...@dense13.com>> wrote:

    Quick wrap up of this thread. I did what Mike suggested, and it works
    great, thanks for the pointers! It was a bit of work getting to
    transfer
    all the required data structures properly via OSC, but worth the
    effort. :)


    On 16.08.18 10:28, mike clemow wrote:
     > Hey!
     >
     > Been a long time since I posted here. In the spirit of doing
    things the
     > "wrong" way (which is what we're all about, right? ;) You _might_
     > consider architecting your app using two (or more) concurrent
    instances
     > of ChucK; one with your synthesis stuff, and one doing your heavy
     > computation. The one doing the math could be set up to have a
    local OSC
     > API for sending the parameters in and your other code could just
    wait on
     > the response (advancing time in the main chuck instance, while the
     > calculations are being done elsewhere). You would have to have some
     > structure around the communications, but there are ways to make that
     > easier with functors (paging Michael Heuer).
     >
     > The good thing about this is that you get to take advantage of your
     > computer's multiple processors, since Chuck is single-threaded
    (last I
     > checked). Besides, if your calculations are that intense, what's
    another
     > couple of milliseconds for OSC communication? Plus, your
    calculations
     > might run faster this way... maybe.
     >
     > Or don't consider that because it's crazy. ;)  Fwiw, I've
    definitely run
     > into applications that required multiple Chuck instances talking
    to each
     > other, although usually I'm trying to use multiple sound cards
     > simultaneously. I've also abused named pipes in service of
     > inter-application communications, although I really don't
    recommend that.
     >
     > Best,
     > Mike
     >
     > --
     > Michael Clemow
     > he/him/his
     > Artist/Composer/Sound Designer
     > http://michaelclemow.com <http://michaelclemow.com/>
     >
     >
     >
     > On Wed, Aug 15, 2018 at 7:39 PM Gonzalo <gonz...@dense13.com
    <mailto:gonz...@dense13.com>
     > <mailto:gonz...@dense13.com <mailto:gonz...@dense13.com>>> wrote:
     >
     >     I just did a quick test putting 1::samp all over the place
    :), but so
     >     far no joy. But this is interesting, I'll explore it properly
    when I
     >     have a bit more time. If I can locate where most of the time
    gets used,
     >     I can focus on that. Thanks!
     >
     >     Gonzalo
     >
     >     On 16.08.18 01:36, Jack Atherton wrote:
     >      > Hi!
     >      >
     >      > Shreds block when you don’t advance time. If you don’t
    advance time,
     >      > then ChucK assumes you need all the current computation
    for the next
     >      > audio sample. Is there a place during your long
    computation where
     >     you
     >      > could wait one sample every so often (1::samp => now;)? For
     >     example, in
     >      > the body of a loop.
     >      >
     >      > Jack
     >      >
     >      > On Wed, Aug 15, 2018 at 3:38 AM Gonzalo
    <gonz...@dense13.com <mailto:gonz...@dense13.com>
     >     <mailto:gonz...@dense13.com <mailto:gonz...@dense13.com>>
     >      > <mailto:gonz...@dense13.com <mailto:gonz...@dense13.com>
    <mailto:gonz...@dense13.com <mailto:gonz...@dense13.com>>>> wrote:
     >      >
     >      >     Hi,
     >      >
     >      >     I'm working on a big project (www.whole-play.com
    <http://www.whole-play.com>
     >     <http://www.whole-play.com>
     >      >     <http://www.whole-play.com>), tons of classes, tons
     >      >     of calculations happening at various points. My problem is
     >     that some of
     >      >     these calculations take too long, up to a few seconds. I
     >     thought if I
     >      >     run them in their own shred, the main shred would be
     >     unaffected, but
     >      >     it's not the case, and the music stops during those
     >     processes. Maybe
     >      >     I'm
     >      >     doing something wrong. I can't post sample code
    because it's many
     >      >     classes interacting, but I thought maybe someone has
    ideas on
     >     how to
     >      >     tackle this issue?
     >      >
     >      >     Thanks!
     >      >     Gonzalo
     >      >
     >      >
     >      >     --
     >      > http://dense13.com
     >      > http://www.whole-play.com
     >      >     _______________________________________________
     >      >     chuck-users mailing list
     >      > chuck-users@lists.cs.princeton.edu
    <mailto:chuck-users@lists.cs.princeton.edu>
     >     <mailto:chuck-users@lists.cs.princeton.edu
    <mailto:chuck-users@lists.cs.princeton.edu>>
     >      >     <mailto:chuck-users@lists.cs.princeton.edu
    <mailto:chuck-users@lists.cs.princeton.edu>
     >     <mailto:chuck-users@lists.cs.princeton.edu
    <mailto:chuck-users@lists.cs.princeton.edu>>>
     >      > https://lists.cs.princeton.edu/mailman/listinfo/chuck-users
     >      >
     >      >
     >      >
     >      >
     >      > _______________________________________________
     >      > chuck-users mailing list
     >      > chuck-users@lists.cs.princeton.edu
    <mailto:chuck-users@lists.cs.princeton.edu>
     >     <mailto:chuck-users@lists.cs.princeton.edu
    <mailto:chuck-users@lists.cs.princeton.edu>>
     >      > https://lists.cs.princeton.edu/mailman/listinfo/chuck-users
     >      >
     >
     >     --
     > http://dense13.com
     > http://www.whole-play.com
     >     _______________________________________________
     >     chuck-users mailing list
     > chuck-users@lists.cs.princeton.edu
    <mailto:chuck-users@lists.cs.princeton.edu>
     >     <mailto:chuck-users@lists.cs.princeton.edu
    <mailto:chuck-users@lists.cs.princeton.edu>>
     > https://lists.cs.princeton.edu/mailman/listinfo/chuck-users
     >
     >
     >
     > _______________________________________________
     > chuck-users mailing list
     > chuck-users@lists.cs.princeton.edu
    <mailto:chuck-users@lists.cs.princeton.edu>
     > https://lists.cs.princeton.edu/mailman/listinfo/chuck-users
     >

-- http://dense13.com
    http://www.whole-play.com
    _______________________________________________
    chuck-users mailing list
    chuck-users@lists.cs.princeton.edu
    <mailto:chuck-users@lists.cs.princeton.edu>
    https://lists.cs.princeton.edu/mailman/listinfo/chuck-users



_______________________________________________
chuck-users mailing list
chuck-users@lists.cs.princeton.edu
https://lists.cs.princeton.edu/mailman/listinfo/chuck-users


--
http://dense13.com
http://www.whole-play.com
_______________________________________________
chuck-users mailing list
chuck-users@lists.cs.princeton.edu
https://lists.cs.princeton.edu/mailman/listinfo/chuck-users

Reply via email to