Tcl for Pd ========== this library allows you to to write externals for Pd using the Tcl language. The API is the standard pd C API, so if you wrote an external in C in the past, you know where to start. (Otherwise you can read the Pd-External-HOWTO) The client/server thing ======================= Pd is split into two processes: the gui, and the core. A pd external with no gui generally just runs in the core. A pd gui external is split in two pieces: the gui and the non-gui part. The non-gui part actually makes audio/file IO, while the gui part is just a frontend to the non-gui one, displaying its state, and allowing the user to interact with it. Tclpd runs the Tcl code in the core process. You might have been familiar with tot/toxy/widget externals. Such externals run in the gui process (client). That was fine for writing gui only external, but, for instance, you cannot do a metronome or anything which is timing accurate, or heavy IO, as that is not the purpose of the gui process. Theoretically, Tclpd could also do gui stuff. Communication to the gui is done with the sys_vgui proc (communication in the opposite directions is done via pd message and receivers). Just I didn't design a framework for doing this, so it's up to you. Data conversion between Tcl <=> Pd ================================== In pd exists 'atoms'. An atom is a float, a symbol, a list item, and such. Tcl does not have data types. In Tcl everything is a string, also numbers and lists. Just when something needs to be read as number, then evaluation comes in. This leads to loss of information about atom types. Imagine a symbol '456' comes into tclpd, you won't know anymore if "456" is a symbol or a float. Here a little convention comes in action: in tclpd an atom gets converted to a two-item list, where first item is atom type, and second item is its value. Some examples of conversion: Pd: 456 Tcl: {float 456} Pd: symbol foo Tcl: {symbol foo} Pd: list cat dog 123 456 weee Tcl: {{symbol cat} {symbol dog} {float 123} {float 456} {symbol wee}} Examples ======== I provided small examples. after loading pd with option '-lib tcl', just type the filename (minus the .tcl extension) to load the Tcl externals examples. actually there is one simple example: list_change (behaves like [change] object, but work with lists only) examples make use of pdlib.tcl, a little API I wrote to make things more cute. you are free to not use it (just look in pdlib.tcl to know what happens for real) or better: YOU ARE ENCOURAGED to write an OOP system for writing externals with tclpd. Authors ======= * Federico Ferri * Mathieu Bouchard License ======= See COPYING file provided with the package.