Pure Data Tutorial
This is a collection of Pure Data patches listed by topic. (Copyrights and references are included.)
Installation
The whole Pure Data Tutorial can be downloaded as an archive.
NOTE: After installing Pure Data right-click the app to view the contents using „Show Package Contents“. Navigate to the „Resources“ folder and delete the folder „po“. This makes the application using English as the default language independently on you system language.
Download a patch before open it in Pure Data. If you are working locally you can configure your browser (Preferences -> Data Types) to open patches automatically in Pure Data by clicking them. Alternatively (Mac OS) you can drag any link to a Pure Data file (.pd) directly on the program icon in your Dock.
Basics
edit_mode.pd
connections.pd
hello_world.pd
getting_help.pd
bang_means_Do_it.pd
event_driven_processing.pd
turning_on_and_off.pd
right_to_left_order.pd
hot_and_cold_inlets.pd
calculation_order.pd
trigger_conversion.pd
depth_first.pd
typing_conventions.pd
state_saving.pd
pddplink-object.pd (PD Extended)
comment-object.pd (PD Extended)
Elements
Objects
objects.pd (list-of-objects.txt / pdobjects.pdf)
storage_objects.pd
creation_arguments.pd
init_to_0.pd
Messages
messages.pd
building_messages.pd
multiple_messages.pd
ordering_messages.pd
atomic_messages.pd
Numbers
numbers.pd
floats_and_ints.pd
number_limitations.pd
storing_a_number_globally.pd
Symbols
symbols.pd
symbol_construction.pd
symbol_conversion.pd
Graphical Objects
builtin_gui_objects.pd
properties.pd
sliders.pd
extended_gui_objects.pd (PD Extended)
Midi
Before working with MIDI Pure Data has to be set up for it:
- With SimpleSynth:
- Open SimpleSynth and change the Midi Source „SimpleSynth virtual input“.
- Under PD -> Preferences -> Midi Settings change output device 1 to „SimpleSynth virtual input“.
- With Midi Piano (in room 4010):;
- Put the Midi Piano on. (Black box under the right side of the keyboard.)
- Under PD -> Preferences -> Midi Settings change output and input device 1 to xxx.
Testpatch: midipiano-test.pd. To control a PD Patch from a Midipiano see: midiconrol.pd.
MIDI is a protocol of control data that can communicate (play) with keyboard based synthesizers. The object
[makenote] creates midi notes, velocities and durations to output via [noteout]:
midi_notes.pd
Several other Parameters of Midi Instruments can be controlled by midi controllers. This controllers are accessed with the objects [ctlin] and [ctlout]:
midi_ctl.pd
Program changes (sound the notes are played with) are controlled with the obejcts [pgmin] and [pgmout]:
midi-pgm.pd
Timing
using_metro.pd
delay_bang.pd
metronome.pd
measure_time.pd
delay_number_streams.pd
Counting
counting.pd
counting_updown.pd
accumulation.pd
metro_looping.pd
loop_until.pd
ramping_up_and_down.pd
Mathematics
arithmetic_objects.pd
comparing_numbers.pd
min_and_max.pd
mod_and_div.pd
math_expr.pd
clip_numbers.pd
random_numbers.pd
Conditionals
selecting_events.pd
part_number_streams.pd
routing_messages.pd
doors.pd
Lists
Lists can be build in different ways:
building_lists.pd
unpack_lists.pd
The [list append] (short [list]) object ist used to build and concatenate lists:
append_lists.pd
list_length.pd[list split] splits a list in two:
splitting_lists.pd[list-len] is an abstraction to get the list length (number of elements in a list):
list_conversion.pd
Cordless Connections
chordless_value_setting.pd
send_and_receive.pd
GUI_send_and_receive.pd
Subpatches
Abstractions
abstractions.pd, (sec2sr.pd)
abstractions_with_arguments.pd, (dollarsign.pd), (scaler.pd)
local_sends_and_receive.pd, (local_send.pd)
dollarnull_variable.pd, (dollarnull.pd)
GUI
GOP_abstraction.pd, (chn.pd)
labeling.pd
Audio
digital_audio.pd
dsp_processing.pd
in-output.pd
cords.pd
audio_math.pd
control_audio_conversion.pd
acoustic_conversions.pd
receive_multiple_sends.pd
microphone_input.pd (PD Extended)
Generators
waveforms.pd
triangle.pd
noises.pd (PD Extended)
Envelopes
ramping_up_and_down.pd
envelope_with_line.pd
control_line_envelopes.pd
curved_ramps.pd
env_types.pd (env_formulas.pd)
phasor2env.pd
Arrays & Tables
arrays-graphs-tables.pd
working_with_arrays.pd
read_write_array.pd
draw_sound.pd
Modulation Synthesis
Amplitude Modulation
classical_am_modulation.pd
ring_modulation.pd
complex_serial_am_synthesis.pd
ring_modulated_voice.pd
Frequency Modulation
frequency_modulation.pd
complex-fm.pd
fm-2carriers.pd
Subtractive Synthesis
filters.pd
highpass_filter.pd
4pol_hip.pd
lowpass_filter.pd
4pol_lop.pd
bandpass_filter.pd
4pol_bp.pd
bandpass-construction.pd
voltage_controlled_filter.pd
noise-synthesis.pd
formant_synthesis.pd (PD Extended)
Additive Synthesis
overtones_harmonics.pd
sinesum.pd
building_waveforms_with_sines.pd
random-timbre.pd
risset_bell.pd (PD Extended)
Waveshaping
waveshaping.pd (waveshaper~.pd)
Sequencing
Sequencing messages from a text file with the [qlist] object either manually or automatically (time tagged in msecs): qlist_sequencing.pd, (step.txt)
envelope_qlist.pd, (werte.txt)
Control different instances of abstractions with a [qlist] by naming the [receive] objects with variables:
qlist_abstractions.pd, (qlist2.txt)
Recording and playing sequences with [textfile]:
textfile_sequencing.pd, (lists.txt)
Stochastic
-
Random
Floating point random generator abstraction with setable min and max value and number of digits:
frandom-help.pd, (frandom.pd) -
Chance
The clasical chance operation is the urn-model:
urn-prob.pd (PD Extended) -
Tendency Masks
Tendency masks are a way to control the minimum and the maximum boundaries of random processes. There are several ways to implement those masks:
-
Markov Chains
A Markov chain, named after Andrey Markov, is a mathematical system that undergoes transitions from one state to another, between a finite or countable number of possible states:
markov.chain.pdThe [prob] object utilizes the creation of first order markov chains:
markov-prob.pd (PD Extended)
Pathnames
making-filenames.pd
list-folder.pd (PD Extended)
Recording
recording.pd
timed_recording.pd
read_soundfile_from_hd.pd
Sampling
playing_samples_1.pd
playing_samples_2.pd
timed-buffer-rec.pd
playing_samples_3.pd
Granular Synthesis
envelope.pd
vline_sampleplay.pd
single-grain-stream1.pd
(grain-stream1.pd)
single-grain-stream2.pd
(grain-stream2.pd)
3grainstreams.pd
(grain-stream.pd)
Delays
delay_with_feedback.pd
roomecho.pd
interpolating_delay.pd
control-blocksize.pd (pulse-train)
Spatialisation
panning.pd
equal_power_pan.pd
basic_reverb.pd
freeverb~-help.pd (PD Extended)
graphics-quad.pd (PD Extended)
4ch-qlist-grid.pd (PD Extended)
Amplitude Detection
attack_detection.pd
toggle_with_bonk.pd
envelope_follower.pd
Pitchtracking
pitch_tracking.pd
voice_am.pd
voice_fm.pd
sigmund2additive.pd
sigmund2subtractive.pd
Pitch Shifting
An explanation is found here: http://www.katjaas.nl/pitchshift/pitchshift.html
The Springer Tempophon (png)
tempophon.pd
rotating_tape_heads.pd
ssb_modulation.pd
Fourier Analysis and Transformation
FFT & PD by Marius Schebella
This next patches are taken from: http://www.pd-tutorial.com/english/ch03s08.html
filterbank_analysis.pd
fft_principles.pd
fft_windowed.pd
fft_subpatch.pd
fft_filter.pd
Interface Devices
-
Keyboard
grabbing_keystrokes.pd
keybd_play.pd
kbstep.pd,
(kbstep-help.pd)
selective_counter.pd,
(sel-count.pd)
entry-object.pd (PD Extended) -
Mouse
mouse_mapping.pd (PD Extended)
System
random_play_folder.pd (PD Extended)
shell_interaction.pd (PD Extended)
Network
network_ports.pd
tcp_and_udp.pd
netsend_netreceive.pd
identification_sender.pd and identification_receiver.pd
(To easy check your ip address use a program like BwanaDik.)
chat-client.pd
chat-server.pd
netserver_and_netclient.pd (PD Extended)
Patch Design
Patch_Design.rtf
cpu-optimisation.txt
main.pd with:
- 2 x output.pd (stereo output)
- clock.pd (clock with minutes and seconds)
- dspp.pd (cpu meter)and 2 channel abstractions containing different modules (GUI abstractions):
- chan1.pd
- 5tape_pitchshifter.pd (5 voice pitch shifter)
- chan2.pd
- delmod.pd (modulated delay)
Both channels have:
- input.pd (channel input)
- panning.pd (stereo panning)
- qlstp.pd ( cuelist stepper)
To save a patch as an application open the mainpatch in PD-Extended and select „File -> Make app from folder …“. Choose a name and save it. (This may take some time.)