aboutsummaryrefslogtreecommitdiff
path: root/README
blob: a1506e9b6d2aa34de0b2b462bda7e163f52a95ca (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93

 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 <mescalinum@gmail.com>
 * Mathieu Bouchard <matju@artengine.ca>


 License
 =======

See COPYING file provided with the package.