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

basic_elements.pd
atoms.pd

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:
    1. Open SimpleSynth and change the Midi Source „SimpleSynth virtual input“.
    2. Under PD -> Preferences -> Midi Settings change output device 1 to „SimpleSynth virtual input“.
  • With Midi Piano (in room 4010):;
    1. Put the Midi Piano on. (Black box under the right side of the keyboard.)
    2. 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

subpatches.pd
outlet_order.pd

Abstractions

abstr_sub.pd, (add.pd)

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

    weighted_random.pd

    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:

    sym-tendency.pd
    asym-tendency.pd
    fixed-tendency.pd

  • 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.pd

    The [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

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:

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.)