[PD] Clocks and [pipe] in Lua

Frank Barknecht fbar at footils.org
Thu Mar 13 07:32:25 CET 2008


Hi (Claude),

inspired by Matteo's question I briefly tried to implement a [pipe]
clone in pdlua, however I ran into problems which might hint at either
some design issues with clock support in pdlua or, more likely, my
lack of understanding how clocks work. 

Anyway here's the problem: [pipe] in Pd is an object which as far as I
understand the code creates lots of pd-clocks as part of a "hang-list"
where pending events are collected. So the workflow is like this:

Everytime [pipe] receives a message, it creates a new "t_hang"
structure item (in a list of these) with the message payload and a new
clock inside. That clock is set to call back hang_tick(t_hang *h)
after a delay. When its time has come, hang_tick sends the payload to
the outlet and destroys the t_hang-object  including the clock
afterwards.

For the luapipe [lpipe] I thought I'd mimick that approach and collect
the scheduled events in a table as member of the pdlua-class, like
self.events.

So the method to add an event could look like this in pseudo-Lua: 

function M:in_1(sel, atoms)
    local deltatime = atoms[1] -- delay
    local e = event.new()
    e.payload = atoms
    e.clock =  makeclock(deltatime)
    table.insert(self.events, e)
end

My problem is the hypothetical "makeclock". It should be a clock that
somehow is tied to the event. But as I see it, clocks in pdlua are
supposed to be tied to a pdclass object itself, and their callback
methods don't accept any additional arguments to specify which of the
event they should handle.

Any ideas how to work around this?

Ciao
-- 
 Frank Barknecht                                     _ ______footils.org__




More information about the Pd-list mailing list