[PD] creation parameters to inlets/outlets for documentation?

Charles Henry czhenry at gmail.com
Tue Jun 19 22:06:01 CEST 2012


Hi Jörn

Neat idea.  And why not?  The restricted words are "hold", "lin", and
"linear".  The code in g_io.c has the creation methods for voutlet and
vinlet.  The creation argument is for deciding what type of
interpolation method to use during upsampling.  In the code below, you
can see some if/then/else statements that cover what to do with the
creation argument.  It defaults to the same thing as no argument when
the symbol does not match.

I'm curious to know what happens (in code) when you provide extra
arguments to objects--because from experience this does nothing.  I
think that's a safe practice, but I don't know for sure.

Chuck

http://pure-data.svn.sourceforge.net/viewvc/pure-data/trunk/pd/src/g_io.c?revision=9589&view=markup

248	static void *vinlet_newsig(t_symbol *s)
249 	{
250 	t_vinlet *x = (t_vinlet *)pd_new(vinlet_class);
251 	x->x_canvas = canvas_getcurrent();
252 	x->x_inlet = canvas_addinlet(x->x_canvas, &x->x_obj.ob_pd, &s_signal);
253 	x->x_endbuf = x->x_buf = (t_float *)getbytes(0);
254 	x->x_bufsize = 0;
255 	x->x_directsignal = 0;
256 	outlet_new(&x->x_obj, &s_signal);
257 	
258 	resample_init(&x->x_updown);
259 	
260 	/* this should be though over:
261 	* it might prove hard to provide consistency between labeled up-
& downsampling methods
262 	* maybe indeces would be better...
263 	*
264 	* up till now we provide several upsampling methods and 1 single
downsampling method (no filtering !)
265 	*/
266 	if (s == gensym("hold"))x->x_updown.method=1; /* up: sample and hold */
267 	else if (s == gensym("lin"))x->x_updown.method=2; /* up: linear
interpolation */
268 	else x->x_updown.method=0; /* up: zero-padding */
269 	
270 	return (x);
271 	}
272 	
273 	static void vinlet_setup(void)
274 	{
275 	vinlet_class = class_new(gensym("inlet"), (t_newmethod)vinlet_new,
276 	(t_method)vinlet_free, sizeof(t_vinlet), CLASS_NOINLET, A_DEFSYM, 0);
277 	class_addcreator((t_newmethod)vinlet_newsig, gensym("inlet~"),
A_DEFSYM, 0);
278 	class_addbang(vinlet_class, vinlet_bang);
279 	class_addpointer(vinlet_class, vinlet_pointer);
280 	class_addfloat(vinlet_class, vinlet_float);
281 	class_addsymbol(vinlet_class, vinlet_symbol);
282 	class_addlist(vinlet_class, vinlet_list);
283 	class_addanything(vinlet_class, vinlet_anything);
284 	class_addmethod(vinlet_class, (t_method)vinlet_dsp, gensym("dsp"), 0);
285 	class_sethelpsymbol(vinlet_class, gensym("pd"));
286 	}
...
558 	static void *voutlet_newsig(t_symbol *s)
559 	{
560 	t_voutlet *x = (t_voutlet *)pd_new(voutlet_class);
561 	x->x_canvas = canvas_getcurrent();
562 	x->x_parentoutlet = canvas_addoutlet(x->x_canvas,
563 	&x->x_obj.ob_pd, &s_signal);
564 	inlet_new(&x->x_obj, &x->x_obj.ob_pd, &s_signal, &s_signal);
565 	x->x_endbuf = x->x_buf = (t_sample *)getbytes(0);
566 	x->x_bufsize = 0;
567 	
568 	resample_init(&x->x_updown);
569 	
570 	/* this should be though over:
571 	* it might prove hard to provide consistency between labeled up-
& downsampling methods
572 	* maybe indeces would be better...
573 	*
574 	* up till now we provide several upsampling methods and 1 single
downsampling method (no filtering !)
575 	*/
576 	if (s == gensym("hold"))x->x_updown.method=1; /* up: sample and hold */
577 	else if (s == gensym("lin"))x->x_updown.method=2; /* up: linear
interpolation */
578 	else if (s == gensym("linear"))x->x_updown.method=2; /* up:
linear interpolation */
579 	else x->x_updown.method=0; /* up: zero-padding; down: ignore
samples inbetween */
580 	
581 	return (x);
582 	}
583 	
584 	
585 	static void voutlet_setup(void)
586 	{
587 	voutlet_class = class_new(gensym("outlet"), (t_newmethod)voutlet_new,
588 	(t_method)voutlet_free, sizeof(t_voutlet), CLASS_NOINLET, A_DEFSYM, 0);
589 	class_addcreator((t_newmethod)voutlet_newsig, gensym("outlet~"),
A_DEFSYM, 0);
590 	class_addbang(voutlet_class, voutlet_bang);
591 	class_addpointer(voutlet_class, voutlet_pointer);
592 	class_addfloat(voutlet_class, (t_method)voutlet_float);
593 	class_addsymbol(voutlet_class, voutlet_symbol);
594 	class_addlist(voutlet_class, voutlet_list);
595 	class_addanything(voutlet_class, voutlet_anything);
596 	class_addmethod(voutlet_class, (t_method)voutlet_dsp, gensym("dsp"), 0);
597 	class_sethelpsymbol(voutlet_class, gensym("pd"));
598 	}


On Tue, Jun 19, 2012 at 2:41 PM, Jörn Nettingsmeier
<nettings at stackingdwarves.net> wrote:
> hi *!
>
>
> first of all, thanks for all your helpful replies to my earlier question
> about messages and abstraction - i'm still trying to understand some of the
> comments, but i'm going with claude's suggestion for now to keep the ID
> knowledge outside of all related objects and not use $0. so far, that seems
> to do the job, and the code is a lot cleaner now. will post asap.
>
> quick question: is it legal to (ab)use creation parameters to inlets and
> outlets for documentation, or does that lead to unwanted side effects?
>
> i'd like to do something like this:
>
> [inlet Set level in dB]
> [inlet Set Fader position in mm]
>
> [outlet Current level in dB]
> [outlet Current Fader position in mm]
> [outlet~ Gain coefficient]
>
> of course i could use comments, but i don't like the way they don't
> line-wrap in a controlled way, plus their association to what they are
> annotating is a bit weak for my taste...
>
> best,
>
>
> jörn
>
> --
> Jörn Nettingsmeier
> Lortzingstr. 11, 45128 Essen, Tel. +49 177 7937487
>
> Meister für Veranstaltungstechnik (Bühne/Studio)
> Tonmeister VDT
>
> http://stackingdwarves.net
>
>
> _______________________________________________
> Pd-list at iem.at mailing list
> UNSUBSCRIBE and account-management ->
> http://lists.puredata.info/listinfo/pd-list



More information about the Pd-list mailing list