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

Re: AW: [sc-users] timing problems when a Task plays and plots




Am 06.12.2008 um 01:32 schrieb Mark Ballora:

Hi Bjoern --

Thanks for taking a crack at this.

The solution I found is to normalize the data set, save it as an audio file, then display the audio file in a soundFileView, incrementing what percentage of the file appears as the Task is carried out.

It doesn't look as smooth as a plotted Array, but it works.


Block param default is 64, you might lower that to improve the look of the soundFileView.





best --

Mark


Hi Mark,

not shure if I got you right, but the following might be what zou want to see. Though it is a little more stable it still slows down drastically after the 230th iteration. Anyhow it might help you.

Sincerely,

Bjoern

(
//dummy data set
a=Array.fill(500, {rrand(350, 500)});

~thusFar=Array.new;
~timeIncrement=0.05;
~time = 0;
SynthDef("sinetest", {arg freq=440, dur=0.3;
           o=PanAz.ar(2, SinOsc.ar(freq, 0, 0.2));
           e=Env.sine(dur);
           Out.ar(0, o*(EnvGen.kr(e, doneAction:2)));
           }).send(s);

w = GUI.window.new( "plot the dummy", Rect( 128, 64, 340, 400 ));
~playbutton=GUI.button.new(w, Rect(10, 23, 100, 50));
~playbutton.states=[ ["play", Color.blue, Color.new255(204,206,226) ] ];
~playbutton.action = { ~testTask.start(AppClock); };
~stopbutton=GUI.button.new(w, Rect(150, 24, 100, 50));
~stopbutton.states=[ ["stop/reset", Color.blue, Color.new255(204,206,226) ] ]; ~stopbutton.action = { ~testTask.stop; ~time = 0; ~timeArray = Array.new;
						a=Array.fill(500, {rrand(350, 500)}); ~thusFar=Array.new };
~plotWindow=GUI.envelopeView.new(w,Rect(10,75,300,300));
w.front;
~timeArray = Array.new;
~testTask = Task({
       a.size.do({ arg i;
               i.postln;
               f=a.at(i);
               s.sendMsg("/s_new", "sinetest", s.nextNodeID, 0, 0,
                       "freq", f,
                       "dur", ~timeIncrement);
               ~thusFar = ~thusFar.add(f);
				~timeArray = ~timeArray.add( ~time );
				~plotWindow.drawLines_( true ).thumbSize_( 0 )
					.value_([ ~timeArray.normalize, ~thusFar.normalize ]);
               //~thusFar.asArray.plot(parent:~plotWindow);
				~time = ~time + ~timeIncrement;
               ~timeIncrement.wait;
               })
       });
)
--- Mark Ballora <ballora@xxxxxxx> schrieb am Mi, 3.12.2008:

Von: Mark Ballora <ballora@xxxxxxx>
Betreff: [sc-users] timing problems when a Task plays and plots
An: sc-users@xxxxxxxxxxxxxxxx
Datum: Mittwoch, 3. Dezember 2008, 3:45
SC folks --

I'm attempting to sonify a data set while plotting it
in a GUI window.

The methodology is:
o Use a Task to iterate through the set, mapping its values
appropriately.
o Create an empty List; with each iteration, add the
current data value to the List, then plot the List as an
Array into a compositeView.
(I couldn't find a way to add a point to a pre-existing
view, thus I take the inelegant step of re-plotting the
ever-growing List as an Array with each iteration.)

I find that after about 90 iterations, the timing slows
down considerably, despite the wait time in the Task.

Is there a better way to do this that anyone knows of?

Here's a code example:

s=Server.local;
s.boot

(
//dummy data set
a=Array.fill(500, {rrand(350, 500)});

~thusFar=List.new;
~timeIncrement=0.05;

SynthDef("sinetest", {arg freq=440, dur=0.3;
			o=PanAz.ar(2, SinOsc.ar(freq, 0, 0.2));
			e=Env.sine(dur);
			Out.ar(0, o*(EnvGen.kr(e, doneAction:2)));
			}).send(s);

w = GUI.window.new( "plot the dummy", Rect( 128,
64, 340, 400 ));
~playbutton=GUI.button.new(w, Rect(10, 23, 100, 50));
~playbutton.states=[ ["play", Color.blue,
Color.new255(204,206,226) ] ];
~playbutton.action = { ~testTask.start(AppClock); };
~stopbutton=GUI.button.new(w, Rect(150, 24, 100, 50));
~stopbutton.states=[ ["stop/reset", Color.blue,
Color.new255(204,206,226) ] ];
~stopbutton.action = { ~testTask.stop; };
~plotWindow=GUI.compositeView.new(w,Rect(10,75,300,300));
w.front;

~testTask = Task({
		a.size.do({ arg i;
				i.postln;
>				f=a.at(i);
				s.sendMsg("/s_new", "sinetest",
s.nextNodeID, 0, 0,
						"freq", f,
						"dur", ~timeIncrement);
				~thusFar.add(f);
				~thusFar.asArray.plot(parent:~plotWindow);
				~timeIncrement.wait;
				})
		});
)

TIA --

Mark

_______________________________________________
sc-users mailing list

info (subscription, etc.):
http://www.beast.bham.ac.uk/research/sc_mailing_lists.shtml
archive: https://listarc.bham.ac.uk/marchives/sc-users/
search:
https://listarc.bham.ac.uk/lists/sc-users/search/

_______________________________________________
sc-users mailing list

info (subscription, etc.): http://www.beast.bham.ac.uk/research/sc_mailing_lists.shtml
archive: https://listarc.bham.ac.uk/marchives/sc-users/
search: https://listarc.bham.ac.uk/lists/sc-users/search/


_______________________________________________
sc-users mailing list

info (subscription, etc.): http://www.beast.bham.ac.uk/research/sc_mailing_lists.shtml
archive: https://listarc.bham.ac.uk/marchives/sc-users/
search: https://listarc.bham.ac.uk/lists/sc-users/search/


_______________________________________________
sc-users mailing list

info (subscription, etc.): http://www.beast.bham.ac.uk/research/sc_mailing_lists.shtml
archive: https://listarc.bham.ac.uk/marchives/sc-users/
search: https://listarc.bham.ac.uk/lists/sc-users/search/