[chuck-users] Jack Server shuts down ChucK client ...
Niklas Reppel
nik at parkellipsen.de
Wed Apr 1 06:32:26 EDT 2015
Oh, ok, makes sense, i'll try that !
Thanks!
Though i still wonder why it's Jack that's complaining, and not ChucK
itself ... weird ..
On 01.04.2015 04:00, Joel Matthys wrote:
> Hello Niklas. Your class idea is good, and your old code is very close
> to working.
>
> The problem is scope-related. In our OSC receiving method, you create
> an instance of MyBuzzer, then spork a method from it. But your object
> "buzzer" gets freed at the end of that code block, so the object your
> sporked thread references to no longer exists!
>
> You need to instantiate MyBuzzer in the sporked thread, not the main
> thread. This modified version worked for me:
>
> class MyBuzzer {
> SawOsc saw => LPF lp => ADSR e => Dyno dyn => dac;
> ADSR filt => Gain fg => blackhole;
> 10 => fg.gain;
> Step s;
> s => filt;
> 1 => s.next;
>
> // one-shot sine spork
> fun void buzz(float freq, float gain, int a, int d, int sus, int r) {
> a + d + sus + r => int overall;
> freq => saw.freq;
> e.set( a::ms, d::ms, gain, r::ms );
> filt.set( a::ms, (sus - r)::ms, gain, r::ms );
> dyn.limit;
> gain / 4 => dyn.thresh;
> if(d == 0) {
> 0 => e.decayRate;
> 0 => filt.decayRate;
> }
>
> now + overall::ms => time then;
>
> spork ~ filteradsr(then, freq);
>
> e.keyOn();
> filt.keyOn();
> sus::ms => now;
> e.keyOff();
> filt.keyOff();
> r::ms => now;
>
> // I removed the connect and disconnect code because it wasn't
> the problem
> }
>
> fun void filteradsr (time then, float freq) {
> while (now < then) {
> float currfilt;
> filt.last() * 800 + 100 => currfilt;
> currfilt => lp.freq;
> 1::ms => now;
> }
> }
> }
>
> // this will get sporked
> fun void sporkedBuzzer(float freq, float gain, int a, int d, int s,
> int r )
> {
> MyBuzzer buzzer;
> buzzer.buzz(freq, gain, a, d, s, r);
> }
>
> // create our OSC receiver
> OscRecv recv;
> // use port 6449 (or whatever)
> 6449 => recv.port;
> // start listening (launch thread)
> recv.listen();
>
> // create an address in the receiver, store in new variable
> recv.event( "/buzz, f f i i i i" ) @=> OscEvent @ oe;
>
> // infinite event loop
> while( true ) {
> // wait for event to arrive
> oe => now;
> // grab the next message from the queue.
> while( oe.nextMsg() ) {
> oe.getFloat() => float freq;
> oe.getFloat() => float gain;
> oe.getInt() => int a;
> oe.getInt() => int d;
> oe.getInt() => int s;
> oe.getInt() => int r;
> spork ~ sporkedBuzzer(freq, gain, a, d, s, r);
> }
> }
>
>
> On 03/31/2015 12:26 PM, Niklas Reppel wrote:
>> Hmm i'm using this a lot elsewhere, so i don't think so ...
>>
>> Strange thing is, if i don't use a class, but two plain methods, the
>> problem doesn't occur any longer ...
>>
>> I can live with that, though i'd say using a class would b eslightly
>> more intuitive here ...
>>
>> NEW VERSION:
>> https://github.com/the-drunk-coder/graa/blob/master/shreds/buzz.ck
>>
>>
>> OLD VERSION:
>>
>> class MyBuzzer {
>> SawOsc saw => LPF lp => ADSR e => Dyno dyn;
>> ADSR filt => Gain fg => blackhole;
>> 10 => fg.gain;
>>
>> Step s;
>> s => filt;
>> 1 => s.next;
>>
>> // one-shot sine spork
>>
>> fun void buzz(float freq, float gain, int a, int d, int sus, int
>> r) {
>>
>> a + d + sus + r => int overall;
>>
>> freq => saw.freq;
>>
>> e.set( a::ms, d::ms, gain, r::ms );
>>
>> filt.set( a::ms, (sus - r)::ms, gain, r::ms );
>>
>> dyn.limit;
>>
>> gain / 4 => dyn.thresh;
>>
>> if(d == 0){
>>
>> 0 => e.decayRate;
>>
>> 0 => filt.decayRate;
>>
>> }
>>
>> now + overall::ms => time then;
>>
>> spork ~ filteradsr(then, freq);
>>
>> e.keyOn();
>>
>> filt.keyOn();
>>
>> sus::ms => now;
>>
>> e.keyOff();
>>
>> filt.keyOff();
>>
>> r::ms => now;
>>
>> // disconnecting doesn't really help here ...
>> dyn !=> dac;
>>
>> }
>>
>> fun void filteradsr (time then, float freq){
>>
>> while (now < then){
>>
>> float currfilt;
>>
>> filt.last() * 800 + 100 => currfilt;
>>
>> currfilt => lp.freq;
>>
>> 1::ms => now;
>>
>> }
>>
>> }
>>
>> fun void connect(UGen ugen){
>>
>> dyn => ugen;
>>
>> }
>>
>> }
>>
>> // create our OSC receiver
>>
>> OscRecv recv;
>>
>> // use port 6449 (or whatever)
>>
>> 6449 => recv.port;
>>
>> // start listening (launch thread)
>>
>> recv.listen();
>>
>> // create an address in the receiver, store in new variable
>>
>> recv.event( "/buzz, f f i i i i" ) @=> OscEvent @ oe;
>>
>> // infinite event loop
>>
>> while( true )
>>
>> {
>>
>> // wait for event to arrive
>>
>> oe => now;
>>
>> // grab the next message from the queue.
>>
>> while( oe.nextMsg() )
>>
>> {
>>
>> oe.getFloat() => float freq;
>>
>> oe.getFloat() => float gain;
>>
>> oe.getInt() => int a;
>>
>> oe.getInt() => int d;
>>
>> oe.getInt() => int s;
>>
>> oe.getInt() => int r;
>>
>> MyBuzzer buzzer;
>>
>> buzzer.connect(dac);
>>
>> spork ~ buzzer.buzz(freq, gain, a, d, s, r);
>>
>> }
>>
>> }
>>
>>
>>
>>
>>
>> On 31.03.2015 19:14, Robert Poor wrote:
>>> Is there any chance that oe.nextMsg() is returning false, as in:
>>>
>>> while( oe.nextMsg() )
>>> { ...
>>> }
>>>
>>> ?
>>>
>>>
>>> On Tue, Mar 31, 2015 at 9:52 AM, Niklas Reppel <nik at parkellipsen.de>
>>> wrote:
>>>> So, i'm trying to write a simple SawOsc-Synth with Polyphony,
>>>> triggered by
>>>> OSC messages ...
>>>>
>>>> You can check it out here:
>>>> https://github.com/the-drunk-coder/graa/blob/master/shreds/buzz.ck
>>>>
>>>> As i want to use a filter with adsr, i can't just spork a single
>>>> method
>>>> right ?
>>>>
>>>> But, with the current version, the Jack-Server (i'm on Linux) shuts
>>>> the
>>>> client down,
>>>> with the following message:
>>>>
>>>> (JACK) the JACK server is shutting down this client...
>>>> ... stream stopped and closed!
>>>>
>>>> Anyone's got an idea why ?
>>>>
>>>> Regards,
>>>> Nik
>>>> _______________________________________________
>>>> chuck-users mailing list
>>>> chuck-users at lists.cs.princeton.edu
>>>> https://lists.cs.princeton.edu/mailman/listinfo/chuck-users
>>> _______________________________________________
>>> chuck-users mailing list
>>> chuck-users at lists.cs.princeton.edu
>>> https://lists.cs.princeton.edu/mailman/listinfo/chuck-users
>>
>> _______________________________________________
>> chuck-users mailing list
>> chuck-users at lists.cs.princeton.edu
>> https://lists.cs.princeton.edu/mailman/listinfo/chuck-users
>
> _______________________________________________
> chuck-users mailing list
> chuck-users at lists.cs.princeton.edu
> https://lists.cs.princeton.edu/mailman/listinfo/chuck-users
More information about the chuck-users
mailing list