Pd Documentation chapter 5. current status

This section tracks changes in Pd's current implementation.

##### back to table of contents

#### 5.1. release notes

------------------ 0.37-test 1 --------------------------

The MacOSX version now prioritizes itself effectively (thanks to gert@test.at (v93r)) via Adam Lindsay). Adam has made a proper MacOSX "package" for Pd; see http://homepage.mac.com/atl/sw.

A bug was fixed in readsf~/writesf~ (things were coming out in the wrong number of channels.)

A problem compiling Pd with TK8.4 (the latest version) was fixed.

Large numbers of GUI improvements by Adam Lindsay, especially relevant to Mac OSX.

For externs, the binary may now be included in a subdirectory of the same name (e.g., "choice/choice.pd_linux" and "choice\choice.dll"). So now you can pack multiple binaries for the same extern, along with the source, in one convenient place. (Note that "expr~" is an exception, since it goes by three different names, so this trick fails for that example.)

"Help" files renamed "help-xxx.pd", so that help files are now possible for abstractions. The "help path" feature from CVS (I forgot who contributed that) is also included but should now not be needed: Pd remembers where it got externs and abstractions and looks back in the same directory for a help file. See the way "extras" is organized.

Pd refuses to connect signal outlets to non-signal inlets.

When you save any patch, Pd looks for all invocations of that patch as an abstraction and reloads them. This unfortunately has the side effect of making all the containing windows visible, but it's better than nothing.

------------------ 0.36-1 -------------------------------

"print" now queries you for a file to save the postscript to.

"expr" brought up to date (0.4) -- a bug was fixed involving expresions like "max($f1, 100)" which had erroneously output an integer.

a bug fix in the 4-point interpolation formula, which affects tabosc4~, tabread4~, tabread4, and vd~. These should have significantly lower distortion than before.

bug fix: vradio, hradio "send symbol" feature didn't work

------------------ 0.36 -------------------------------

There's now an "undo" for most editing operations. Undoing is only available in the window that was most recently edited. (One gotcha remains, that "stretching" (in the font menu) affects all windows and you can't undo any but the last one it touched.) Also, there's no "undo" for run-time operations, only editing ones. That might be worth thinking about.

