How to install externals, libraries, gui plug-ins, etc.
Edit: This post was originally written with Pd-extended 0.43 in mind. These days there is a nice little plugin called Deken that you can use to easily download and install most of the popular libraries in Pd. It comes bundled with recent versions of Pd-vanilla. You can still use namespaces to load up the objects for most libraries, but for some libraries like zexy that have all the objects bundled into a single file, you will still need to use [declare] to load it up.
Installing libraries and plug-ins isn't so obvious. This guide will hopefully clear up the process, and may even explain more than you need to know.
Recent changes
This first section is mainly for those upgrading to Pd-0.43 from previous versions. If you're new to Pd and are starting on 0.43, you can just skip this section and get on with loading libraries.
It use to be that installing a library was done by putting it wherever you wanted on your system and adding its path to the preferences. While this wasn't particularly difficult, it did have some problems. Recent efforts have been made to standardize this a bit so those problems can be avoided.
In Pd-extended 0.43, you can't add paths from within Pd any more like you used to. You can open the preferences and add a path, but it won't save it. This means that non-default libraries won't load on start-up any more; you have to load them from within the patch. While this sounds like a hassle, it does have the advantage that patches are much easier to share. You don't have to worry about others having different start-up settings than you. It also forces the patch to document what libraries are being used, so if an object isn't loading, you don't have to go on some crazy hunt to find out where it came from or what it's supposed to do.
Putting them in the right folder
To make sure Pd can easily find the library, you need to put them in the right folder. This is OS dependent. The following folders are your options (taken from here). I personally recommend putting them in the user-specific folders since they are likely easier to migrate when updating your OS.
Linux:
User-specific:
~/pd-externals
Global:
/usr/local/lib/pd-externals
Mac OSX
User-specific:
~/Library/Pd
Global:
/Library/Pd
Windows
User-specific:
%AppData%/Pd
Global:
%CommonProgramFiles%/Pd
Linux and OSX are pretty straight-forward. "~" means your home folder.
Windows is a bit trickier. %AppData% and %CommonProgramFiles% are environment variables that contain specific directories. What the exact directory is depends on which version of Windows you are on. You can find out what it is by opening up the command line and typing this:
echo %AppData%
You might end up with something like C:\Users\username\AppData\Roaming or C:\Documentes and Settings\username\Application Data. Also, to see it in the file browser, you might need to show hidden files. At any rate, once you find the directory, create a Pd folder if there isn't one, and put your library, objects, or plug-ins there.
Loading whole libraries
To load a library you have a few options. The one that works on both vanilla and extended is to use [declare -stdpath libraryname]. The libraryname is the name of the folder that all the objects/abstractions are in.
[declare] doesn't always work as expected in abstractions, though. In Pd-extended, you can also use [import], which works well in abstractions. I have found that sometimes it doesn't work with libraries of abstractions that don't have a meta file, though. But that can be fixed by just making one. Simply create an empty Pd patch and save it as libraryname-meta.pd in the library's folder. That's all the meta patch is.
A third option (also Pd-extended only) is to use [path]. This is new to Pd-extended 0.43 and works similarly to [declare]. I haven't needed it, yet. But it's there.
Once the library is loaded, you should be able to load an object or abstraction just by creating it by name.
Loading objects or abstractions using namespaces
While this method means a little more typing, it is also the safest, and it makes it easier to find out what objects are from which library. The way you do it is add the library name (i.e. the namespace) to the beginning of the object when you call it, like this:
[zexy/multiplex~] <-- load the [multiplex~] object from zexy
[cyclone/comb~] <-- load [comb~] from cyclone
You don't have to load the library with [import] or [declare] for this to work. You just call the object that way.
Why is this safest? Because it's possible for different libraries to have objects with the same name. For example, both cyclone and zexy have an object called [mean]. But they don't work exactly the same. zexy's takes a list, while cyclone's takes in a continuous stream. If you have both libraries loaded (and in Pd-extended, these two libraries happen to be loaded by default), you can't be sure which one you're getting if you just type [mean]. However, if you type [cyclone/mean], you know exactly which one you are getting.
Simple polysynth
alistair_blunt,
Thank you for your patch! It is a lovely sounding synth. I am playing my guitar through it.
I wanted to know if there is an "easy" way to change the timber of the synth tone. I am pretty unknowledgeable when it comes to synthesizing sounds in PD.
What I am looking for is to use another peddle to change the quality/timbre of the tone - perhaps from the sinusoidal tone that you have already in your patch to a more brassy/buzzy/sawtooth tone.
Additionally, one of the things I am running into with you patch is that when I am on the fundamental/bass tone, the volume is very week so I roll in some of the partials and it begins to speak more. but then as I play higher notes, the partials follow and then begin to peak. Is there any way to bump up the gain of the lower partials.
Again, thank you for your patch. I really look forward to integrating it into my rig.
best and thanks for any help,
dkeller
Some of my PD tunes
These are some of my most recent tunes. These are purley PD.
I'm making some sort of microtonal/Xenharmonic synth or sound generator. haha!
These 3 have drum sounds I shamelessly borrowed from OBIWANNABE he done such a noce job at programming the drum sounds. Of course I came up with my own random trigger and delay pattern though. The synth sounds are from a homemade chaos fm feedback with sample and hold thing that I call the fmbrot.
http://sites.google.com/site/pollypulsarsvisitingvertexes/justbpfmbrot.mp3
http://sites.google.com/site/pollypulsarsvisitingvertexes/phihr16.9.a.mp3
This one has some distortion in it from alindx. I had the same idea for distortion when I was in college. clipping with diodes and averaging with the original signal via opamp. you can also briefly hear my karplus strong 12 string from about 2:00 to 2:38.
http://sites.google.com/site/pollypulsarsvisitingvertexes/justbpfmbrot.2.mp3
if you go to my http://sites.google.com/site/billystiltner you can hear more of my PD stuff. Most of the recent stuff was done with the assistance of PD acting as a pitchbend microtuner into Reason. My favorite of these is PHihr16.6 that you can only find on my youtube channel at this point. If you see a song that has draw in the name then it was done using the table draw thing from PD then there's my mandelbrot tunes which were done using only PD.
Then there's this one http://sites.google.com/site/pollypulsarsvisitingvertexes/PhimenGabbaFraca.PhiHr16.7.mp3 which was done using my mandelbrot melody generator (based on Elaine Walker's Chaos Melody Maker http://ziaspace.com read her thesis it's interesting) in PD synced / or started at the same time and BPM with drums I done in Reason. I thouroughly enjoyed this one it was good to hear that old amen drumbeat after a long break from the amen. hahaha!
Well have a good day and enjoy.
Swept sine deconvolution
Included some recording-, save- and load-routines to the log sweep deconvolution, and done a first real world test in my room. Dreadful standing waves oh boy.
Status quo patch attached.
Some weighted amplitude normalisation should be done on the sweep response. Now I have done an easy peak normalisation, but this will always lead to IR's having too low power.
Anyway, it is already possible to see the effect of the log sweep method (by the way this works with a linear sweep as well): non-linear distortion and pollution is shifted left of time zero and thus separated from the impulse response proper. Use vertical zoom to see this.
It would be useful to include an elementary wave editor for trimming. I have now done this with Audacity. Hardoff has done a wave editor in Pd, we could use a subset of it and include vertical zoom.
Katja
http://www.pdpatchrepo.info/hurleur/logsweepdeconv-test.pd.zip
0.41.4 doesn't load all of its extensions?
1. My guess is it's because there is a boat load of externals included with Pd-extended, and loading them all on startup would be quite a hassle. Since there isn't really any scrutiny given to the externals added to extended, many of them have the same name, so if they're all loaded on startup and you type in [wrap], for example, you don't know if it's vanilla's [wrap] or zexy's or whatever. As it is right now, I think most people don't use externals from many of the libraries that are loaded by default, so it's kind of a waste of load time anyway. I personally don't think it would be a bad idea to not have any load by default. This would encourage people to document in their patches which libraries are being used so that when they are shared other users won't have a problem figuring out where some unidentified external came from.
2. Similar reason to the one above, I guess. I assume you mean the subfolders. You can still access them without adding them all to the path. You can use [declare] for paths and [import] for libraries. Also, you can add the folder name in the external, like [zexy/wrap], which will not only load the external but will force Pd to use zexy's and not vanilla's. Doing all that also self-documents the patch, which is another reason why I don't think it's all that bad to not load libraries on startup by default.
All that's just speculation, though. I don't actually know the real answers to your questions
.
\[key\] stops working when PD is not the active window
Thanks ... it is indeed. What does it do? The help file just has a patch which lists devices without explaining what it does ... How can it help me route keystrokes to PD when its not the active window ?
if it helps this is what I get when I run the patch
hidin: ** found 9 devices on your system
DEVICES: -1 None
DEVICES: 1
DEVICES: 2
DEVICES: 3
DEVICES: 4
hidin: -- could not get device #5: Access is denied.
hidin: -- can not read from mouse and keyboard
DEVICES: 5 Unsupported Device
hidin: -- could not get device #6: Access is denied.
hidin: -- can not read from mouse and keyboard
DEVICES: 6 Unsupported Device
hidin: -- could not get device #7: Access is denied.
hidin: -- can not read from mouse and keyboard
DEVICES: 7 Unsupported Device
hidin: -- could not get device #8: Access is denied.
hidin: -- can not read from mouse and keyboard
DEVICES: 8 Unsupported Device
hidin: -- could not get device #9: Access is denied.
hidin: -- can not read from mouse and keyboard
DEVICES: 9 Unsupported Device
Thanks again.
W
Autonomous Bassist anyone?
Nice patch shankar.
as for scales, i like just using midi notes which i convert to frequencies, and following that old pattern of "tone-tone-semitone-tone-tone-tone-semitone" i think, its something like that
integration of jazz drummer would be great.
then we'd just need jazz pianist...
and jazz singer, a patch that used those scat type samples you find on casios
then just set yourself up in a hotel lobby or restaurant.
Ive actually been working on something similar.
its just got three parts and randomly generates a 16note sequence within the one chord.
i chucked in three with the option of 3 octaves, double speed, half speed, regular speed. and ended up just chucking on a button to change the pattern, because sometimes its nice to hear the same thing twice.
i need to learn to write better synths. mine always distort lots.
maybe ill add to this to change the base note of the scale used.
and the ability to control other synths instead of mine.
I've changed to ubuntu ... but met new problem ...
I want to remove them all and reinstall , but in root terminal it report me 0 files has been removed .
so I removed all the pd folder in terminal
after that I reinstalled the extended-intrepid version . but
when I run in terminal , a report shows here:
priority 98 scheduling enabled.
sh: /usr/local/bin/pd-watchdog: not found
priority 96 scheduling enabled.
sh: /usr/local/bin/pd-gui: not found
and I think that because I removed pd-0.40.2 folder which I compiled before.
and then I'm searching from google ,that the files which we compiled that should be install and removed by checkinstall.
so I downloaded the package and installed in terminal .
but checkinstall failed ..
report is here :
checkinstall 1.6.1, Copyright 2002 Felipe Eduardo Sanchez Diaz Duran
This software is released under the GNU GPL.
The package documentation directory ./doc-pak does not exist.
Should I create a default set of package docs? [y]: y
Preparing package documentation...OK
*** No known documentation files were found. The new package
*** won't include a documentation directory.
*****************************************
**** Debian package creation selected ***
*****************************************
This package will be built according to these values:
0 - Maintainer: [ root@mal ]
1 - Summary: [ pd description ]
2 - Name: [ src ]
3 - Version: [ ]
4 - Release: [ 1 ]
5 - License: [ GPL ]
6 - Group: [ checkinstall ]
7 - Architecture: [ i386 ]
8 - Source location: [ src ]
9 - Alternate source location: [ ]
10 - Requires: [ ]
11 - Provides: [ src ]
Enter a number to change any of them or press ENTER to continue:
Installing with make install...
========================= Installation results ===========================
cd ../obj; cc -Wl,-export-dynamic -o ../bin/pd g_canvas.o g_graph.o g_text.o g_rtext.o g_array.o g_template.o g_io.o g_scalar.o g_traversal.o g_guiconnect.o g_readwrite.o g_editor.o g_all_guis.o g_bang.o g_hdial.o g_hslider.o g_mycanvas.o g_numbox.o g_toggle.o g_vdial.o g_vslider.o g_vumeter.o m_pd.o m_class.o m_obj.o m_atom.o m_memory.o m_binbuf.o m_conf.o m_glob.o m_sched.o s_main.o s_inter.o s_file.o s_print.o s_loader.o s_path.o s_entry.o s_audio.o s_midi.o d_ugen.o d_ctl.o d_arithmetic.o d_osc.o d_filter.o d_dac.o d_misc.o d_math.o d_fft.o d_array.o d_global.o d_delay.o d_resample.o x_arithmetic.o x_connective.o x_interface.o x_midi.o x_misc.o x_time.o x_acoustics.o x_net.o x_qlist.o x_gui.o x_list.o d_soundfile.o s_midi_oss.o s_audio_oss.o d_fft_mayer.o d_fftroutine.o \
-ldl -lm -lpthread
cc -g -O2 -DPD -Wall -W -Wstrict-prototypes -Wno-unused -Wno-parentheses -Wno-switch -DDL_OPEN -DPA_USE_OSS -DUNIX -DUNISTD -DUSEAPI_OSS -I../portaudio/pa_common -I../portaudio/pablio -I../portmidi/pm_common -I../portmidi/pm_linux -fno-strict-aliasing -O6 -funroll-loops -fomit-frame-pointer -D_LARGEFILE64_SOURCE -o ../bin/pd-watchdog s_watchdog.c
cc -g -O2 -DPD -Wall -W -Wstrict-prototypes -Wno-unused -Wno-parentheses -Wno-switch -DDL_OPEN -DPA_USE_OSS -DUNIX -DUNISTD -DUSEAPI_OSS -I../portaudio/pa_common -I../portaudio/pablio -I../portmidi/pm_common -I../portmidi/pm_linux -fno-strict-aliasing -O6 -funroll-loops -fomit-frame-pointer -D_LARGEFILE64_SOURCE -o ../bin/pdsend u_pdsend.c
cd ../extra/bonk~;make
make[1]: Entering directory `/home/mal/Documents/pd-0.40-2/extra/bonk~'
make[1]: Nothing to be done for `current'.
make[1]: Leaving directory `/home/mal/Documents/pd-0.40-2/extra/bonk~'
cd ../extra/choice;make
make[1]: Entering directory `/home/mal/Documents/pd-0.40-2/extra/choice'
make[1]: Nothing to be done for `current'.
make[1]: Leaving directory `/home/mal/Documents/pd-0.40-2/extra/choice'
cd ../extra/expr~;make
make[1]: Entering directory `/home/mal/Documents/pd-0.40-2/extra/expr~'
make[1]: Nothing to be done for `current'.
make[1]: Leaving directory `/home/mal/Documents/pd-0.40-2/extra/expr~'
cd ../extra/fiddle~;make
make[1]: Entering directory `/home/mal/Documents/pd-0.40-2/extra/fiddle~'
make[1]: Nothing to be done for `current'.
make[1]: Leaving directory `/home/mal/Documents/pd-0.40-2/extra/fiddle~'
cd ../extra/loop~;make
make[1]: Entering directory `/home/mal/Documents/pd-0.40-2/extra/loop~'
make[1]: Nothing to be done for `current'.
make[1]: Leaving directory `/home/mal/Documents/pd-0.40-2/extra/loop~'
cd ../extra/lrshift~;make
make[1]: Entering directory `/home/mal/Documents/pd-0.40-2/extra/lrshift~'
make[1]: Nothing to be done for `current'.
make[1]: Leaving directory `/home/mal/Documents/pd-0.40-2/extra/lrshift~'
cd ../extra/pique;make
make[1]: Entering directory `/home/mal/Documents/pd-0.40-2/extra/pique'
make[1]: Nothing to be done for `current'.
make[1]: Leaving directory `/home/mal/Documents/pd-0.40-2/extra/pique'
cd ../extra/sigmund~;make
make[1]: Entering directory `/home/mal/Documents/pd-0.40-2/extra/sigmund~'
make[1]: Nothing to be done for `current'.
make[1]: Leaving directory `/home/mal/Documents/pd-0.40-2/extra/sigmund~'
install -d /usr/local/lib/pd/bin
install: cannot create directory `/usr/local/lib/pd': No such file or directory
make: *** [install] Error 1
**** Installation failed. Aborting package creation.
Cleaning up...OK
Bye.
root@mal:/home/mal/Documents/pd-0.40-2/src#
I dont know what to do now ....
How to control sliders or grid objects by holding down keys?
First of all thanks for that mate!
That makes perfect sense except that when i hold down a key it doesnt send out a rapid bunch of key-downs and key ups.
It only sends out the number attached to the key object when i press the key once, and doesnt send out a stream when i old it down.
If i can make it send out a stream of key down I can make it change the slider for every keydown value and to stop moving it when it receives the key up.
So how do i change my OS so that in pd when i attach the key object it continally outputs the number of the key i am holding down?
JackOSX.0.76 on Macbook 2.4Ghz OS 10.5
Can somebody walk me through the preference settings
to get jack working with Pd-0.41-4 (not extended, or vanilla or anything...)
I don't get the aggregate device stuff.
I don't get the router/connection manager stuff.
Actually I just don't get it.
I am trying to reduce latency
(seems like everyone is ... or???)
I am a total beginner with Pd.
Should I try to use jack to do this.
Don't you need something like jack to adjust buffers?
I don't know how to work from the command line.
I don't really even know what a buffer is or where it lurks.
Will somebody just do it for me and I'll tell my friends how smart I am.
(kidding he he)
but really, I'm just trying to get a low latency result from miked audio to headphones. (adc~ ----- dac~).
who will walk me through this?
If you answer this, I swear, I'll have another question for you 
I will be your friend!
Thanks
Jefff
