[PD] Pd External: create multiple passive bang inlets

Miller Puckette via Pd-list pd-list at lists.iem.at
Thu Jul 3 08:56:28 CEST 2014


Hi all -

The easiest way to do this is the way the timer object does it (see
timer_new() in x_time.c) - the line that creates the inlet is:

inlet_new(&x->x_obj, &x->x_obj.ob_pd, gensym("bang"), gensym("bang2"));

... then when teh inlet get a bang, it calls timer's "bang2" method.  (The
timer object itself responds to that inlet by generatng output, contrary to
all other Pd objects - but the method isn't obliged to do that, and probably
in general it shouldn't.)

cheers
Miller

On Wed, Jul 02, 2014 at 07:43:45PM -0700, Jonathan Wilkes via Pd-list wrote:
> Hi Rob,
> If you look at the code for floatinlet_new and friends, you'll see they all create an inlet and then associate it with the addy of member variable.  If there were a banginlet_new, it could certainly create the inlet on behalf of your object, but what would it store?  Bang doesn't have a value associated with it.  To be philosophical about it, the only thing a banginlet could store is that is stores nothing. :)
> 
> However, if what you are after is a subsidiary inlet (one with a nonzero index) that has a bang method, you have to use what is called a proxy inlet.  See the code for [list append] or [list prepend] in x_list.c.  I think both have a secondary (or "proxy") object that receives messages associated with the right inlet of the respective list object.  Once you set it up you just add whatever method you want to your proxy class and everything should work.
> 
> It would be nice if there were a convenience function that made this easier.  (Or maybe there is and I'm missing it.)
> 
> -Jonathan
> 
> 
> 
> 
> On Wednesday, July 2, 2014 6:58 PM, Robert Esler via Pd-list <pd-list at lists.iem.at> wrote:
>  
> 
> 
> Hello everyone,
>     My intention is to have an external with an active inlet that accepts a bang and at least one passive inlet that also accepts a bang.  The active inlet works fine.  However, I don't see an equivalent function call for passive bang inlets similar to creating a passive float inlet, e.g floatinlet_new(t_object *owner, t_float *fp);
>  I have tried using symbolinlet_new(…)but cannot seem to get it to recognize a bang without an error, inlet: expected 'symbol' but got 'bang'.  I have also tried the inlet_new(…) but do not get the desired results.
>  I'm stuck.  If anyone has any suggestions I'd love to hear them. 
> Thanks for the time.
> Rob Esler
>    
> _______________________________________________
> Pd-list at lists.iem.at mailing list
> UNSUBSCRIBE and account-management -> http://lists.puredata.info/listinfo/pd-list

> _______________________________________________
> Pd-list at lists.iem.at mailing list
> UNSUBSCRIBE and account-management -> http://lists.puredata.info/listinfo/pd-list




More information about the Pd-list mailing list