haven't time to look closely at this, but a couple things: * LiSa is mono internally; you can't chuck to separate internal channels. it can do multichannel output, but it's not perfect. * multichannel in ChucK is a bit dodgy at the moment, at least with LiSa dt On Apr 8, 2011, at 6:24 PM, Harald Gutsche wrote:
Hi chuckers,
Kassen:
Fortunately that's not correct. You can use quite a few, if you like; LiSa a => dac; LiSa b => dac; //etc
If this gave you trouble there is likely something else that went wrong. If you send a (minimal) example that demonstrates the trouble you had we can look at it and try to help.
ok, I tried again to do the following (as a beginning):
- record stereo sound - play it back in loops - save it in parallel
----------------------------------------
I tried many variations and until now didn't find a way to do this all together. Please use a fast panning stereo sound for all examples (e.g. one panning cycle in 1 second). I could simulate this in chuck, but then this would make everything less clear.
Let's start with a first problem. LiSa as you said above can be instantiated multiple times, you are right, this works (and there are examples for that). The chuck crashes I mentioned in a former mail can be reduced to the following code:
LiSa looper; // this works: adc => looper => dac; adc.chan(0) => looper.chan(0) => dac.chan(0); adc.chan(1) => looper.chan(1) => dac.chan(1);
when running on chuck 1.2.0.8 (which was my first contact with chuck). Now I compiled 1.2.1.4-dev-2 (from the posted svn repo), which doesn't crash, "fine" you say.
----------------------------------------
So next thing coming to mind is:
2000::ms => dur record_time; //1 => int nchannels; 2 => int nchannels;
LiSa looper;
record_time => looper.duration;
for(0 => int c; c < nchannels; c++) { adc.chan(c) => looper.chan(c) => dac.chan(c); }
adc => dac;
<<<"record", "">>>; 1 => looper.record; record_time => now; 0 => looper.record;
adc =< dac;
<<<"play", "">>>; looper.play(1); looper.loop(1); //for(0 => int c; c < nchannels; c++) { looper.chan(c) => dac.chan(c); }
// go while( true ){ 1000::ms => now; }
this seems to record only one channel which is played on both dac channels.
----------------------------------------
Ok, lets try another one, multiple LiSa objects connected to the adc/dac channels:
20::ms => dur crossfade; 2000::ms => dur record_time;
fun void loop_sampler(int c) { LiSa looper; adc.chan(c) => looper => dac.chan(c); adc.chan(c) => dac.chan(c);
record_time => looper.duration;
<<<"record", c>>>; 1 => looper.record; record_time => now; 0 => looper.record;
adc.chan(c) =< dac.chan(c);
<<<"play", c>>>; looper.play(1); looper.loop(1); looper => dac.chan(c);
2 * record_time => now; }
spork ~ loop_sampler(0); spork ~ loop_sampler(1);
// go while( true ){ 1000::ms => now; }
surprisingly, this doesn't play back anything in chuck 1.2.1.4-dev-2. I checked the general logic by simply replacing all occurencies of ".chan(c)" with nothing in the editor, which works, but is mono.
But in chuck 1.2.0.8 it works unchanged! _______________________________________________ chuck-users mailing list chuck-users@lists.cs.princeton.edu https://lists.cs.princeton.edu/mailman/listinfo/chuck-users