[PD] unexpected [array max] and [array min] behavior

Matt Barber brbrofsvl at gmail.com
Fri Sep 4 23:51:15 CEST 2015


Hi list,

I've been playing around with the new(ish) [array] object suite in vanilla
0.46.6. Forgive me if this is already a known issue, but it looks like the
min and max arguments aren't working properly.

The second inlet (setting the number of points to search) works as
expected. The first inlet doesn't update: it seems to be set to 0 no matter
what (although the index outlet is updated, but not as expected).

I think I see the problem in x_array.c

The max object is defined line 723:

typedef struct _array_max
{
    t_array_rangeop x_rangeop;
    t_outlet *x_out1;       /* value */
    t_outlet *x_out2;       /* index */
    int x_onset;            /* search onset */
} t_array_max;


And the bang and float methods starting 740:

static void array_max_bang(t_array_max *x)
{
    char *itemp, *firstitem;
    int stride, nitem, i, besti;
    t_float bestf;
    if (!array_rangeop_getrange(&x->x_rangeop, &firstitem, &nitem, &stride))
        return;
    for (i = 0, besti = 0, bestf= -1e30, itemp = firstitem;
        i < nitem; i++, itemp += stride)
            if (*(t_float *)itemp > bestf)
                bestf = *(t_float *)itemp, besti = i;
    outlet_float(x->x_out2, besti+x->x_onset);
    outlet_float(x->x_out1, bestf);
}

static void array_max_float(t_array_max *x, t_floatarg f)
{
    x->x_onset = f;
    array_max_bang(x);
}


In the float method it looks like the onset is never actually assigned in
the x_rangeop member of the t_array_max struct, so array_rangeop_getrange
can't set the firstitem pointer to anything but its init value.


Thanks,

Matt
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.puredata.info/pipermail/pd-list/attachments/20150904/5745f560/attachment.html>


More information about the Pd-list mailing list