• seb-harmonik.ar

    @gentleclockdivider of course, you can look at the code.

    static void pack_anything(t_pack *x, t_symbol *s, int ac, t_atom *av)
    {
        t_atom *av2 = (t_atom *)alloca((ac + 1) * sizeof(t_atom));
        int i;
        for (i = 0; i < ac; i++)
            av2[i + 1] = av[i];
        SETSYMBOL(av2, s);
        obj_list(&x->x_obj, 0, ac + 1, av2);
    }
    

    you have to get into a few functions, but basically the argument 's' is the 'selector' (in this case '-' or 'X'), 'ac' is the count of items in the list (after the selector) and *av is the pointer to the atoms that make it up.

    first, it allocates a new list of atoms of length of the input elements (elements after the selector, in this case 0) + 1 = 1

    then it shifts all the input elements up by 1, and inserts the selector as a symbol in the first element
    Then obj_list will distribute all the elements of that list to the inlets of pack, from right to left which will set the atoms that pack is storing for those inlets
    when obj_list lastly reaches/distributes to the leftmost it will call pack_symbol, which will call pack_bang which triggers the atoms pack has stored to be output as another new list

    binding pack_anything to anythings coming into the first inlet is done by calling class_addanything in pack_setup method

    posted in technical issues read more
  • seb-harmonik.ar

    the '-' and 'X' are 'anything's in terms of pd types

    the cold inlets are generic and expect symbols, not 'anything's. That's why you have to convert them to symbols with [symbol].

    However, the 'hot' (leftmost) inlet does accept 'anything's, and converts them to symbols

    posted in technical issues read more
  • seb-harmonik.ar

    you can use the 'find externals' Help menu item to find missing externals.
    When I look for 'xfm~' using this it brings up the 'creb' library. Doing so with 'sgn~' brings up zexy
    edit: you can also use the deken website: https://deken.puredata.info/

    posted in technical issues read more
  • seb-harmonik.ar

    it isn't finding the libtcl library. Where is it installed?
    Anyways, are you sure they weren't written for 043-4-Extended rather than vanilla? Any old patch than ran on old PD vanilla should at least run in current PD
    Maybe instead of recompiling pd you could post those incompatibilities.

    posted in technical issues read more
  • seb-harmonik.ar

    internally pd uses a table for the [cos~] and [osc~] objects that is only 512 points with linear interpolation.
    if you want to be more accurate you can make your own tables with [cos] object, or if you want to use the math.h functions directly at audio rate I think [expr~ sin($v1)] (or cos) does that

    posted in technical issues read more
  • seb-harmonik.ar

    @jameslo said:

    It looks like the second ramp (jump in this case) is still timed relative to halfway through the block though.

    yes that one doesn't have negative delay and the first message cleared the queue already so that one gets processed normally
    edit: it isn't relative to the start of the block, but if you're trying to sync with block-synced objects that would be an issue regardless

    posted in technical issues read more
  • seb-harmonik.ar

    @jameslo I just discovered that if you give vline~ negative delay time value it clears the scheduled ramps and immediately jumps to the value

    so if you use a negative delay time in a vline~ message it will start at the same time as a sig~ one, at the beginning of the block
    it will only work for jumps and not ramps I think, but sig~ only does jumps..
    edit: created a pddp issue to add to the docs: https://github.com/pure-data/pddp/issues/267

    posted in technical issues read more
  • seb-harmonik.ar

    @jameslo this is getting a bit off-topic but it looks like portmidi does have timestamp info on received messages, but afaict PD doesn't use it

    posted in technical issues read more
  • seb-harmonik.ar

    @jameslo midi messages don't have timing info themselves afaik (except for realtime/clock?)
    Therefore they would have to be processed at block boundaries, just as graphical bangs are.
    Not sure how REAPER does it, maybe they store timing info in the queue when they're received on a separate thread or something
    or maybe portmidi supports it and pd just doesn't use the timing info, have to check. But maybe even with that it would be preferable to have the midi events start ASAP on block boundaries since most things in PD are synced at block boundaries

    posted in technical issues read more
  • seb-harmonik.ar

    @jameslo yes it looks like you would have to delay the sig~ one to the next block as well.. (but you could do so by delaying it by a constant 64 samples I think)
    image.png
    (repost, my first test I forgot to resize array2)

    posted in technical issues read more

Internal error.

Oops! Looks like something went wrong!