Some bugs were fixed that affected "flipped" canvases (ones whose "properties show a positive "y" increment per pixel.) Also, the coordinates are now saved and restored correctly. "text" objects (comments) now stick to the bottom of the window for flipped canvases.

Signal lines now show up fatter than control lines. (Now I have to go through the figures in the HTML doc again... drat)

"Classic" number boxes now can have labels and send/receive signals, which work in the same way as the IEMGUI controls do. I think "$1" style label/send/receive names work too. I fixed a related bug in the IEM code (typing at boxes sometimes crashed Pd).

"vdial" and "hdial" were renamed "vradio" and "hradio", and fixed to output numbers, not lists, like the other GUIs. The old ones are still around for compatibility with old patches.

"Make install" should now actually make Pd before trying to install it.

"expr" is updated to Shahrokh's 0.4test3 version (which I modified somewhat to get it to compile.)

The problem of CPU usage skyrocketing on underflows in P4s should be fixed.

Compiled "pdsend" and "pdreceive" for Windows.

"PD_VERSION" macro added to m_pd.h

------------------ 0.35 -------------------------------

An experimental new feature called graph-on-parent allows subpatches and abstractions to show GUI features; so, for instance, you can make an oscillator with a number box to control the frewuency. This is described in section 2.7.2 of the HTML documentation and an example is shown in 7.stuff/synth1/.

Spaces are allowed in pathnames to Pd and to patches; however, the "path" variable still can't have spaces. (You can address path directories using relative pathnames as in "../sound" (or ..\sound on Windows), even if there are spaces further "up" the path to the patch. See 3.7, "dealing with files."

The soundfile reading routine (used in readsf~ and soundfiler) is much better at opening wav files with different header sizes and odd chunks. You can now read floating-point "wav" files -- although you can't write them yet.

Templates and data structures are extensively reworked. A "struct" object replaces "template", so that you specify the name of the structure as the first argument to "struct" (previously it was derived from the window name.) You can now have multiple "structs" of the same name; the oldest one is the "real" one, but if you delete that, the structures are all conformed to the next-oldest one, and so on. You can alter the contents of a "struct" and all the associated data will be modified to fit the new structure definition. Data are persistent, i.e., saved with the containing patch. You can copy and paste data between patches. If you save data to a file explicityly, you can read it into another patch and the data are conformed automatically to the new data structures.

A new version of Thomas Musil's GUI objects was merged in.

The testtone patch works for up to 6 channels of audio input and output.

Lots of improvements got made to audio I/O in general. In NT you may specify "-asio" to use ASIO drivers; see HTML documentation section 3.2. You may specify lists of audio input and output devices. In Linux, Pd will now attempt to open each /dev/dsp* only once, even if it's requested for reading and writing.

The "extra" directory is now searched after the directories in the search path, not before (so now you can override objects like "fiddle~").

A bug in paf~ is fixed.

In Linux, the ".pdrc" is now read before the command line arguments, so that command line arguments override the .pdrc (it was backwards before.)

In Linux, "help" now can invoke either mozilla or netscape to start up the HTML documentation. This doesn't work in Windows or Mac land yet.

In Linux, the "-32bit" flag was added, which you must now use if running Guenter's OSS RME Hammerfall driver. (This was necessary because OSS went and used the same "bit" for a different purpose, so taht Pd tried to open some other cards in 32bit mode inappropriately.)

In Linux, MIDI is now opened "-NODELAY" ... this makes the OSS Creative driver take MIDI input correctly which it didn't before.

In MS windows, you can now use "readsf~/writesf~" for spooling sounds to and from disk.

MS Windows bug fixes: -nosound was ignored, and now works. Also, clicking to open abstractions, when they were already open anyway, used to lose the keyboard; this should be fixed now. Finally, "netreceive" didn't work when running "-nogui". This is fixed, and moreover, you should definitely include a netreceive object in any -nogui patch in MSW, otherwise it eats up all available CPU time gratuitously.

The outlet is removed from the "table" object.

In MS Windows, Pd now has "-resync" and "-noresync" flags so that you can specify how to deal with audio input and output blocksize nonsense in MMIO. If "resync" is on, whenever the audio input and output seem out of whack the audio driver resynchronizes all input and output devices; otherwise the situation is simply ignored. "Noresync" is probably best for consumer stereo cards (and is the default if you're running only 2 channels in and out). If you're runnimg more than 2 channels in either direction, the default is "resync".

In soundfiler's read method, if you specify "-maxsize", that implies "-resize" (as it ought to.)

You can use $1-stlye names for arays and tables.

Pd will now refuse to make duplicate connections between objects.

Pd is (somewhat shakily) running on Macintosh OS/X. See section 3.4 of the HTML doc. For Macs with one-button mice, you can double-click in edit mode to simulate a right click. Unfortunately, the "alt" key doesn't work yet.

In Linux, ALSA audio is now fixed to clip, not wrap around, on output overflows.

Various problems were fixed with objects changing size. Number boxes never wrap to two lines (as they used to), and lines are reconnected appropriately when objects are resized.

A function call is added to retrieve a unique event-dependent number, so that objects like "buddy" can be written.

All the "sound" command-line flags now have "audio" equivalents.

The "-listdev" flag now works on Mac and MSW/ASIO.

Help file updates for env~, route, and pointer

------------------ 0.34.3 -------------------------------

fixed a bug in "udp" netreceive that crashed pd

fixed a bug in tabosc4~ that caused gritty sound

changed "specfile" for RPM releases (thanks Fernando)

adopted Krzysztof's glob_setfilename bug fix

bug fixes from "the joy of global variables" thread in Pd list

made a help window for "table".

------------------ 0.34.2 -------------------------------

fixed ".pdrc" bug

added an experimental "pd restart-audio" feature for (new) Alsa

------------------ 0.34.1 -------------------------------

Bug fixes:

1. Closing a window with objects selected crashed Pd.

2. "find" when it opened a window to show the found object crashed Pd.

3. (Linux only) Oversized .pdrc files crashed pd...

Also, I updated Thomas Musil's IEM GUI objects and their help files.

------------------ 0.34 -------------------------------

NEW FEATURES:

I incorporated Thomas Musil's GUI objects (slider, button, etc.) into the Pd release so Thomas won't have to publish patches to Pd anymore. I didn't take the graphical inlets and outlets for reasons explained elsewhere, but Thomas might decide to continue supplying them on a patch basis.

Many new examples were added to the "2.control" amd expecially "3.audio" example patches. A list of differences batween Max/MSP and Pd now appears at the end of this section.

Finally, I fixed Pd to notice window iconification and suspend graphical updates for iconified windows.

Numbering of versions of Pd will now be as in "0.34.2" instead of "0.34PATCH2" which was confusing.

BUGS FIXED:

I incorporated Krzysztof Czaja's menuclose bug fix in g_canvas.c.

(lunix) the configure script is more rational.

the qlist and pack objects were fixed to handle reentrancy correctly.

Pd now complains about running out of memory (before it dies.) I intend to provide advance warning and automatically back out of loading patches that woudl run out of memory, but that's not in place yet.

Typing into a message box sometimes left you with lines from the output pointing to the wrong location. Fixed.

Reading of "wav" and nextstep soundfiles now handles the headers better.

------------------ 0.33 -------------------------------

AUDIO AND MIDI:

MIDI time jitter is reduced. Theoretically, it could now be as low as the audio blocksize (and so if you care about MIDI timing, keep your audio blocksize low.) If you run Pd with audio in stream mode or without audio at all, and perhaps in some cases in block more too (?), the controlling parameter for MIDI jitter is "-sleepgrain", which specifies the interval of time Pd sleeps when it believes it's idle.

You can now specify multiple MIDI input and output devices. For example, "pd -midiindev 3 -midioutdev 4,2" asks for the third MIDI input device and the fourth and second MIDI output device. The "channel message" midi objects in Pd such as notein or pgmout will take channels 1-16 to mean the first open MIDI port, 17-32 the second one, and so on. The midiin, sysexin, midiout objects give you a separate inlet to specify which of the open MIDI port numbers you want.

(linux only) By default, Pd now reads and write audio in "block mode." Previously you have to specify "-frags" and/or "-fragsize" to get this. As of this version you have to specify "-streammode" to get the opposite, streaming mode. This mode seems only to work with a small number of sound cards, notably Ensoniq ens1370 and ens1371.

(linux only) Also, "-fragsize" is replaced with a more convenient "-blocksize" which you specify in sample frames. It defaults to 64 which is Pd's audio computation block size but may be larger or smaller. Typically you would specify "-audiobuf" and "-blocksize" and Pd will compute "-frags" for you; but you can also specify "-frags" explicitly.

(linux only) OSS and ALSA audio support are improved. You can now talk to RME9652 using Guenter's OSS driver; this is different from the "-RME" support which uses Winfried's older driver. Other multichannel OSS drivers might now work as well. Pd also seems to work with ALSA 0.9 Beta 4; I've tested this with Midiman Delta 66 and Soundblaster live. I plan to update the linux audio setup documentation accordingly.

NEW FEATURES:

I've put in Shahrokh's new expr, expr~, and fexpr~ objects. The latter allows you to make expressions referring to prior input and output samples in case you're interested in writing your own recursive filters, oscillators, or chaotic sound generators...

In support of expr, you can now use commas in "object" boxes; they just become symbols.

sqrt~ is fixed so that it apparently has 24-bit accurate mantissas. It turned out to be easier to just make it accurate than to confront the question of how a reduced-accuracy version should be named.

The bizarre framp~ object which does phase vocoder analysis got a help window. The phase vocoder example doesn't use framp~ and I had forgotten what it did until Guenter dug it back up.

(linux only) I finally got around to incorporating Guenter's autoconf stuff, and learned about rpms. Major new linux releases will probably be in .tar.gz and .rpm formats; "test" releases will probably just be in .tar.gz. I also fixed it so that the installation prefix is overridden if you invoke pd by its full pathname, so that you can still use compilations with installation prefixes before you actually install them.

(NT only) I added support for directX using the portaudio package by Ross Bencina and Phil Burk. I couldn't discover any way this would ever outperform the old "multimedia" API Pd uses. So the release contains the sources, but you have to recompile Pd to use directX. Use "makefile.nt.portaudio". Only 1 or 2 channels of audio are supported. THe interesting thing is that the same code will run on Macintosh. There are a couple of other obstacles to a MacOS port of Pd though; it's hard to predict when this will be feasible.

BUG FIXES:

"drawnumber" was broken in 0.32 -- fixed.

new arrays in 0.32p6 got ill-fitting graphs -- fixed.

------------------ 0.32 PATCH 6 -------------------

Got array and graph dialogs to behave better when there are more than one.

put in mtof~, etc.

made Pd search the "extra" directory without having to specify it in "path."

bug fix in exporting patches to Max

------------------ 0.32 PATCH 5 -------------------

Reversed the order of these release notes so that the newest appear first.

Arrays can save their content with containing patch; the properties dialog selects this. The dialog shows up when you create a new array from the menu, and allows you to set the name and size. Only floating point arrays can be created and edited this way.

Bug fix: the figures in the NT web doc were garbage.

Bug fix: large tables (> 800 pixels and points) no longer crash the GUI. A related problem remains; large arrays are truncated to either 1000 points or 1000 pixels.

Bug fix: doing "save as" on an instantiated abstraction no longer sets the window title.

in linux, a couple of status messages on opening /dev/dsp only appear now if Pd is run "-verbose".

------------------ 0.32 PATCH 2, 3, 4 -------------------

Hassled more with font size differnces between NT and Linux, and updated many help files. Minor bug fixes here and there.

the table object now takes a second argument to set size in points.

Improved underflow protection in some DSP objects.

pointer now has a "vnext" traversal method which goes forward to the next SELECTED object.

improvements to throw~ (it now sums) and receive~ fixed to be settable.

bug fix in which RME driver always thought sample rate was 44100.

------------------ 0.32 PATCH 1 -------------------

bug fixes (bugs flagged by mik): vcf~ help window crashed; writesf~ only wrote 1 channel soundfiles; "table" object didn't open when clicked on;

new object: tabosc4~ -- finally, a real wavetable oscillator for Pd.

much work on "data" editing; go to 7.stuff/data-structures, open patches 5 and 7, and try clicking on things. Alt clicks delete or add points; regular clicks drag values around. The cursor changes to show you what will happen if you click.
------------------- 0.32 -----------------

New objects:

midiin, sysexin, midiout. (I don't think MIDI sysex is working in Windows yet though.)

threshold~ as in Jmax, triggers from audio level.

value as in Max and Jmax.

writesf as in Jmax.

New startup flags:

-sleepgrain: if you aren't using audio I/O, this can reduce time jitter in MIDI I/O. Otherwise, MIDI I/O jitter is limited by the audio buffer size.

-noloadbang: cancels loadbangs.

-nogui: supress starting the GUI. You can then still talk to Pd using, perhaps among other possibilities, the new network connection programs now included in the release.

-guicmd: lets you specify the command string Pd calls to start the GUI, in case you've written your own GUI to replace the TK one Pd comes with.

-send: after loading all the patches specified in the command line, you can specify "startup" messages to send. For example, if you want to use Pd just to play 50-channel soundfiles from a shell, this is how you can specify the soundfile name on the command line.

bug fixes.

A readsf~ problem got fixed.

hitting the tab key used to cause Pd windows to relinquish the keyboard.

The $0 feature apperas now to work.

Inlets and outlets of subpatches sometimes got out of left-to-right order.

Scrollbars are less out of whack than they were before.

Pd now knows to de-iconify windows if you "vis" them from the parent.

in general:

In Linux the treatment of MIDI input is now much more efficient. Also, bugs were fixed in notin and (for SGI) bendin.

You can "select all" from the Edit menu.

standalone programs "pd-send" and "pd-receive" are provided that can send mesages to Pd or receive messages from Pd via the netsend~ and netreceive~ objects. This should allow you to interface a wide variety of other programs with Pd either on the same machine or over the network. Also you should be able to hack the code into your own programs to make them interoperate with Pd and/or each other. The underlying protocol is called FUDI.

"Properties" for scalars, graphs, and number boxes: left click on them. In particular, number boxes can have fixed widths and finite ranges; if you make them one character wide they act as toggles. Later you'll be able to configure them as sliders.

As to scalars, the properties dialog lets you edit the data in the raw. Don't try to edit the template though; you can't.

You can now type into a "pd" object to change its name without losing the contents.

An experimental "scalar" _text_ object now allows abstractions to draw primitive control panels on their parents when you invoke them, as if they were Moog or Buchla modules. See the "7.stuff/data" examples.

New help windows for the "data" classes (pointer, append, template, etc.) and for send/receive which somehow I had neglected.

When you hit "copy" with nothing selected, the copy buffer used to be cleared. This is fixed to do nothing.
------------------- 0.31 -----------------

ALSA support in Linux has been completely overhauled. It now works with Midiman (up to 10 in/12 out!) and es1370. There are problems with SBLive under ALSA but it works in OSS emulation with a "-frags" setting. See the "getting started" documentation.

In NT, the default is now "noresync" if you're running stereo. You can override this with the "-resync" flag. If you're running more than 2 channels it's the opposite (as it was before.)

"symbol" boxes now display symbols and let you type them in.

There was a bug when you renamed a patch from outside Pd; the old filename still showed in the title bar (and there were other bad side effects.) FIxed.

Protection was added against patches opening themselves as abstractions.

The "route" object's handling of leading symbols was improved. I'm not sure whether it's Max compatible or not.

You can draw into arrays with the mouse, at least in the case where there's at least one pixel per point. (I'm not sure if the other case even makes sense.)

Abstractions display their "$1", etc., arguments in the window title bar.

A "sort" method was added for lists to make them easier to use as sequencers.

The "save as" dialog makes a more reasonable choice of start-up directory.

"Trigger i" is now disallowed (it used to crash Pd.)

Getbytes and resizebytes now zero out new memory.

A memory leak reported by Hannes has been partly, hopefully mostly, fixed.

The "signal_free 2" bug reported by Fogar is fixed.

New graphs now reliably avoid using already-taken "graph%d" names.

The old bug which showed up as ".xxxxxxxxx: no such object" is fixed.

The FFT examples have been reworked and the "pique" and "shift" objects are moved to "extra".
------------------- 0.30 -----------------

in Linux, you can get Pd to promote itself to "real time" priority. A "watchdog" process protects you from having Pd lock your machine up. You must request real time by running "pd -rt" or "pd -realtime". You must either be superuser or make Pd a root-owned SETUID program (chown root .../pd/bin/pd; chmod 4755 .../pd/bin/pd). For security reasons, Pd relinquishes root privelige immediately after setting its priority, before loading any patches or externs.

Protection was added against message loops.

loadbang was fixed so that loadbangs in abstractions go off before loadbangs in the owner patch. Within each patch, loadbangs go off forst in subpatches.

new object: tabplay~, a non-imterpolating sample reader.

new objects (in "extra" library): loop~; rev1~.

The "toys" library was renamed "extra" and incorporated in the Pd release.

In Linux, timeouts were added to the driver opening and closing code (which used to hang under some conditions.)

the "field" object was replaced by "template"; see "data.structures" examples in 7.stuff. Data lists can be read from and written to files now.

You can invoke an external object by pathname, as in "../../extra/loop~".

hip~, etc. should no longer get stuck when they get a NAN on input.

a bug was fixed in expanding symbols such as "$1-foo".
------------------- 0.29 -----------------

readsf~ - a MAX/FTS style soundfile player, which reads multichannel soundfiles in wave, aiff, or next formats. The files must be 16 or 24 bit fixed point or 32 bit floating point (only nextstep headers understand the latter.) You can also override the header. A "skip" flag lets you read starting anywhere in the file. (Sorry: linux only for now; I can't find Posix threads packages for the other platforms.)

soundfiler - support for reading and writing soundfiles (wave, aiff, nextstep) to and from arrays. Multichannel soundfiles can be read into or written from several arrays at once. When reading you can ask that the tables be automatically resized; in any event the object obligingly outputs the number of samples actually read. When writing you can specify a sub-segment of the arrays, and/or request that the soundfile's maximum amplitude be normalized to one.

tabplay~ - a non-interpolating sample player

Garry Kling reports having compiled Pd for "yellowdog" linux on Macintosh computers. One "fix" has been made to s_linux.c to facilitate this. I don't have access to a Mac running linux at the moment so I can't verify whether any particular repease of mine actually works there.

Signal objects now automatically convert scalars to vectors, so that you can just run a number box into a signal input. One caveat is that the binops "+~", "-~", "*~", "/~", "max~", "min~" run slightly faster if you give them an argument to tell them that their right inlet will be scalar; so the construction "+~ 0" is still meaningful. This will get fixed at some later date...

Font sizes work in what I hope will be a more machine-portable way. On any machine, the point sizes 8, 10, 12, 14, 16, 24 are DEFINED to be the largest fonts Pd can find that don't exceed their size on my linux machine. This way I can write patches that everyone else can read, and others will at least have fewer portability problems than before. The downside is that your old patches may appear with a different type size than you want; use the "font" menu item to fix them.

The OSS support no longer asks the audio driver whether full duplex is needed; it just tries to open it. Apparently some drivers (such as ALSA's OSS emulation) might do full duplex but not implement the call Pd used to query for it.

You can give "-nomidi" as a flag (previously you had to type "-nomidiin -nomidiout".)

A GUI bug reported by Iain Mott was fixed.

You can now type symbols such as "$3-poodle" and the "$3" portion gets expanded properly. Someone was also asking about the FTS-style #0 feature, but I couldn't figure out how to reconcile it with Pd's usage of "$" for "#" in abstractions. So I'm still searching for a good way to provide local symbols.

the GUI now protects itself from "\", "{" and "}" characters by dropping them. I wonder how many NT users have crashed Pd trying to type in filenames with backslashes...

samphold_set and tabwrite_stop methods added. There turned out to be no help window for samphold~ so one was supplied.
------------------- 0.28 -----------------

Version 0.28 has a primitive in-box text editor... about time!

the "front panel" now gives you information on audio levels and sync errors.

Message boxes flash, sort of, when you click them.

Support has been added for RME 9652 soundcards; see the Linux soundcard section of the documentation. Support files for RME and PCI128 (Ensoniq es1370) cards are released separately from Pd.

The delete and backspace keys clear the current selection. There is unfortunately no "undo" though; I'm not sure this is a good thing to have put in.

The "until" object has a "float" method which limits the number of bangs it will output.

The audio setup is better documented for NT and Linux.

The externs in 4.fft and 6.externs got recompiled and tested.

BUG FIX: the "read16" message to tables was broken on NT and is now fixed.

BUG FIX: In Linux, starting Pd up sometimes changed the audio mixer setting.

BUG FIX: sending "floats" to inlets expecting lists now works correctly.

BUG FIX: "route" on symbols now deals better with symbols, floats and lists.
------------------- 0.27 -----------------

The main new feature is the "find" menu stuff. You can search for boxes containing specified atoms, including semicolons or commas. Most errors are now trackable, allowing you to "find last error". Look in the "Find" menu.

New objects written: change, max, max~, min, min~, and swap.

I looked in 0.INTRO.txt in 5.reference, and found that the objects bag, cputime, realtime, pipe, symbol, poly, and bang were missing.

Five or six bug fixes.

Some audio problems in 0.25 were addresses. In Linux, audio drivers that don't support the GETISPACE/GETOSPACE ioctl calls can be called using the (inferior) "-frags/-fragsize" mechanism. If you specify either a "-frags" or a "-fragsize" option, the GETIOSPACE calls are cancelled.

Under NT, for some audio drivers the 0.26 release gave a constant stream of "resync" events. I don't know what causes this but I added a "-noresync" option which simply never resyncs at all.
------------------- 0.26 -----------------

phasor~ and osc~ can be configured to take floating point messages to set their frequencies, as an alternative to having an input signal to do the same. Also, +~, etc, can take floating point arguments (and messages) to add or multiply scalars. THe +~, etc, loops were unrolled to make them run faster.

A switch~ object is provided to let you switch sub-patches on and off. The inlet~ and outlet~ objects were re-written to avoid adding any overhead when moving signals in or out of sub patches.

In Linux at least, the audio latency is much reduced. It's possible to poll for audio I/O lateness errors by sending "pd audiostatus".

When reading a sample using tabread4~, you can switch between sample tables using the "set" message.

A new "textfile" object is like qlist but more flexible.

Many help windows got updated (but at least a dozen more need work urgently).

A dsp_addv function was added to allow variable-length DSP calls (for writers of tilde externs.)

It's possible for a tilde extern to have a name ending in "tilde" now. Name the setup routine "foo_tilde" for "foo~", etc.

The dac~ object was fixed to clip its output when out of range (before it wrapped around.)

A first line of protection was added against getting numerical underflow in delay feedback loops. Before, when a reverberator taled out there was a sudden jump in CPU usage because the numerical underflows would trap to the kernel. Now, if any delwrite~ is given a value less than 1e-20 or so, it records a true zero to avoid this.

Signal division checks for divide by zero.

A "Font bomb" feature is provided for resizing fonts and stretching and contracting patches to fit.

Pds now bind themselves to the symbol pd- IN Linux, if Pd is called as root it tries to promote its run-time priority. You can make pd a setuid root owned program if you want this behavior for non-root users who start pd. (Don't make pd-gui setuid though. That would make a security hole in your system.)

The Pd commend line can take multiple "open" arguments.

The file search path feature was fixed amd generalized.

Alt-clicking a table gives you a dialog to set its x and y range and pixel size.
------------------- 0.25 -----------------

Lots of minor, under-the-hood improvements and bug fixes...

The Netsend/netreceive objects were improved; you can now choose between UDP and TCP and there's an outlet to tell you whether they're connected.

You can now alt click on an object to get its help window (and the help windows got a fair amount of work.)

multichannel audio I/O -- you can get up to 8 audio cnahhelsin and out. On SGI this is sdone correctly; on NT it's done using sequential "stereo" devices. I'm not sure of the status of multichannel in linux...

The "text" window got new accelerators and a bigger font size

there are 3 "tool" patches in 7.stuff: filtering, pvoc, ring mod.

In NT, command-line backslashes are converted to forward slashes.

There's a load measurement tool in the "help" menu.

The SGI version contains an n32 binary (look at the "bin" directory).
------------------- 0.24 ---------------

new objects:
- bang - convert any message to a "bang"
- qlist - message sequencer
- textfile - file to message converter
- makefilename - format a name with a variable field
- openpanel - "Open" dialog
- savepanel - "Save as" dialog

Bug fixes:
- Fixed a bug in "const" message to arrays
- "exp" was broken on NT, now fixed
- phase vocoder example improved
- "read" message to arrays now zero out unread samples
- bug fix in "key" object
- bug fix in ifft~ (thanks to Peter Lunden)
- "print" object fixed to distinguish between lists starting with symbols and other messages
- polygon, curve, fpolygon, fcurve renamed to fix name clash with Gem
- improved "new object" placement on screen
- fixed help dialog to remember previous directory (thanks to Harry Castle)
- heterogeneous lists

Arrays can be written to and read from text files or from 16-bit binary files. See ../2.starter/2G for an overview.

Guenter Geiger has contributed a Max-style "table" object which creates an "array" object in a subwindow.

Guenter has also put in a "search path" feature for externs, abstractions, etc.

The Help menu got reworked.

Select and Route were extended to work Zack-style with symbols.

"random" takes seeds now (see the "help" window)

Some more work on graphical lists; you can see the current state in ../7.stuff/data-structures. It's still nascent. ------------------- 0.23 -------------------

A first cut at the "pure data" feature is now included. See section 6 of the documentation for a quick introduction to it; see also patches 12 and 14 in the FFT examples.

The documentation has been reorganized. The most interesting new features are:
- some new "tutorial" patches
- 15 "fft" examples
- improved help navigation

more bug fixes:
- titles on abstractions no longer saved inside file
- left-to-right sorting of inlets/outlets now seems to work
- nt audio setup got confused when driver couldn't do full duplex
- opening window with audio on is now fixed
- deleting inlets/outlets deletes connections first (used to crash)
- 1e20 parsed correctly now
- osc1~ fixed and optimized
- resizing arrays with DSP on used to crash; now fixed
- pasting now adds to the end of the list (used to add to beginning)
- clicking now selects the most recent object when two or more overlap
- Pd's "open" and "help" dialogs now maintain separate paths

The phasor~ object's "float" method has been REMOVED -- use the right-hand inlet to set the internal phase. This is so that I can later fix all tilde objects to convert messages to signals automatically at all signal inputs.
------------------- 0.22 -------------------
bug fixes
- parsing 1e+006 gave symbol (now float)
- "." parsed as number, should be symbol
- change GUI polling loop to TK event dispatch (unix only)
- improved "tidy up" feature
- size check added to text boxes (used to crash; still not correct.)
- occasional bug sending text with CRs to tk
- binop startup bug
- key accelerators for creators wrong
- ftom range to 1500
- bug in pack, unpack
- windows restore bigger than saved
Nt-specific bug fixes:
- getsockopt for netreceive fails. Just omitted it for NT.
- put tcl dlls in tcl bin, not pd bin
--- archive tcl subsystem for easier version updates
--- fix README accordingly
- deal with bell sound
- turn on optimization
- looked for audio timeout bug but couldn't find it.
------------------- 0.21 -------------------

bug fixes:

table size change with DSP on: It used to crash Pd to resize an array when DSP was turned on. This is now fixed.

deselect all when locking. When you lock a patch the selection is cleared.

unlock when pasting. .. and if you paste into a petch, it's unlocked.

lost keyboard events. Version 0.20 lost keyboard events and forgot window size changes. This should now be fixed.
subpatches came up in wrong font size
dirty flag on window title bar fixed
improvement to netreceive suggested by Mark Danks
style notes fleshed out as suggested by Larry Troxler
fixed Bill Kleinsasser's bug (short and long array in same graph)

new features:
phase setting for phasor~
fft objects. Also, block~, for specifying block sizes and overlaps for FFTs.
canvas_makefilename() (used, e.g., by array_read and write)
"stuff" directory with examples of real Pd applications.
------------------- 0.20 -------------------

In NT, the 0.19 release turned out not to contain all the files needed to make TCL run. This problem should now be fixed.

Also, the array_write routine was fixed.
------------------- 0.19 -------------------
notable new objects:
- vcf~, a bandpass filter with a signal input for center frequency.
- delread, delwrite, vd, as in ISPW Max.
- various math and midi stuff
- catch~, throw~, send~, receive~ for nonlocal signal connections

- an experimental facility for array of floats is included. You can make a new array (from the "put" menu) which will be given a name such as "array1". You can then send it "read ", "write ", "resize ", and "print" messages. File reading and writing is in ascii. "resize" changes the size of the array, and "print" prints its vital signs. You can then use "tabread4~" to do a 4-point interpolating table lookup, and tabwrite~ to write audio samples into the table.

Numbers now default to floating point, although certain objects like "spigot" and "metro" still convert their boolean inputs to integers so that 0.5 is "false." This behavior will probably change later. The "div" and "mod" objects are introduced for explicit integer division and remainder.

Number boxes drag in integer increments, or in hundredths if you hold the "shift" key down when you click.

Pd documents now save their font sizes. The font size is global to an entire document. New documents come up in the font size Pd was started in (using the "-font" flag.) If you want to change the font size of an existing document, use a text editor; the font size is the last argument on the first line. 8, 10, 12, 14, 16, 18, and 24 are supported.

The abbreviations "t," "f," and "i" stand for "trigger,", "float", and "int."

Inlets and outlets of subpatches are now sorted correctly; although there is still a problem deleting inlets/outlets which have connections.

The size and screen location of Pd documents is saved correctly.

Tilde objects now work in "subpages" although there is no way to send signals through their inlets and outlets; use throw~/catch~ or send~/receive~.

On NT, the default is to open both audio output and input (this used not to work.) The situation is still shaky; audio seems to hang up sporadically on my machine; but I seem to have installed my audio driver wrong anyway. I had to set a huge output FIFO (1/3 sec or so!) to get it to work at all. You can type "pd -dac", "pd -adc", or "pd -nosound" to get output only, input only, or no audio at all. NT's MIDI input and output are supported, but on my machine MIDI output is flaky. I'm curious how all this will work on other machines...

The list of classes is now:

GENERAL: field inlet outlet print int float send receive select route pack unpack trigger spigot moses delay metro line timer makenote stripnote random loadbang serial get netsend netreceive

MATH: + - * / == != > < >= <= & && | || % mod div sin cos tan atan atan2 sqrt log exp abs mtof ftom powtodb rmstodb dbtopow dbtorms

MIDI: notein ctlin pgmin bendin touchin polytouchin noteout ctlout pgmout bendout touchout polytouchout

SIGNAL: dac~ adc~ sig~ line~ snapshot~ +~ -~ *~ /~ phasor~ cos~ vcf~ noise~ env~ hip~ lop~ bp~ biquad~ samphold~ clip~ rsqrt~ sqrt~ wrap~ print~ scope~ tabwrite~ tabread4~ send~ receive~ catch~ throw~ delwrite~ delread~ vd~
------------------- 0.18 -------------------
Release notes now descrie the three platforms Pd runs on: IRIX and NT (maintained at UCSD) and LINUX, maintained by Guenter Geiger.

menu "close" on a dirty document now checks if you really want to close without saving (although "quit" will still exit Pd without verification.)

Got rid of "dll" error printout when loading abstractions
------------------- 0.12 - 0.17 -------------------
got Pd running under NT, although driver problems remain. Gem is also distributed for both platforms.
------------------- 0.11 -------------------
Here's a list of all the objects in this release:
general: print int float send receive select pack unpack trigger spigot
time handling: delay metro line timer
arithmetic: + + - - * * / / == == != != > > < < >= >= <= <= & && | || %
midi: notein noteout makenote stripnote
other: random get
signals: dac~ adc~ sig~ line~ snapshot~ +~ *~
signal oscillators: phasor~ cos~
signal filters: env~ hip~
signal debugging : print~ scope~
"spigot" replaces "gate" but has the inputs reversed.
------------------- 0.10 -------------------
Many bug fixes. This was the first pre-release to be put on the FTP site.
------------------- 0.09 -------------------
set up the "Help" menu
Bug in DSP sorting fixed
"Notein" and "noteout" objects
Comments from the Put menu say "comment" (they were invisible before)
The scheduler deals better when sound I/O malfunctions
------------------- 0.08 -------------------
metro bug
scrollbars
scheduler bug
text box wraparound at 80 chars.
fixed boxes to reconnect on retype
------------------- 0.07 -------------------
- made an adc~ object
------------------- 0.06 -------------------
- fixed two bugs in DSP sorting
- added DSP on/off gui
- added lock/unlock and changed the cursor behavior
- fixed -font flag to set font pointsize
------------------- 0.05 -------------------

- added scope~, which is just a stopgap until real sound editing comes up.
- improved the open panel slightly.
- added atoms (int only).
- reworked text editing to reside in Pd, not Pd-gui.
- included a dbx-debuggable Pd in the distribution. I haven't yet figured out how to get dbx to work with externs though.
------------------- 0.04 -------------------

fixed "cut" which crashed 0.03 if DSP was running. added clip~, print~, line~, snapshot~.
------------------- 0.03 -------------------

"pd dsp 1", "pd dsp 0" messages added. If you edit a patch with DSP on, PD resorts the DSP network as needed. Unconnected and multiple signal inlets are allowed.
------------------- 0.02 -------------------

A DSP network mechanism has been added. DSP objects are: sig~, +~, *~, phasor~, cos~.

Loading of externs is provided (although there is no search path mechanism so the extern has to be in the patch's current directory.) Look in pd/externs for an example.
------------------- 0.01. -------------------

This first release serves mostly to test the "release" mechanism. A Pd "canvas" object is provided which does both graphing and patch editing. The editing features apply only to the Max-like part; the graphs have to be edited into a Pd file via text editor.

Four menu items (in the "put" menu) create the four kinds of "patchable" objects; they can be dragged and connected as in Max; to break a connection, just click on it (the cursor becomes a turkey to indicate this.) Cut, paste, and duplicate seem to work, and a "Pd" class offers subwindows.

The following max-like objects are included: print; +, *, -, /, ==, !=, >, <, >=, <=, &, |, &&, ||, %; int, float, pack, unpack, trigger; delay, metro, timer; send, receive.

-----------------------------------------

#### 5.2. known bugs

In the list below, starred items are still things needing attention...

*1. Timing of MIDI input/output is very shaky. Audio I/O is primitive, but there's at least a way to detect errors now for linux and NT.

*2. There is no flow control for graphical updates yet; the real-time process can easily block trying to write too fast to the GUI.

3. PD dies if your patch has an infinite loop [fixed in 0.30 release.]

*4. If you cut a box which is a "Pd" or abstraction whose subpatch has items selected, Pd dies.

*5. Tables and other drawable items can draw far outside the window; there's no sanity check, Huge tables (>1000 points) are only partially drawn (the first 1000 points.)

6. There's no way to order force a delread~ to make it read after a delwrite~ has written. [but see under 3.audio.examples how to do this now.]

7. Pd doesn't know to suspend graphics updates when you minimize objects. Presumably minimization makes things better but it doesn't cut off graphics computation entirely as it should. [fixed for 0.34]

8. If you load a nonexistent extern you get a spurious message, "consistency check failed: canvas_setargs". [fixed for 0.27 release.]

9. Typing backslashes into objects upsets Tk [0.29 should suppress all backslashes; a real fix might come later.]

10. Never type a dollar sign into a comment; you may have trouble opening your patch afterward... [fixed somewhere around 0.32]

*11. You'd better Turn DSP off before you type into a box that currently holds a "pd" object with tilde objects in the subpatch.

*12. In Linux, if you hit control C while Pd is opening MIDI, Pd hangs.

*13. In linux, Pd doesn't report audio data-late errors yet.

*14. Several objects, notably dac~, adc~, and env~, are incompatible with uses of block~ or switch~ objects that change block size frmo the default of 64. Using switch~ without reblocking causes no problem. Don't try to read/write delay lines or use send~/receive~, or throw~/catch~, between windows with different block sizes.

#### 5.3. differences from Max/MSP

It wasn't anyone's intention to make Pd a Max/MSP clone, but on the other hand, if there's no reason for a feature to appear differently in Pd than in Max/MSP, the choices in Pd tend to hew to those in Max/MSP. Moreover, some effort has been undertaken (but more is needed) to make the two interoperable.

You can use Pd to import and export patches to Max/MSP; just save as text to a file with extension ".pat", and then open it in Pd. You'll at least get something. If you stick to common or commonizable features you can actually develop patches for both platforms.

When specific objects exist on one platform and not on the other, it's often possible to make abstractions to imitate the missing objects, in a kind of personalized compatibility library.

There are, however, differences in semantics you'll want to know about; a partial list follows.

abstraction arguments. In Pd you can edit instantiations of abstractions and save the result back to the file of the abstraction. This isn't possible in Max, because the instantiations are different from the abstraction itself in that "#1", etc., are replaced by the instantiation arguments. In Pd, these arguments appear as "$1", etc, and are translated at a slightly later stage of the instantiation process so that you still see them as "$" variables in the instantiation. (see Section 2.7. abstractions)

In Pd, to make current all instantiations of the abstraction, either delete and recreate them or close and open the patch; this is done automatically in Max/MSP.

In Pd, if you select "save" while in a subpatch, the parent is saved. In Max/MSP, if you do this a dialogue box comes up asking if you want to save the subpatch as a separate file. (if you want to save a subpatch to a file in Pd, you have to copy and paste the contents to a new document.

In Pd, inlets and outlets are ordinary text objects; in Max/MSP they're "gui" objects from the palette.

In Max/MSP, if an object's outlet is connected to several destinations, corresponding messages are always sent in right-to-left screen order. In Pd, the messages are sent in the order you made the connections in. In either case, in situations where you care about the order it's appropriate to use a "trigger" object to specify.

In Pd, there's no "gate"; instead it's "spigot" with the inlets in the opposite, more natural order.

Switching subsets of the DSP patch on and off is done in completely different ways in Pd and Max/MSP, and block sizes are handled differently as well.

Max offers many "GUI" objects such as sliders, dials, VU meters, piano keyboards, even "bpatchers." Until version 0.34, the only two in Pd were the number box and graphical arrays. Starting in version 0.34, Pd incorporates Thomas Musil's GUI objects: sliders, switches, and so on. (Thanks Thomas!) Beyond this essential collection of GUI objects, it's unlikely you'll ever find any commonality between the two. Also, as of 0.34, importing and exporting to Max doesn't know about the Musil objects; I'll try to get that fixed for 0.35.

In Pd there's no "preset" object (I now think it's basically a bad idea) and you have to use explicit sends and receives to restore values to number boxes. Then just make a "message" box to re-send the values you want.

In Macintosh land, instead of getting tabosc4~ and arrays, you get cycle~ and buffer~. The only gotcha is that you probably can't draw in buffer~ with the mouse as you can with arrays, but at least it's possible to make a patch that copies a "table" into a "buffer~".

The "bpatcher" feature in Max has a correlate, "graph on parent" subpatches, in Pd; however, Pd's version is quite different from Max's.