Hi guys, Short version:
I've written some python classes for py/pyExt extensions for the "dataflow" graphical programming environment PureData. Here's an example PureData screenshot for clarity: see: http://i40.tinypic.com/2rrx6gy.jpg My classes talk to eachother via the PureData system, and they talk to the outside world via pyPortMIDI (which enables raw MIDI data communication). PureData encourages modularisation, so I've written several classes: * some that receive raw MIDI data, * some that parse this into human-readable tokens, * some that just generate human-readable tokens, * and some that parse human-readable tokens then send raw MIDI data I want to join these together as a stand-alone python application, using internal python communication instead of PureData... ...but I don't know how to do this. The only python I know comes from writing using the pyExt API, and the PureData API (which is written in C). ---- Long(er) version: Miller Pukette's PureData: http://puredata.info/ Thomas Grill's Flext: http://puredata.info/Members/thomas/flext Thomas Grill's Py/Pyext: http://puredata.info/Members/thomas/py/ John Harrison's PyPortMIDI: http://www.media.mit.edu/~harrison/code.html CMU's PortMIDI: http://www.cs.cmu.edu/~music/portmusic/ PureData is a graphical "dataflow" programming environment that (among many, many other things!) allows for very rapid development of Audio and MIDI processing. Objects in PureData (and MaxMSP) communicate by sending messages through "patch cords" that connect an "outlet" to an "inlet" of another object. Thomas Grill's py/pyExt allows python code to be embedded as a PureData object. The benefit being that this python code can be effortlessly ported across multiple platforms (win32/linux/osx) and also to the highly related (but more commercial) Cycling'74 MaxMSP system. (PureData object code is written in C and generally not easy to port between platforms, nor between PD and MaxMSP - so writing portable python objects is a boon!) a pyExt object sends messages from its outlets using the line: self._outlet(outlet_id,message_to_send) a pyExt object performs actions when a message arrives at an inlet. An integer arriving at inlet 1 could be attached to this method code: def int_1(self,*arg): print "received integer:",arg[0] If these pieces of code were in separate python classes - how would I connect two objects together such that an integer was passed between the two? If the first object sent 42, in puredata it would look like this: http://i44.tinypic.com/15eh74p.gif useless fact: the screenshot doubles up (i.e. "pyext sender sender") due to the first word being the python file (i.e. sender.py), whilst the second is the name of the object class (i.e class sender (pyext._class) ---- Maybe a more tricky question is: PureData supports "message busses" - messages sent to named busses can be broadcast to multiple locations. How would I connect objects up in this way using python? a pyExt object registers to receive messages on a certain bus using: self._bind(bus_name,self.method_to_call) def method_to_call(self,*arg): print "a message on", bus_name, "arrived" print "the message was", len(arg), "long" print "and had the values", arg, "inside" a pyExt object sends messages to a particular bus by using: self._send(bus_name,message_to_send) -- http://mail.python.org/mailman/listinfo/python-list