[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[sc-users] Stethoscope unfriendly buffer takeover?



Had strange problems with buffers recently, I try to explain it with the following:


(
Server.default = s = Server.internal;
~bn = s.bufferAllocator.alloc(1);
s.waitForBoot { s.sendMsg("/b_allocRead", ~bn, "sounds/ a11wlk01.wav"); };

f = { |server, bufnum|
    OSCresponder(server.addr, "/b_info", { | t, rsp, msg |
        msg.postln;
    }).add.removeWhenDone;

    server.sendMsg("/b_query", bufnum);
};
)

f.value(s, ~bn); // query buffer
// [ /b_info, 0, 26977, 1, 11025 ]

(
{
    var p;
    p = PlayBuf.ar(1, ~bn, BufRateScale.ir(~bn));
    FreeSelfWhenDone.kr(p);
    p ! 2
}.scope
)

f.value(s, ~bn);
// buffer like before, okay. But:

(
{
    var p;
    p = PlayBuf.ar(1, ~bn, BufRateScale.ir(~bn));
    FreeSelfWhenDone.kr(p);
    p ! 3
}.scope(3) // numChannels set, then..
)

// .. playback is silent.
// Now look at "my" buffer:

f.value(s, ~bn);
// [ /b_info, 0, 4096, 3, 48000 ]
// num channels from scope and playback sample rate!


s.bufferAllocator.free(~bn); s.sendMsg("/b_free", ~bn); ~bn = f = nil;