Graphical Interface for Pure Data
-What is GrIPD-
GrIPD is a cross-platform extension to Miller Puckette's
Pure Data software that allows one to design custom graphical
user interfaces for PD patches. GrIPD is not a replacement for
the PD Tcl/Tk GUI, but instead is intended to allow one to create a front
end to a PD patch. The concept is to create your PD patch normally and
then your GUI using GrIPD. You can then lauch PD using the -nogui
command line argument (although this is certainly not necessary) so
only your custom front end will be displayed. GrIPD, itself, consists of
two parts: the "gripd" PD object and an external GUI window/editor. The
PD object was written in C and the external GUI was written in Python using
the wxWindows. GrIPD is released under the GNU General Public License.
-How GrIPD works-
The two parts of GrIPD communicate via TCP/IP sockets so they
can run on one machine or on separate machines over a network; so,
for example, the GUI could be on a laptop on stage controlling or displaying
info from the PD audio engine in the house next to the mixer. The communication
works through PD's implimentation of "send" and "receive" objects. Basically,
each GrIPD control object has a send and receive symbol associated with
it.
-Supported platforms-
GrIPD is currently available for Linux/GTK+ and MS Windows platforms.
It may work on other Unix's, but as of yet it has not been tested.
Since wxPython and C are both highly portable, most of GrIPD is as well.
The only issues should be the C socket and multi-process code.
-Requirements-
For Win32:
For Linux:
To compile under Win32:
- Python (v2.2 or later)
- wxPython- wxWindows for Python (v2.4.0 or later)
- a C/C++ compiler
- to make a stand-alone .exe file you'll also need
py2exe v0.3.1 or later
To compile under Linux:
For Windows: the package includes compiled binaries of the gripd.dll Pd object and the gripd.exe GUI executeable.
For Linux: stand-alone binary packages are available for x86 with either OSS or ALSA MIDI support. (OSS doesn't seem to be working...yet)
-Installing GrIPD-
Win32:
- Unzip contents of gripd-*.zip to .\pd\gripd\
- Put gripd.dll where Pd can find it
To compile from source:
- In .\pd\gripd\src:
a) edit makefile
b) run: nmake gripd_nt
- gripd.exe is included, but to recompile run:
python gripdSetup.py py2exe -w -O2 --icon icon.pic
Linux:
- Ungzip/untar contents of gripd-*.tar.gz to ./pd/gripd/
- Put gripd.pd_linux where Pd can find it
To compile from source:
- In ./pd/gripd/src
a) edit makefile
b) run: make gripd_linux
- to build a stand-alone binary executable of the GrIPD GUI run:
python -OO Build.py gripd.spec (Build.py is part of Installer v5b4)
Be sure to have gripd.dll or gripd.pd_linux in your Pd path
-Using GrIPD-
To use GrIPD, launch PD with the -lib gripd command line
argument, and put the gripd PD object on your patch; it's scope will be
global throughout all canvases. Then send it an "open " message to launch the GUI (gripd.exe or gripd.py).
You can also send a "open_locked " message which will open the
GUI in locked mode. This will prevent any changes from being made to
the GUI itself.
You may need to set the path to gripd.py or gripd.exe by sending a
"set_path " message to the gripd PD object. For Windows users not using
gripd.exe, you may also have to set the path to python.exe by sending a
"set_python_path " message.
You may also send a "connect" message to
set the gripd PD object to wait for an incomming connection and launch
gripd.exe or gripd.py separately.
If the path supplied to either an "open" message or a "set_path" message
is relative (i.e. begins with ./ or ../) they will be considered relative
to the directory containing the PD executable file (pd.exe for Windows and
pd for Linux). This keeps behavior consistent no matter where PD is launched
from.
If the GUI is launched from PD, When the GUI window is closed you can re-open
it by sending the gripd Pd object a "show" message. You can also hide it by
sending the gripd Pd object a "hide" message.
The GrIPD GUI itself has two modes: "Performance Mode" and "Edit
Mode". In "Edit Mode" you can add and remove controls using the
"Edit" menu, move them around by selecting them and dragging them by
their tag with the mouse or use the arrow keys (note: ctrl+[arrow key]
will move controls a greater distance). You can edit a controls
properties by either selecting "Edit" from the "Edit" menu or
right-clicking the control's tab. In "Performance Mode" the controls
properties are locked and when activated (e.g. clicked, slid, checked,
etc.) they will send a message via their send symbol. Conversely,
they will receive messages sent within the PD patch using their
receive symbol. Look at gripd.pd and gripdExamples.pd.
GrIPD can forward MIDI input to Pd from up to two devices. To enable MIDI
function, select "Enable MIDI" from the "Configure" menu. GrIPD will send
note information via the "midi[n]note" symbol where [n] is either 0 or 1.
It will also send controller information via "midi[n]ctl" and program change
information via "midi[n]pgm".
GrIPD also allows for the use of a joystick. To enable joystick
function, select "Enable Joystick" from the "Configure" menu. Joystick
axis and button information are sent to PD with the send symbols
"joy[n]axis[m]" and "joy[n]button[m]" where [n] is 0 or 1 and ,[m] is
0,1,... for the number of axes and buttons your joystick supports. For
example, to read from joystick 0 axis 0, put a "r joy0axis0" object in your
PD patch. Axes will send integers in a range that will depend on your
joystick, and buttons will send 1 when depressed and 0 when released.
GrIPD will also catch keystrokes and send the ASCII value to PD while in
performance mode via a "keystroke" send symbol. Simply put a "r keystroke"
object in your PD patch.
Note about duplicating radio buttons:
When creating radio buttons, the first button created in a group is the
group marker. Duplicating any of the buttons in a group other than the
group marker button will add a button of the last group created.
Duplicating the group marker button will start a new group.
Note about image paths:
When a path to an image is relative (i.e. begins with ./ or ../), it is
considered relative to the .gpd file containing the image. If no file
has been opened or saved, the path is considered relative to the directory
containing the gripd executable file (gripd.exe for Windows and gripd.py
for Linux). It is therefore recommended that all images used in a GUI be
placed in a directory directly lower than the directory containing the .gpd
file. For example if your .gpd file is in c:\pd-guis put all images in
c:\pd-guis\images. This will make distributing GUIs much simpler.
Note about MIDI and joystick input:
If problems occur due to MIDI or joystick input, you can disable them by
editing gripd.opt
-Screenshots-
screen shot 1 (Linux/GTK)
screen shot 2 (Linux/GTK)
screen shot 3 (Linux/GTK)
screen shot 4 (Windows XP with themes support)
screen shot 5 (Windows without themes)
If you make a nice one, send me a picture.
-Downloads-
gripd-0.1.1.zip - GrIPD
v0.1.1 for Windows (binaries and source; Does not require Python)
gripd-0.1.1.tar.gz -
GrIPD v0.1.1 for Linux (source; Requires Python)
gripd-0.1.1.ALSA.bin.tar.gz -
GrIPD v0.1.1 for Linux (binaries for x86/ALSA MIDI and source; Does not require Python)
Previous versions
Other helpful downloads
-Changes in v0.1.1-
Added graph control
Added openpanel and savepanel
added MIDI and joystick activity blinking
Fixed zombie bug
Fixed multiple opens bug
Fixed checkbox and radio buttons bug
Fixed rectangle redrawing problem
Fixed selecting inside rectangle problem
Change Log
-Contact-
Questions? Comments? Send them to me, Joseph Sarlo
(jsarlo@ucsd.edu)
[ Back ]
[ Home ]