As for the timing/yielding questions, I already wrote up this little example so I thought I would share it. Maybe it clarifies some things, maybe it doesn't.

// plays each note in notes[] for the given duration
function void play(int notes[], dur length) {
  SinOsc s => dac;
  for (0 => int i; i < notes.size(); i++) {
    Std.mtof(notes[i]) => s.freq;
    <<< "playing note", notes[i], "and waiting for", length, "samples before code execution continues" >>>;
    length => now;
    <<< length, "samples have gone by, so now we continue" >>>;
  }
}

spork ~ play([60, 62, 64, 66, 68, 70, 72], 500::ms);

// uncomment this spork to see how the shreds run in parallel
// spork ~ play([72, 71, 70, 69, 68, 67, 66, 65, 64, 63, 62], 250::ms);

<<< "waiting here for an arbitrary amount of time because if we don't, the sporked shreds won't get a chance to do anything before this process ends", "" >>>;
day => now;


On Sat, Feb 12, 2022 at 12:41 PM d <dchuck@yurfish.com> wrote:
THANKS Dana!
I've been struggling with this for a couple
of weeks and you fixed it in one post!

I'm planning to explore "conducting"
midi scores that I produce in lilypond.
Not sure where that will go, but this gives
me a lot of possibilities to mess with the
events before they go out.

The MidiScoreReader in the source looks interesting
but i don't know to access it. Track metadata
would be nice to have.
I may just read tracks into arrays and work with that.

davud




On Sat, 12 Feb 2022 12:23:55 -0800
Dana Batali <dana.batali@gmail.com> wrote:

> How about moving the MidiMsg object into the track function?
> Of course it could always be a bug in MidiOut (I haven't used it.)
>
> On Sat, Feb 12, 2022 at 12:18 PM d <dchuck@yurfish.com> wrote:
> >
> > Im using jack with fluidsynth.
> >
> > I had some confusion about whether each
> > spork had its own "now" but I did a
> > test script and that seems to be the case.
> >
> > I have tried adding me.yeild in various
> > places but no joy.
> >
> > I created a midi file with a triad in
> > in three tracks ..8 quarter notes.
> > The events seem to be correct
> > but the output is only the last
> > spork. Perhaps its a problem
> > with my setup.
> > If i play the file with fludidynth
> > I get what I expected.
> >
> > Any suggestions appreciated.
> > thanks
> > -----
> > MidiFileIn min;
> > MidiOut mout;
> > MidiMsg msg;
> > string filename;
> > me.arg(0) => filename;
> > if( !min.open(filename) ){
> >    <<< "unable to open MIDI file:'",filename >>>;
> >     me.exit();
> > }
> > mout.open(0);
> > spork ~ track(1);
> > spork ~ track(2);
> > spork ~ track(3); 
> > 5::second=>now; 
> >
> > function void  track(int t) {
> >     10::ms =>now;
> >     while( min.read(msg,t))
> >     {
> >   <<<t,msg.when,msg.data1&0x0f,msg.data2,msg.data3 >>>;
> >       10::ms =>now; 
> >          msg.when=> now; 
> >          mout.send(msg);
> >          me.yield();
> >     }
> > }
> >
> > 1 0.000000 0 75 0
> > 2 0.000000 1 75 0
> > 3 0.000000 2 75 0
> > 1 0.000000 0 75 0
> > 2 0.000000 1 75 0
> > 3 0.000000 2 75 0
> > 1 0.000000 0 60 90
> > 2 0.000000 1 64 90
> > 3 0.000000 2 55 90
> > 1 18000.000000 0 60 0
> > 2 18000.000000 1 64 0
> > 3 18000.000000 2 55 0
> > 1 0.000000 0 60 90
> > 2 0.000000 1 64 90
> > 3 0.000000 2 55 90
> > 1 18000.000000 0 60 0
> > 2 18000.000000 1 64 0
> > 3 18000.000000 2 55 0
> > 1 0.000000 0 60 90
> > 2 0.000000 1 64 90
> > 3 0.000000 2 55 90
> > 1 18000.000000 0 60 0
> > 2 18000.000000 1 64 0
> >
> >
> > On Sat, 12 Feb 2022 10:22:17 -0800
> > Forrest Curo <treegestalt@gmail.com> wrote:
> > 
> > > So how is this going to change their timing? It shouldn't, unless
> > > some process somewhere keeps running and won't yield when the
> > > wait ends (and the waiting spork wants to start from there.)
> > >
> > > Jack or fluidsynth -- or what?
> > >
> > > On Sat, Feb 12, 2022 at 9:55 AM Curtis Ullerich
> > > <curtullerich@gmail.com> wrote:
> > > 
> > > > "advancing time" means "yield for this long." so the other
> > > > shreds will be executing, or yielding, as their own timing
> > > > dictates.
> > > >
> > > > On Sat, Feb 12, 2022, 06:40 Forrest Curo <treegestalt@gmail.com>
> > > > wrote: 
> > > >> "Advancing time on a spork" means to "Wait until this amount of
> > > >> time has elapsed."
> > > >> If one spork is waiting for time to elapse, the others will be
> > > >> doing... what?
> > > >>
> > > >> On Fri, Feb 11, 2022 at 1:36 PM d <dchuck@yurfish.com> wrote:
> > > >> 
> > > >>>
> > > >>> Yes,thats the one I modeled mine after.
> > > >>> I removed the ugen stuff and replaced it with
> > > >>> send (midiout).
> > > >>> I have fluidsynth on jack The behaviour is strange.
> > > >>> It appears that advancing time on a spork advances
> > > >>> time in others and events get missed
> > > >>> But I could be wrong. I have notes with
> > > >>> no note off and CC that never happens
> > > >>>
> > > >>> It works fine for single track files.
> > > >>>
> > > >>> On Fri, 11 Feb 2022 13:10:20 -0800
> > > >>> Dana Batali <dana.batali@gmail.com> wrote:
> > > >>> 
> > > >>> > Hi Davud,  have you seen this example?
> > > >>> >
> > > >>> > https://cannerycoders.com/docs/chuck/examples/midi/midifile-play.html
> > > >>> >
> > > >>> > One obvious point is that min.read accepts a track number.
> > > >>> > _______________________________________________
> > > >>> > chuck-users mailing list
> > > >>> > chuck-users@lists.cs.princeton.edu
> > > >>> > https://lists.cs.princeton.edu/mailman/listinfo/chuck-users
> > > >>> > 
> > > >>>
> > > >>>
> > > >>> On Fri, 11 Feb 2022 13:10:20 -0800
> > > >>> Dana Batali <dana.batali@gmail.com> wrote:
> > > >>> 
> > > >>> > Hi Davud,  have you seen this example?
> > > >>> >
> > > >>> > https://cannerycoders.com/docs/chuck/examples/midi/midifile-play.html
> > > >>> >
> > > >>> > One obvious point is that min.read accepts a track number.
> > > >>> > _______________________________________________
> > > >>> > chuck-users mailing list
> > > >>> > 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
> > > >>> 
> > > >> _______________________________________________
> > > >> chuck-users mailing list
> > > >> 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
> > > > 
> >
> > _______________________________________________
> > chuck-users mailing list
> > 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

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