Stethoscope scope window


a graphical interface to navigate on buses


works only with internal server




the scope window can be controlled by the following keys:



 J one channel back

 K switch rate (audio vs. control)

 L one channel forward


O jump to first hardware output channel and adjust numChannels to hardware

 I jump to first hardware input channel  and adjust numChannels to hardware


space run, if not running anyway.

. (period) stop.

M toggle screen size

 

 + / - zoom horizontally

* / _ zoom vertically

 S change style between parallel and overlay


shift S change style to lissajou (use only with fast computer and small buffer size)

shift  A allocate buffer size so it fills the screen (to next power of two) (this can be dangerous, might crash)



instance creation:



*new(server, numChannels, index, bufsize, zoom, rate, view)

returns a new instance of Stethoscope.

by the message .scope:

aServer.scope(numChannels, index, bufsize, zoom, rate)

opens a scope window for the server, stores it in the server instance var scopeWindow

aBus.scope(bufsize, zoom)

displays buffer channels in scope

aFunction.scope(numChannels, outbus, fadeTime, bufsize, zoom)

plays a function and shows output in scope, returns synth object, like { }.play



instance methods:



allocBuffer(size)

(re)allocate the buffer to a given size

run

start it if not playing anyway

free

end it, free the buffer

numChannels_

change the number of channels displayed

index_

change the offset index

rate_

change the rate (\audio or \control)

size_

set the window size (default: 222)

zoom_

set horizontal zoom


setProperties( numChannels, index, bufsize, zoom, rate )

any of these given will adjust the scope accordingly:

e.g. x.setProperties(zoom:8) will only zoom.


// examples:


(

Server.default = Server.internal;

s = Server.default;

s.boot;

)

(

{ 

SinOsc.ar([225, 450, 900], 0, 0.2) 

+ LPF.ar(

LFPulse.ar(226 * [1, 2, 5],[0,0.1,0.1],0.2, 0.2), 

MouseX.kr(20, 10000, 1)

) 

}.scope;

)


// server.scope only changes the properies explicitly given:


s.scope(numChannels:5);

s.scope(index:12);

s.scope(zoom:4);

s.scope(index:0);


s.scopeWindow.size = 600;

s.scopeWindow.size = 222;


// scoping buses:


a = Bus.audio(s, 4);

{ WhiteNoise.ar(0.2.dup(4)) }.play(s, a.index);


a.scope;


c = Bus.control(s, 3);

{ WhiteNoise.kr(1.dup(4) * MouseX.kr) }.play(s, c.index);


c.scope;


// note that scoping control rate buses shows block size interpolation (this is due to the

// fact that ScopeOut.kr doesn't work yet.)



external use: you can pass your own view in to add a stethoscope to it;



w = SCWindow.new("my own scope", Rect(20, 20, 400, 500));

w.view.decorator = FlowLayout(w.view.bounds);

c = Stethoscope.new(s, view:w.view);

w.onClose = { c.free }; // don't forget this

w.front;