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
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
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
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)) { <<
>>; 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
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
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
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
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
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
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