- Reestructuración de ficheros y directorios general

- merge v0.01 --> Añadido fileselector
- Añadidas fuentes de Gem y Pure Data
- pix2jpg incluído en Gem. Archivos de construcción de Gem modificados.
- Añadido fichero ompiling.txt con instrucciones de compilación
This commit is contained in:
Santi Noreña 2013-02-04 18:00:17 +01:00
parent c9adfd020b
commit e85d191b46
3100 changed files with 775434 additions and 3073 deletions

View file

@ -0,0 +1,10 @@
#N canvas 440 252 579 286 12;
#X text 87 6 INTRODUCTION TO THE PD AUDIO EXAMPLE PATCHES;
#X text 328 257 updated for Pd version 0.37;
#X text 34 45 This is the second of three tutorial series on Pd. This
one shows the time-domain audio processing features. (The first one
showed how to use Pd to do "control" computations \, and the third
is about frequency-domain techniques.);
#X text 33 125 These patches are accompanied by an ONLINE BOOK:;
#X text 100 158 http://www.crca.ucsd.edu/~msp/techniques.htm;
#X text 37 189 which develops the underlying theory.;

View file

@ -0,0 +1,9 @@
This is the second of three tutorial series on Pd. This one shows the
time-domain audio processing features. (The first one showed how to use Pd to
do "control" computations, and the third is about frequency-domain techniques.)
These patches are accompanied by an ONLINE BOOK:
http://www.crca.ucsd.edu/~msp/techniques.htm
which develops the underlying theory.

View file

@ -0,0 +1,32 @@
#N canvas 6 2 588 513 12;
#X obj 108 109 osc~ 440;
#X obj 108 168 dac~;
#X text 187 111 <-- 440 Hz. sine wave at full blast;
#X obj 108 138 *~ 0.05;
#X text 202 3 MAKING A SINE WAVE;
#X text 32 195 Audio computation can be turned on and off by sending
messages to the global "pd" object as follows:;
#X msg 98 239 \; pd dsp 1;
#X msg 202 239 \; pd dsp 0;
#X text 113 276 ON;
#X text 222 276 OFF;
#X text 29 297 You should see the Pd window change to reflect whether
audio is on or off. You can also turn audio on and off using the "audio"
menu \, but the buttons are provided as a shortcut.;
#X text 30 368 When DSP is on \, you should hear a tone whose pitch
is A 440 and whose amplitude is 0.05. If instead you are greeted with
silence \, you might want to read the HTML documentation on setting
up audio.;
#X text 28 434 In general when you start a work session with Pd \,
you will want to choose "test audio and MIDI" from the help window
\, which opens a more comprehensive test patch than this one.;
#X text 296 247 <-- click these;
#X text 187 139 <-- reduce amplitude to 0.05;
#X text 160 168 <----- send to the audio output device;
#X text 32 23 Audio computation in Pd is done using "tilde objects"
such as the three below. They use continuous audio streams to intercommunicate
\, as well as communicating with other ("control") Pd objects using
messages.;
#X text 342 490 updated for Pd version 0.36;
#X connect 0 0 3 0;
#X connect 3 0 1 0;

View file

@ -0,0 +1,37 @@
#N canvas 73 190 702 512 12;
#X obj 64 65 osc~ 440;
#X obj 64 283 dac~;
#X text 145 66 <-- 440 Hz. sine wave at full blast;
#X msg 431 7 \; pd dsp 1;
#X msg 514 7 \; pd dsp 0;
#X text 456 45 ON;
#X text 534 43 OFF;
#X text 164 18 CONTROLLING AMPLITUDE;
#X text 35 327 Amplitudes of audio signals can have any reasonable
range \, but when you output a signal via the dac~ object \, the samples
should range between -1 and +1. Values out of that range will be "clipped."
;
#X obj 64 202 *~ 0;
#X floatatom 107 165 0 0 0 0 - - -;
#X obj 95 132 dbtorms;
#X floatatom 95 100 0 0 80 0 - - -;
#X text 141 100 <-- set amplitude here in dB;
#X text 211 133 <-- this converts dB to linear units;
#X text 210 164 <-- this shows the linear gain;
#X text 116 204 <-- multiply the sine wave by the gain \, reducing
its amplitude. You can also use the "*~" object to multiply two signals.
The "0" argument here instructs it that we'll just send it messages
to set the multiplier.;
#X text 35 396 Here we calculate a gain for the multiplier (*~) using
a "dbtorms" object (acronym for "dB to RMS"). 100 dB is normalized
to one \, and zero dB artificially outputs a true 0;
#X text 34 452 Pd assumes you have a two channel audio system unless
you tell it otherwise.;
#X text 440 486 updated for Pd version 0.33;
#X text 114 282 <-- and out. We're sending to both channels now.;
#X connect 0 0 9 0;
#X connect 9 0 1 0;
#X connect 9 0 1 1;
#X connect 11 0 9 1;
#X connect 11 0 10 0;
#X connect 12 0 11 0;

View file

@ -0,0 +1,55 @@
#N canvas 369 106 647 598 12;
#X obj 56 79 osc~ 440;
#X obj 56 309 dac~;
#X msg 446 79 \; pd dsp 1;
#X msg 538 79 \; pd dsp 0;
#X text 467 112 ON;
#X text 555 112 OFF;
#X obj 56 269 *~;
#X obj 72 243 line~;
#X text 129 243 <--- ramp generator;
#X text 132 78 <-- sine wave;
#X msg 72 103 0.1 2000;
#X msg 72 177 0 2000;
#X msg 72 125 0.1 50;
#X msg 72 199 0 50;
#X msg 72 147 0.1;
#X msg 72 221 0;
#X text 274 124 ON;
#X text 154 105 <-- slow;
#X text 144 126 <-- fast;
#X text 111 146 <-- instantly;
#X text 271 197 OFF;
#X text 136 178 <-- slow;
#X text 129 199 <-- fast;
#X text 109 219 <-- instantly;
#X text 112 161 ----------------------;
#X text 97 308 <-- out;
#X text 103 7 CONTROLLING AMPLITUDE USING LINE~;
#X text 38 342 Line~'s left inlet is a target value \; it reaches that
target in the time specified (in milliseconds) to its right inlet.
;
#X text 34 495 The line~ object (and its control brother \, line) treat
their right inlet specially. The inlets don't retain values the way
other inlets do but revert to zero whenever a target is received.;
#X text 14 27 In this patch \, the multiplier is configured to multiply
two signals. The amplitude is now a signal computed by the line~ object.
;
#X text 37 395 (In this example \, message boxes with two numbers each
are connected to line~'s left inlet. Except in some special cases \,
Pd objects with more than one inlet will automatically distribute lists
of numbers across their inlets. In this case \, "0 50" becomes \, "50
at right and 0 at left.");
#X text 386 557 updated for Pd version 0.36;
#X text 93 268 <-- multiply the sine wave by the ramp. There's no longer
a "0" argument-- this tells Pd to expect a signal here.;
#X connect 0 0 6 0;
#X connect 6 0 1 0;
#X connect 6 0 1 1;
#X connect 7 0 6 1;
#X connect 10 0 7 0;
#X connect 11 0 7 0;
#X connect 12 0 7 0;
#X connect 13 0 7 0;
#X connect 14 0 7 0;
#X connect 15 0 7 0;

View file

@ -0,0 +1,59 @@
#N canvas 30 68 949 754 12;
#X obj 67 77 osc~ 440;
#X obj 67 329 dac~;
#X obj 67 242 *~;
#X obj 86 180 line~;
#X text 116 330 <-- out;
#X text 124 9 LINES GRAPHED;
#X text 24 33 Here again is a line~ controlling the amplitude of an
osc~ \, but with the outputs graphed:;
#X obj 149 89 r graphit;
#X obj 151 179 r graphit;
#X obj 151 246 r graphit;
#X obj 86 149 r to-line;
#X graph graph1 0 -1.02 44100 1.02 631 480 831 350;
#X array product 44100 float 0;
#X pop;
#X graph graph1 0 -1.02 44100 1.02 631 150 831 20;
#X array osc-output 44100 float 0;
#X pop;
#X graph graph1 0 -1.02 44100 1.02 631 315 831 185;
#X array line-output 44100 float 0;
#X pop;
#X obj 149 119 tabwrite~ osc-output;
#X obj 67 299 *~ 0.1;
#X msg 38 401 \; pd dsp 1 \; to-line 0 \, 1 500 \; graphit bang;
#X msg 210 401 \; pd dsp 1 \; to-line 1 \, 0 500 \; graphit bang;
#X obj 151 209 tabwrite~ line-output;
#X obj 151 276 tabwrite~ product;
#X text 70 379 ramp up;
#X text 235 378 ramp down;
#X text 406 376 to 1/2;
#X msg 375 400 \; pd dsp 1 \; to-line 0.5 1000 \; graphit bang;
#X text 634 491 ------ 1 second ------;
#X text 38 485 Click the message boxes above to try it. Note that in
the first two boxes \, the line~ objects get two messages. The first
one \, with no time value \, causes the line~ to jump immediately to
the value. The third box takes line~'s previous value as a point of
departure. What you see will depend on which box you last clicked and
how long you waited between the two.;
#X text 662 727 updated for Pd version 0.33;
#X text 41 600 On most machines \, you will hear an interruption in
the sound one second after you click on the first or third box. This
is because the graphical updates are likely to eat more CPU time than
your audio buffer has pre-buffered for. You can avoid this if you keep
your graphs in sub-windows and open them only when you need them. In
some future version of Pd this behavior will be improved. Until then
\, you'll have to avoid having arrays getting re-drawn during music
performances.;
#X connect 0 0 2 0;
#X connect 0 0 14 0;
#X connect 2 0 15 0;
#X connect 2 0 19 0;
#X connect 3 0 2 1;
#X connect 3 0 18 0;
#X connect 7 0 14 0;
#X connect 8 0 18 0;
#X connect 9 0 19 0;
#X connect 10 0 3 0;
#X connect 15 0 1 0;

View file

@ -0,0 +1,30 @@
#N canvas 300 159 635 486 12;
#X text 261 20 CONTROLLING OUTPUT AMPLITUDE;
#X obj 32 27 osc~ 440;
#X obj 54 55 osc~ 550;
#X obj 54 116 osc~ 660;
#X obj 32 88 +~;
#X obj 32 142 +~;
#X text 108 177 <-- this is a subwindow--right click on it;
#X text 149 197 and select "open" to see inside.;
#X text 30 401 The output control automatically starts DSP whenever
you touch the level control. Hitting "mute" toggles between the current
level and zero.;
#X obj 32 173 output~;
#X text 383 463 updated for Pd version 0.36;
#X text 143 115 <-- Here we make an A major triad as a test signal.
;
#X text 31 250 In this and subsequent patches \, we'll use a subwindow
\, "output" \, to control overall amplitude. The amplitudes are in
decibels \, with 100 being full blast. In this example \, you can't
actually push the output amplitude past 90 or so without clipping.
You'll know you're clipping if \, instead of an A major chord \, you
hear a single \, distorted tone two octaves down. The clipping happens
at Pd's last stage of audio output. Audio signals internal to Pd have
essentially no level limit.;
#X connect 1 0 4 0;
#X connect 2 0 4 1;
#X connect 3 0 5 1;
#X connect 4 0 5 0;
#X connect 5 0 9 0;
#X connect 5 0 9 1;

View file

@ -0,0 +1,61 @@
#N canvas 8 17 693 642 12;
#N canvas 0 0 450 300 graph1 0;
#X array osc-output 4410 float 0;
#X coords 0 1.02 4410 -1.02 200 130 1;
#X restore 473 167 graph;
#X obj 98 261 tabwrite~ osc-output;
#X msg 98 232 bang;
#X floatatom 280 66 0 0 0 0 - - -;
#X text 147 231 <-- click to graph;
#X obj 15 206 r frequency;
#X msg 280 37 set \$1;
#X floatatom 6 66 0 0 0 0 - - -;
#X obj 6 8 r frequency;
#X msg 6 37 set \$1;
#X obj 19 90 s frequency;
#X obj 280 8 r pitch;
#X obj 289 90 s pitch;
#X obj 280 116 mtof;
#X obj 280 145 s frequency;
#X obj 6 145 s pitch;
#X obj 6 116 ftom;
#X text 105 66 <-- set frequency;
#X text 372 65 <-- set MIDI pitch;
#X text 15 429 Frequency and pitch are converted using the "ftom" and
"mtof" objects. Frequency refers to the number of cycles per second.
Pitch is "60" for Middle C \, 61 for C sharp \, 72 for the next C up
\, and so on.;
#X text 476 308 ---- 0.1 seconds ----;
#X text 447 6 FREQUENCY AND PITCH;
#X text 16 363 The osc~ object \, if you give it an argument \, expects
floating-point messages to set its frequency. Without arguments \,
its frequency is controlled by connecting an audio signal to its input.
;
#X text 14 496 Mtof and ftom work fine for microtones (non-integral
"MIDI pitch" ) and don't have MIDI's range restriction-- for example
\, MIDI -36 is about 1 Hz.;
#X text 15 553 Note also the "set" messages going to the number boxes
so that they can each update the other without bringing on an infinite
loop. (get help on number boxes for details.);
#X text 87 291 <-- output level;
#X text 51 116 <-- convert frequency;
#X text 106 134 to "MIDI" pitch;
#X text 327 117 <-- convert "MIDI" pitch to frequency;
#X obj 15 273 output~;
#X text 437 619 updated for Pd version 0.36;
#X obj 15 232 osc~;
#X connect 2 0 1 0;
#X connect 3 0 12 0;
#X connect 3 0 13 0;
#X connect 5 0 31 0;
#X connect 6 0 3 0;
#X connect 7 0 10 0;
#X connect 7 0 16 0;
#X connect 8 0 9 0;
#X connect 9 0 7 0;
#X connect 11 0 6 0;
#X connect 13 0 14 0;
#X connect 16 0 15 0;
#X connect 31 0 1 0;
#X connect 31 0 29 0;
#X connect 31 0 29 1;

View file

@ -0,0 +1,76 @@
#N canvas 18 14 650 653 12;
#X floatatom 32 60 0 0 0 0 - - -;
#X obj 32 86 mtof;
#X obj 32 323 output~;
#X msg 32 34 60;
#X text 67 63 <-- choose a pitch;
#X text 68 34 <-- reset to middle C;
#X obj 32 154 osc~;
#X obj 73 130 * 2;
#X obj 73 154 osc~;
#X obj 137 154 osc~;
#X obj 137 130 * 3;
#X obj 201 155 osc~;
#X obj 201 131 * 4;
#X obj 137 179 *~ 0.2;
#X obj 33 289 +~;
#X obj 74 259 *~;
#X obj 109 260 tgl 15 0 empty empty empty 0 -6 0 8 -262144 -1 -1 0
1;
#X obj 74 210 +~;
#X obj 74 234 +~;
#X text 133 7 Adding sinusoids to make a complex tone;
#N canvas 0 0 450 300 graph1 0;
#X array tab.01.07 882 float 0;
#X coords 0 1.02 881 -1.02 200 130 1;
#X restore 426 222 graph;
#X msg 116 295 bang;
#X text 165 294 <-- click to graph;
#X text 260 129 frequencies of harmonics;
#X text 260 155 four oscillators;
#X text 264 181 adjust amplitudes;
#X text 109 233 add the three overtones together;
#X obj 116 324 tabwrite~ tab.01.07;
#X text 381 632 updated for Pd version 0.40.;
#X text 429 360 ---- 0.02 seconds ----;
#X obj 73 179 *~ 0.1;
#X obj 201 179 *~ 0.5;
#X text 129 259 <-- overtones ON/OFF;
#X text 29 580 To hear the output \, choose a pitch (at top) \, optionally
click the "overtones" control \, and mouse up the output volume. Click
the "bang" message to graph it.;
#X text 31 392 A simple way to build non-sinusoidal \, periodic musical
tones is to sum a series of harmonically tuned sinusoids. Here the
four oscillators have frequencies in a 1:2:3:4 ratio (the three "*"
objects compute the second \, third \, and fourth one). The amplitudes
are adjusted by the "*~ 0.1" \, etc. \, objects. Note that \, since
the frequency (from the "mtof") is a message \, a "*" box suffices
to operate on it \, but the oscillator's output \, being an audio signal
\, needs "*~" instead. The control marked "overtones ON/OFF" is a toggle
switch. Click to turn it on and off. Of the overtones are "off" you
hear only a sinusoid from the forst oscillator. If on \, you hear all
four.;
#X connect 0 0 1 0;
#X connect 1 0 6 0;
#X connect 1 0 7 0;
#X connect 1 0 10 0;
#X connect 1 0 12 0;
#X connect 3 0 0 0;
#X connect 6 0 14 0;
#X connect 7 0 8 0;
#X connect 8 0 30 0;
#X connect 9 0 13 0;
#X connect 10 0 9 0;
#X connect 11 0 31 0;
#X connect 12 0 11 0;
#X connect 13 0 17 1;
#X connect 14 0 2 0;
#X connect 14 0 2 1;
#X connect 14 0 27 0;
#X connect 15 0 14 1;
#X connect 16 0 15 1;
#X connect 17 0 18 0;
#X connect 18 0 15 0;
#X connect 21 0 27 0;
#X connect 30 0 17 0;
#X connect 31 0 18 1;

View file

@ -0,0 +1,41 @@
#N canvas 53 63 581 571 12;
#X obj 31 212 output~;
#X obj 32 178 +~;
#X text 320 537 updated for Pd version 0.40.;
#X obj 32 110 +~;
#X obj 187 105 +~;
#X obj 187 52 osc~ 440;
#X obj 32 57 osc~ 330;
#X obj 53 81 osc~ 330.2;
#X obj 208 75 osc~ 440.33;
#X obj 342 102 +~;
#X obj 343 52 osc~ 587;
#X obj 364 75 osc~ 587.25;
#X obj 33 147 +~;
#X text 133 7 Beating between closely tuned sinusoids;
#X text 33 280 In each of the three pairs of oscillators above \, the
two frequencies are within 1/3 Hz or closer (for example \, the leftmost
ones are close to 330 Hz but separated by 1/5 Hz.) The result is a
gradual change in amplitude as the phases of the two slip against each
other. This is called beating. More complex beating pattenrs may be
made by using three or more oscillators. Also their amplitudes need
not be equal (as they are here).;
#X text 31 407 They are all summed using "+~" boxes. They could have
been summed in any order ("+~" is commutative for practical purposes)
but here they are added in pairs to emphasize the relationships between
them.;
#X text 30 474 In contrast to the previous example \, the oscillators
are not tuned to the overtone series (ratios 1:2:3:4...) and so the
frequencies 330 \, 440 \, and 587 are heard separately.;
#X connect 1 0 0 0;
#X connect 1 0 0 1;
#X connect 3 0 12 0;
#X connect 4 0 12 1;
#X connect 5 0 4 0;
#X connect 6 0 3 0;
#X connect 7 0 3 1;
#X connect 8 0 4 1;
#X connect 9 0 1 1;
#X connect 10 0 9 0;
#X connect 11 0 9 1;
#X connect 12 0 1 0;

View file

@ -0,0 +1,54 @@
#N canvas 92 96 760 640 12;
#X obj 259 168 *~;
#X floatatom 259 83 0 0 0 0 - - -;
#X floatatom 169 118 0 0 0 0 - - -;
#X obj 169 188 +~;
#N canvas 0 0 450 300 graph1 0;
#X array fm-output 441 float 0;
#X coords 0 1.02 440 -1.02 200 130 1;
#X restore 527 40 graph;
#X msg 244 228 bang;
#X text 286 228 <-- click to graph;
#X obj 244 252 tabwrite~ fm-output;
#X floatatom 281 138 0 0 0 0 - - -;
#X text 166 75 carrier;
#X text 165 93 frequency;
#X text 244 59 frequency;
#X text 245 42 modulation;
#X text 33 8 FREQUENCY MODULATION ("FM") USING TWO OSCILLATORS;
#X obj 168 232 osc~;
#X text 52 214 "carrier";
#X text 34 232 oscillator -->;
#X text 47 149 add modulator;
#X text 46 167 to carrier;
#X text 44 186 frequency -->;
#X text 320 150 index;
#X text 322 131 modulation;
#X obj 259 108 osc~;
#X text 531 172 --- 0.01 seconds ----;
#X text 53 443 To get the FM sound \, set all three of carrier frequency
\, modulation frequency \, and modulation index in the hundreds. Note
that you get a timbral change as you sweep modulation index \, because
this changes the amplitudes of the components of the output sound but
not their frequencies.;
#X obj 167 270 output~;
#X text 489 613 updated for Pd version 0.37;
#X text 54 332 This patch shows the classical FM synthesis technique
developed by John Chowning. It's nothing but an oscillator with vibrato
controlled by another "modulation" oscillator. First \, to understand
the patch \, set carrier frequency to 400 or so \, modulation frequency
between 5 and 10 \, and try modulation index values between 0 and 400
\, say. You'll hear a sine wave with vibrato.;
#X text 55 526 The component frequencies are equal to the carrier frequency
\, plus or minus multiples of the modulator frequency. A more complete
discussion of FM occurs in part 5 of this series.;
#X connect 0 0 3 1;
#X connect 1 0 22 0;
#X connect 2 0 3 0;
#X connect 3 0 14 0;
#X connect 5 0 7 0;
#X connect 8 0 0 1;
#X connect 14 0 7 0;
#X connect 14 0 25 0;
#X connect 14 0 25 1;
#X connect 22 0 0 0;

View file

@ -0,0 +1,37 @@
#N canvas 36 68 652 461 12;
#X text 157 10 PART 1 REVIEW;
#X obj 67 113 tabwrite~;
#X obj 67 87 line~;
#X obj 71 220 +;
#X obj 67 61 +~;
#X obj 67 139 osc~;
#X obj 72 319 r;
#X obj 72 295 s;
#X obj 71 269 inlet;
#X obj 114 245 mtof;
#X obj 71 244 ftom;
#X obj 122 269 outlet;
#X obj 67 164 dac~;
#X text 27 34 So far we've seen these audio ("tilde") objects:;
#X text 124 86 -- ramp generator;
#X text 158 113 -- sampler (which we've only used for graphing so far)
;
#X text 113 165 -- audio output ("digital/analog converter" -- a misnomer)
;
#X text 34 193 ... and these "control" objects:;
#X text 162 243 -- frequency to pitch conversion;
#X text 184 270 -- input and output to a subpatch;
#X text 108 296 ("send") -- wireless message sending;
#X text 109 321 ("receive") ... and receiving;
#X text 107 60 (etc.) -- arithmetic on audio signals;
#X text 109 218 (etc.) -- arithmetic;
#X text 385 426 updated for Pd version 0.40.;
#X text 112 139 -- sinusoidal oscillator;
#X obj 74 418 tgl 15 0 empty empty empty 0 -6 0 8 -262144 -1 -1 0 1
;
#X text 97 416 -- toggle switch;
#X floatatom 74 395 0 0 0 0 - - -;
#X text 109 394 -- number box;
#X msg 74 372;
#X text 111 372 -- message box;
#X text 43 346 ... and these other (non-object) boxes:;

View file

@ -0,0 +1,50 @@
#N canvas 19 22 722 608 12;
#X floatatom 164 43 0 0 0 0 - - -;
#N canvas 0 0 450 300 graph1 0;
#X array table10 259 float 1;
#A 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0.612 0.612 0.612 0.612 0.612 0.627692 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 -0.470769 -0.470769 -0.470769 -0.470769 -0.470769
-0.470769 -0.470769 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0.627692 0.627692 0.627692 0.643385 0.643385 0.643385
0.659077 0 -0.502154 -0.502154 -0.502154 -0.486462 -0.486462 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0.580615 0.596308 0.596308 0.596308 0.596308
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0;
#X coords 0 1.02 258 -1.02 258 130 1;
#X restore 445 47 graph;
#X text 30 123 oscillator -->;
#X text 456 587 updated for Pd version 0.34;
#X text 33 8 WAVETABLE OSCILLATORS;
#X text 36 106 wavetable;
#X obj 164 70 mtof;
#X floatatom 164 97 0 0 0 0 - - -;
#X obj 164 123 tabosc4~ table10;
#X text 94 42 pitch->;
#X text 35 309 Note that I selected "save contents" in the properties
dialog for table10 (right click on the table to see.) If this isn't
set \, the waveform won't be remembered as part of the patch but will
be reinitialized to zero when the patch is reopened.;
#X msg 35 549 \; table10 cosinesum 256 0.2 -0.2 0.2 -0.2 0.2 -0.2 0.2
;
#X msg 578 240 \; table10 const 0;
#X text 597 217 CLEAR TABLE;
#X text 35 395 For efficiency's sake tabosc4~ requires that the table
have a power of two plus three points (64+3=67 \, 128+3=131 \, 256+3=259
\, etc.) If you want wraparound to work smoothly \, you should make
the last three points copies of the first three. This is done because
tabread4~ does 4-point interpolation.;
#X text 38 494 If you want a specific sinusoidal composition \, you
can send table10 a message \, as below (see 11.arrays in the control
examples):;
#X text 36 240 Here \, in place of the "osc~" cosine wave oscillator
\, we introduce the tabosc4~ oscillator which produces an arbitrary
waveform. You can draw in the waveform with the mouse.;
#X obj 164 151 output~;
#X connect 0 0 6 0;
#X connect 6 0 7 0;
#X connect 7 0 8 0;
#X connect 8 0 17 0;
#X connect 8 0 17 1;

View file

@ -0,0 +1,147 @@
#N canvas 74 98 749 466 12;
#X graph graph1 0 -1.02 258 1.02 475 298 733 168;
#X array waveform11 259 float 1;
#A 0 -0.0896033 0 0.0896033 0.178356 0.265425 0.350007 0.431348 0.508756
0.58161 0.649372 0.711597 0.767935 0.818137 0.862053 0.89963 0.930912
0.956028 0.975187 0.988669 0.996811 1 0.998655 0.993223 0.984158 0.971919
0.956953 0.939691 0.920538 0.899867 0.878018 0.85529 0.831945 0.808204
0.784252 0.760239 0.736284 0.712477 0.688888 0.665568 0.642553 0.619872
0.59755 0.575607 0.554066 0.532953 0.512296 0.49213 0.472491 0.453419
0.434957 0.417147 0.400027 0.383632 0.367992 0.353126 0.339046 0.32575
0.313227 0.301453 0.290394 0.280002 0.270224 0.260995 0.252248 0.24391
0.235908 0.22817 0.220628 0.213219 0.205888 0.198586 0.191278 0.183936
0.176545 0.169098 0.1616 0.154063 0.146505 0.138954 0.131437 0.123987
0.116636 0.109415 0.102354 0.0954784 0.0888083 0.08236 0.0761442 0.0701659
0.0644253 0.0589178 0.0536354 0.0485669 0.0436994 0.0390194 0.0345135
0.0301695 0.0259776 0.0219306 0.0180245 0.0142591 0.0106377 0.00716724
0.00385775 0.000722025 -0.00222511 -0.0049675 -0.00748845 -0.00977153
-0.0118014 -0.0135644 -0.0150493 -0.0162479 -0.0171551 -0.0177693 -0.0180928
-0.0181312 -0.0178936 -0.017392 -0.0166417 -0.0156601 -0.0144666 -0.0130822
-0.0115294 -0.00983114 -0.0080113 -0.00609396 -0.0041034 -0.00206402
-2.23572e-07 0.00206358 0.00410297 0.00609353 0.00801089 0.00983075
0.011529 0.0130819 0.0144663 0.0156599 0.0166416 0.0173919 0.0178935
0.0181312 0.0180929 0.0177695 0.0171552 0.0162481 0.0150496 0.0135647
0.0118018 0.009772 0.00748897 0.00496807 0.00222573 -0.000721367 -0.00385706
-0.00716651 -0.010637 -0.0142583 -0.0180237 -0.0219297 -0.0259767 -0.0301686
-0.0345125 -0.0390184 -0.0436984 -0.0485658 -0.0536343 -0.0589167 -0.0644241
-0.0701647 -0.0761429 -0.0823587 -0.0888069 -0.0954769 -0.102353 -0.109414
-0.116634 -0.123985 -0.131435 -0.138952 -0.146504 -0.154061 -0.161598
-0.169097 -0.176543 -0.183935 -0.191276 -0.198584 -0.205886 -0.213218
-0.220627 -0.228169 -0.235906 -0.243908 -0.252246 -0.260993 -0.270222
-0.28 -0.290392 -0.301451 -0.313224 -0.325747 -0.339043 -0.353123 -0.367989
-0.383629 -0.400023 -0.417143 -0.434954 -0.453415 -0.472486 -0.492125
-0.512292 -0.532948 -0.554062 -0.575602 -0.597545 -0.619868 -0.642548
-0.665563 -0.688883 -0.712472 -0.736279 -0.760234 -0.784247 -0.808199
-0.83194 -0.855285 -0.878013 -0.899863 -0.920533 -0.939687 -0.956949
-0.971916 -0.984156 -0.993221 -0.998655 -1 -0.996813 -0.988671 -0.975191
-0.956033 -0.930918 -0.899638 -0.862061 -0.818147 -0.767947 -0.71161
-0.649386 -0.581625 -0.508772 -0.431366 -0.350025 -0.265443 -0.178375
-0.0896226 -1.94061e-05 0.089584;
#X pop;
#X floatatom 202 171 0 0 100;
#N canvas 159 26 532 285 output 0;
#X obj 338 160 t b;
#X obj 338 110 f;
#X obj 338 60 inlet;
#X text 344 29 mute;
#X obj 338 185 f;
#X msg 426 180 0;
#X msg 338 85 bang;
#X obj 338 135 moses 1;
#X obj 397 110 moses 1;
#X obj 83 148 dbtorms;
#X obj 397 85 r master-lvl;
#X obj 83 42 r master-lvl;
#X obj 338 210 s master-lvl;
#X obj 20 155 inlet~;
#X obj 199 41 inlet;
#X text 199 18 level;
#X obj 199 105 s master-lvl;
#X msg 96 65 set \$1;
#X obj 96 90 outlet;
#X msg 214 65 \; pd dsp 1;
#X obj 83 198 line~;
#X obj 20 207 *~;
#X obj 20 232 dac~;
#X obj 83 173 pack 0 50;
#X text 20 132 audio;
#X text 96 114 show level;
#X obj 426 155 t b;
#X obj 20 181 hip~ 1;
#X connect 0 0 4 0;
#X connect 1 0 7 0;
#X connect 2 0 6 0;
#X connect 4 0 12 0;
#X connect 5 0 12 0;
#X connect 6 0 1 0;
#X connect 7 0 0 0;
#X connect 7 1 26 0;
#X connect 8 1 4 1;
#X connect 9 0 23 0;
#X connect 10 0 1 1;
#X connect 10 0 8 0;
#X connect 11 0 9 0;
#X connect 11 0 17 0;
#X connect 13 0 27 0;
#X connect 14 0 16 0;
#X connect 14 0 19 0;
#X connect 17 0 18 0;
#X connect 20 0 21 1;
#X connect 21 0 22 0;
#X connect 21 0 22 1;
#X connect 23 0 20 0;
#X connect 26 0 5 0;
#X connect 27 0 21 0;
#X restore 164 199 pd output;
#X msg 240 172 MUTE;
#X text 30 123 oscillator -->;
#X text 485 445 updated for Pd version 0.34;
#X text 33 8 WAVETABLE OSCILLATORS;
#X text 36 106 wavetable;
#X text 88 54 pitch->;
#X graph graph2 0 0 258 1000 475 155 734 15;
#X array pitch11 259 float 1;
#A 0 757.143 757.143 735.714 700 671.429 650 621.429 600 571.429 550
521.429 507.143 485.714 464.286 442.857 428.571 414.286 400 378.571
364.286 342.857 328.571 928.571 921.429 921.429 914.286 907.143 892.857
885.714 878.571 864.286 850 828.571 807.143 792.857 785.714 775 764.286
753.571 742.857 735.714 728.571 721.429 714.286 703.571 692.857 682.143
671.429 650 628.571 617.857 607.143 596.429 585.714 575 564.286 553.571
542.857 532.143 521.429 510.714 500 485.714 478.571 464.286 450 435.714
428.571 400 392.857 385.714 378.571 357.143 350 342.857 335.714 328.571
314.286 292.857 285.714 271.429 264.286 571.429 571.429 571.429 571.429
571.429 564.286 564.286 278.571 271.429 271.429 278.571 278.571 278.571
278.571 571.429 571.429 571.429 575 578.571 578.571 278.571 278.571
285.714 285.714 278.571 278.571 278.571 878.571 878.571 878.571 878.571
878.571 321.429 325 328.571 328.571 328.571 328.571 885.714 885.714
885.714 885.714 207.143 207.143 207.143 200 207.143 207.143 207.143
214.286 214.286 221.429 228.571 228.571 242.857 250 257.143 264.286
278.571 292.857 307.143 321.429 335.714 350 371.429 392.857 421.429
435.714 471.429 500 542.857 571.429 628.571 664.286 700 728.571 757.143
792.857 828.571 885.714 928.571 978.571 1000 1007.14 1007.14 1000 1000
992.857 985.714 885.714 914.286 671.429 671.429 671.429 671.429 671.429
671.429 671.429 671.429 671.429 671.429 678.571 635.714 635.714 678.571
714.286 714.286 678.571 635.714 635.714 635.714 742.857 742.857 685.714
685.714 635.714 621.429 685.714 792.857 792.857 678.571 521.429 521.429
521.429 864.286 857.143 857.143 471.429 471.429 471.429 471.429 921.429
921.429 385.714 385.714 385.714 964.286 964.286 964.286 328.571 328.571
328.571 328.571 885.714 885.714 885.714 685.714 214.286 214.286 207.143
207.143 921.429 921.429 921.429 921.429 207.143 207.143 200 200 957.143
957.143 950 214.286 214.286 207.143 207.143 957.143 957.143 950 200
207.143 207.143 942.857 942.857 942.857 950 950;
#X pop;
#X obj 164 87 tabosc4~ pitch11;
#X obj 164 123 tabosc4~ waveform11;
#X obj 164 55 sig~ 0.5;
#X text 13 319 Here's a tabosc4~ controlling the frequency of another
one. If you get properties on the two arrays \, you'll see that the
top graph has a vertical scale from 0 to 1000 \; we're looping through
that at a frequency of 0.5 Hz. and the output is used as the frequency
input of the second tabosc4~. I've detected Klingons \, Captain Kirk...
;
#X connect 1 0 2 1;
#X connect 2 0 1 0;
#X connect 3 0 2 2;
#X connect 10 0 11 0;
#X connect 11 0 2 0;
#X connect 12 0 10 0;

View file

@ -0,0 +1,130 @@
#N canvas 55 137 820 651 12;
#N canvas 0 0 450 300 graph1 0;
#X array waveform12 131 float 1;
#A 0 -0.172615 -0.172615 -0.172615 -0.172615 -0.172615 -0.141231 -0.109846
-0.0941538 -0.0627692 -0.0470769 0.0156923 0.0784615 0.125538 0.188308
0.235385 0.298154 0.360923 0.392308 0.470769 0.533538 0.596308 0.643385
0.674769 0.721846 0.753231 0.784615 0.816 0.831692 0.847385 0.878769
0.894462 0.910154 0.910154 0.910154 0.910154 0.910154 0.894462 0.894462
0.894462 0.894462 0.878769 0.863077 0.816 0.800308 0.768923 0.737538
0.706154 0.674769 0.643385 0.596308 0.564923 0.533538 0.470769 0.423692
0.376615 0.313846 0.266769 0.204 0.172615 0.109846 0.0627692 0.0156923
0 -0.0313846 -0.0627692 -0.0784615 -0.0941538 -0.109846 -0.141231 -0.156923
-0.172615 -0.204 -0.219692 -0.219692 -0.235385 -0.235385 -0.235385
-0.219692 -0.219692 -0.219692 -0.204 -0.156923 -0.125538 -0.0784615
0 0.172615 0.313846 0.470769 0.564923 0.627692 0.690462 0.721846 0.737538
0.753231 0.768923 0.768923 0.753231 0.737538 0.706154 0.674769 0.612
0.580615 0.549231 0.517846 0.486462 0.423692 0.392308 0.360923 0.282462
0.219692 0.109846 -0.0156923 -0.0941538 -0.109846 -0.141231 -0.156923
-0.172615 -0.188308 -0.204 -0.204 -0.219692 -0.204 -0.204 -0.219692
-0.219692 -0.204 -0.204 -0.204 -0.204 -0.204 -0.188308;
#X coords 0 1.02 130 -1.02 258 130 1;
#X restore 462 30 graph;
#X floatatom 194 299 0 0 100 0 - - -;
#N canvas 159 26 532 285 output 0;
#X obj 338 160 t b;
#X obj 338 110 f;
#X obj 338 60 inlet;
#X text 344 29 mute;
#X obj 338 185 f;
#X msg 426 180 0;
#X msg 338 85 bang;
#X obj 338 135 moses 1;
#X obj 397 110 moses 1;
#X obj 83 148 dbtorms;
#X obj 397 85 r master-lvl;
#X obj 83 42 r master-lvl;
#X obj 338 210 s master-lvl;
#X obj 20 155 inlet~;
#X obj 199 41 inlet;
#X text 199 18 level;
#X obj 199 105 s master-lvl;
#X msg 96 65 set \$1;
#X obj 96 90 outlet;
#X msg 214 65 \; pd dsp 1;
#X obj 83 198 line~;
#X obj 20 207 *~;
#X obj 20 232 dac~;
#X obj 83 173 pack 0 50;
#X text 20 132 audio;
#X text 96 114 show level;
#X obj 426 155 t b;
#X obj 20 181 hip~ 1;
#X connect 0 0 4 0;
#X connect 1 0 7 0;
#X connect 2 0 6 0;
#X connect 4 0 12 0;
#X connect 5 0 12 0;
#X connect 6 0 1 0;
#X connect 7 0 0 0;
#X connect 7 1 26 0;
#X connect 8 1 4 1;
#X connect 9 0 23 0;
#X connect 10 0 1 1;
#X connect 10 0 8 0;
#X connect 11 0 9 0;
#X connect 11 0 17 0;
#X connect 13 0 27 0;
#X connect 14 0 16 0;
#X connect 14 0 19 0;
#X connect 17 0 18 0;
#X connect 20 0 21 1;
#X connect 21 0 22 0;
#X connect 21 0 22 1;
#X connect 23 0 20 0;
#X connect 26 0 5 0;
#X connect 27 0 21 0;
#X restore 156 327 pd output;
#X msg 232 300 MUTE;
#X text 33 8 WAVETABLE OSCILLATORS;
#X obj 156 95 phasor~;
#X obj 156 184 tabread4~ waveform12;
#X obj 156 157 +~ 1;
#X floatatom 156 66 4 0 0 0 - - -;
#X floatatom 250 59 4 0 1000 0 - - -;
#X obj 250 80 pack 0 50;
#X obj 250 104 line~;
#X obj 156 131 *~;
#X text 21 81 phase;
#X text 20 96 generation -->;
#X text 25 117 range;
#X text 24 132 adjustment -->;
#X text 250 38 squeeze;
#X text 133 40 frequency;
#N canvas 0 0 450 300 graph3 0;
#X array wave-out12 441 float 0;
#X coords 0 1 440 -1 300 140 1;
#X restore 481 190 graph;
#X obj 177 247 tabwrite~ wave-out12;
#X msg 177 216 bang;
#X text 223 217 <--click to graph;
#X text 25 360 The tabread4~ module is available for situations requiring
more control than tabosc4~ offers. The relationship between the two
is the same as between cos~ and osc~ \, although the units are different
between cos~ and tabread4~. Cos~ assumes input is normalized from 0
to 1 (and will wrap around as needed.) Tabread4~ takes values from
1 to n-2 where n is the number of points in the table-- for a 259-point
table such as we have here \, it's 1 to 129 (so the "good" segment
is 128 samples long.);
#X text 30 508 You would use tabread4~ (as opposed to tabosc4~) if
you need direct control of the phase \, for instance if you to advance
nonlinearly through the table. In the case shown here \, the "squeeze"
factor makes the phase grow to a value at least \, and possibly much
graeater than \, 129 (to which tabread4~ then limits it). So the resulting
waveform is compressed in time.;
#X obj 250 128 +~ 128;
#X text 554 624 updated for Pd version 0.37;
#X connect 1 0 2 1;
#X connect 2 0 1 0;
#X connect 3 0 2 2;
#X connect 5 0 12 0;
#X connect 6 0 2 0;
#X connect 6 0 20 0;
#X connect 7 0 6 0;
#X connect 8 0 5 0;
#X connect 9 0 10 0;
#X connect 10 0 11 0;
#X connect 11 0 25 0;
#X connect 12 0 7 0;
#X connect 21 0 20 0;
#X connect 25 0 12 1;

View file

@ -0,0 +1,44 @@
#N canvas 137 102 781 520 12;
#X graph graph1 0 -1.02 10 1.02 468 159 648 29;
#X array waveform13 11 float 1;
#A 0 1 1 1 1 1 1 1 -1 -1 -1 -1;
#X pop;
#X text 533 502 updated for Pd version 0.34;
#X obj 156 157 +~ 1;
#X text 21 81 phase;
#X text 20 96 generation -->;
#X text 25 117 range;
#X text 24 132 adjustment -->;
#X graph graph3 0 -1.02 440 1.02 469 362 769 222;
#X array wave-out13 441 float 0;
#X pop;
#X msg 177 216 bang;
#X text 223 217 <--click to graph;
#N canvas 11 418 523 216 other-stuff 0;
#X obj 41 49 loadbang;
#X msg 39 81 \; waveform13 0 1 1 1 1 1 1 1 -1 -1 -1 -1 \; waveform13
xlabel -1.2 0 1 2 3 4 5 6 7 8 9 10 \; pd dsp 1;
#X connect 0 0 1 0;
#X restore 626 426 pd other-stuff;
#X obj 156 247 tabwrite~ wave-out13;
#X obj 156 184 tabread4~ waveform13;
#X obj 156 131 *~ 8;
#X obj 156 95 phasor~ 220;
#X text 36 22 4-POINT INTERPOLATION IN DETAIL;
#X obj 216 316 sig~ 220;
#X obj 216 346 tabosc4~ waveform13;
#X text 35 293 (this would be;
#X text 36 313 equivalent to the;
#X text 110 333 above) -->;
#X text 18 409 This patch demonstrates 4-point interpolation in tabread4~.
The 11-point table \, waveform13 \, contains a transition from from
1 to -1 \, which is "smoothed" as seen in wave-out13. There's no such
transition at the wraparoind point--the interpolation always happens
between 4 consccutive samples of the table \, disregarding wraparound.
;
#X connect 2 0 12 0;
#X connect 8 0 11 0;
#X connect 12 0 11 0;
#X connect 13 0 2 0;
#X connect 14 0 13 0;
#X connect 16 0 17 0;

View file

@ -0,0 +1,107 @@
#N canvas 55 137 777 467 12;
#N canvas 0 0 450 300 graph1 0;
#X array pitchmod14 131 float 1;
#A 0 0.847385 0.847385 0.847385 0.847385 0.847385 0.847385 0.847385
0.847385 0.847385 0.847385 0.847385 0.847385 0.847385 0.847385 0.863077
0.863077 0.863077 0.863077 0.863077 0.863077 0.863077 0.863077 0.863077
0.863077 0.863077 0.863077 0.863077 0.863077 0.863077 0.863077 0.863077
0.863077 0.863077 0.863077 0.863077 0.863077 0.831692 0.847385 0.847385
0.847385 0.847385 0.847385 0.847385 0.847385 0.847385 0.847385 0.847385
0.847385 0.847385 0.847385 0.847385 0.847385 0.847385 0.847385 0.847385
0.847385 0.863077 0.847385 0.847385 0.847385 0.847385 0.847385 0.847385
-0.800308 -0.784615 -0.784615 -0.784615 -0.784615 -0.784615 -0.784615
-0.784615 -0.784615 -0.784615 -0.784615 -0.784615 -0.784615 -0.784615
-0.784615 -0.784615 -0.784615 -0.784615 -0.784615 -0.784615 -0.784615
-0.784615 -0.784615 -0.784615 -0.784615 -0.784615 -0.784615 -0.784615
-0.784615 -0.784615 -0.784615 -0.768923 -0.784615 -0.784615 -0.784615
-0.784615 -0.784615 -0.784615 -0.784615 -0.784615 -0.784615 -0.784615
-0.784615 -0.784615 -0.784615 -0.768923 -0.784615 -0.784615 -0.784615
-0.784615 -0.784615 -0.784615 -0.784615 -0.784615 -0.784615 -0.784615
-0.784615 -0.784615 -0.784615 -0.784615 -0.784615 -0.800308 -0.800308
-0.800308 -0.800308 -0.800308 -0.800308 -0.800308;
#X coords 0 1.02 130 -1.02 258 130 1;
#X restore 462 30 graph;
#X floatatom 191 277 0 0 100 0 - - -;
#N canvas 159 26 532 285 output 0;
#X obj 338 160 t b;
#X obj 338 110 f;
#X obj 338 60 inlet;
#X text 344 29 mute;
#X obj 338 185 f;
#X msg 426 180 0;
#X msg 338 85 bang;
#X obj 338 135 moses 1;
#X obj 397 110 moses 1;
#X obj 83 148 dbtorms;
#X obj 397 85 r master-lvl;
#X obj 83 42 r master-lvl;
#X obj 338 210 s master-lvl;
#X obj 20 155 inlet~;
#X obj 199 41 inlet;
#X text 199 18 level;
#X obj 199 105 s master-lvl;
#X msg 96 65 set \$1;
#X obj 96 90 outlet;
#X msg 214 65 \; pd dsp 1;
#X obj 83 198 line~;
#X obj 20 207 *~;
#X obj 20 232 dac~;
#X obj 83 173 pack 0 50;
#X text 20 132 audio;
#X text 96 114 show level;
#X obj 426 155 t b;
#X obj 20 181 hip~ 1;
#X connect 0 0 4 0;
#X connect 1 0 7 0;
#X connect 2 0 6 0;
#X connect 4 0 12 0;
#X connect 5 0 12 0;
#X connect 6 0 1 0;
#X connect 7 0 0 0;
#X connect 7 1 26 0;
#X connect 8 1 4 1;
#X connect 9 0 23 0;
#X connect 10 0 1 1;
#X connect 10 0 8 0;
#X connect 11 0 9 0;
#X connect 11 0 17 0;
#X connect 13 0 27 0;
#X connect 14 0 16 0;
#X connect 14 0 19 0;
#X connect 17 0 18 0;
#X connect 20 0 21 1;
#X connect 21 0 22 0;
#X connect 21 0 22 1;
#X connect 23 0 20 0;
#X connect 26 0 5 0;
#X connect 27 0 21 0;
#X restore 153 305 pd output;
#X msg 229 278 MUTE;
#X floatatom 153 95 4 0 0 0 - - -;
#X text 153 69 frequency;
#X floatatom 195 206 4 0 0 0 - - -;
#X text 155 50 modulation;
#X obj 152 157 *~;
#X text 255 150 modulation;
#X text 253 169 depth;
#X floatatom 201 157 4 0 0 0 - - -;
#X obj 152 205 +~;
#X text 250 212 frequency;
#X obj 152 237 osc~;
#X obj 153 122 tabosc4~ pitchmod14;
#X text 254 194 carrier;
#X text 33 8 FREQUENCY MODULATION BY WAVETABLE;
#X text 47 356 This tabosc4~ controls the pitch of a sinusoidal oscillator
(osc~). Try changing the waveform as well as the three familiar parameters.
;
#X text 520 438 updated for Pd version 0.37;
#X connect 1 0 2 1;
#X connect 2 0 1 0;
#X connect 3 0 2 2;
#X connect 4 0 15 0;
#X connect 6 0 12 1;
#X connect 8 0 12 0;
#X connect 11 0 8 1;
#X connect 12 0 14 0;
#X connect 14 0 2 0;
#X connect 15 0 8 0;

View file

@ -0,0 +1,127 @@
#N canvas 55 137 835 504 12;
#X graph graph1 0 -1.02 130 1.02 565 153 823 23;
#X array waveshape15a 131 float 1;
#A 0 0.847385 0.847385 0.847385 0.847385 0.847385 0.847385 0.847385
0.847385 0.847385 0.847385 0.847385 0.847385 0.847385 0.847385 0.863077
0.863077 0.863077 0.863077 0.863077 0.863077 0.863077 0.863077 0.863077
0.863077 0.863077 0.863077 0.863077 0.863077 0.863077 0.863077 0.863077
0.863077 0.863077 0.863077 0.863077 0.863077 0.831692 0.847385 0.847385
0.847385 0.847385 0.847385 0.847385 0.847385 0.847385 0.847385 0.847385
0.847385 0.847385 0.847385 0.847385 0.847385 0.847385 0.847385 0.847385
0.847385 0.863077 0.847385 0.847385 0.847385 0.847385 0.847385 0.847385
-0.800308 -0.784615 -0.784615 -0.784615 -0.784615 -0.784615 -0.784615
-0.784615 -0.784615 -0.784615 -0.784615 -0.784615 -0.784615 -0.784615
-0.784615 -0.784615 -0.784615 -0.784615 -0.784615 -0.784615 -0.784615
-0.784615 -0.784615 -0.784615 -0.784615 -0.784615 -0.784615 -0.784615
-0.784615 -0.784615 -0.784615 -0.768923 -0.784615 -0.784615 -0.784615
-0.784615 -0.784615 -0.784615 -0.784615 -0.784615 -0.784615 -0.784615
-0.784615 -0.784615 -0.784615 -0.768923 -0.784615 -0.784615 -0.784615
-0.784615 -0.784615 -0.784615 -0.784615 -0.784615 -0.784615 -0.784615
-0.784615 -0.784615 -0.784615 -0.784615 -0.784615 -0.800308 -0.800308
-0.800308 -0.800308 -0.800308 -0.800308 -0.800308;
#X pop;
#X floatatom 194 299 0 0 100;
#N canvas 159 26 532 285 output 0;
#X obj 338 160 t b;
#X obj 338 110 f;
#X obj 338 60 inlet;
#X text 344 29 mute;
#X obj 338 185 f;
#X msg 426 180 0;
#X msg 338 85 bang;
#X obj 338 135 moses 1;
#X obj 397 110 moses 1;
#X obj 83 148 dbtorms;
#X obj 397 85 r master-lvl;
#X obj 83 42 r master-lvl;
#X obj 338 210 s master-lvl;
#X obj 20 155 inlet~;
#X obj 199 41 inlet;
#X text 199 18 level;
#X obj 199 105 s master-lvl;
#X msg 96 65 set \$1;
#X obj 96 90 outlet;
#X msg 214 65 \; pd dsp 1;
#X obj 83 198 line~;
#X obj 20 207 *~;
#X obj 20 232 dac~;
#X obj 83 173 pack 0 50;
#X text 20 132 audio;
#X text 96 114 show level;
#X obj 426 155 t b;
#X obj 20 181 hip~ 1;
#X connect 0 0 4 0;
#X connect 1 0 7 0;
#X connect 2 0 6 0;
#X connect 4 0 12 0;
#X connect 5 0 12 0;
#X connect 6 0 1 0;
#X connect 7 0 0 0;
#X connect 7 1 26 0;
#X connect 8 1 4 1;
#X connect 9 0 23 0;
#X connect 10 0 1 1;
#X connect 10 0 8 0;
#X connect 11 0 9 0;
#X connect 11 0 17 0;
#X connect 13 0 27 0;
#X connect 14 0 16 0;
#X connect 14 0 19 0;
#X connect 17 0 18 0;
#X connect 20 0 21 1;
#X connect 21 0 22 0;
#X connect 21 0 22 1;
#X connect 23 0 20 0;
#X connect 26 0 5 0;
#X connect 27 0 21 0;
#X restore 156 327 pd output;
#X msg 232 300 MUTE;
#X text 581 481 updated for Pd version 0.34;
#X text 33 8 SWITCHING BETWEEN TABLES;
#X graph graph1 0 -1.02 130 1.02 565 308 823 178;
#X array waveshape15b 131 float 1;
#A 0 -0.659077 -0.643385 -0.643385 -0.627692 -0.612 -0.612 -0.596308
-0.596308 -0.580615 -0.580615 -0.580615 -0.580615 -0.580615 -0.580615
-0.580615 -0.596308 -0.596308 -0.596308 -0.596308 -0.596308 -0.596308
-0.596308 -0.596308 -0.580615 -0.580615 -0.580615 -0.580615 -0.580615
-0.580615 -0.580615 -0.580615 -0.564923 -0.549231 -0.549231 -0.533538
-0.517846 -0.517846 -0.517846 -0.517846 -0.517846 -0.517846 -0.517846
-0.517846 -0.533538 -0.549231 -0.580615 -0.580615 0.847385 0.847385
0.847385 0.847385 0.847385 0.847385 0.847385 0.847385 0.847385 0.863077
0.847385 0.847385 0.847385 0.847385 0.847385 0.847385 -0.800308 -0.784615
-0.784615 -0.784615 -0.784615 -0.784615 -0.784615 -0.784615 -0.784615
-0.784615 -0.784615 -0.784615 -0.784615 -0.784615 -0.784615 -0.784615
-0.784615 -0.784615 -0.784615 -0.784615 -0.784615 -0.784615 -0.784615
-0.784615 -0.784615 -0.784615 -0.784615 -0.784615 -0.784615 -0.784615
-0.784615 -0.768923 -0.784615 -0.784615 -0.784615 -0.784615 -0.784615
-0.784615 -0.784615 -0.784615 -0.784615 -0.784615 -0.784615 -0.784615
-0.784615 -0.768923 -0.784615 -0.784615 -0.784615 -0.784615 -0.784615
-0.784615 -0.784615 -0.784615 -0.784615 -0.784615 -0.784615 -0.784615
-0.784615 -0.784615 -0.784615 -0.800308 -0.800308 -0.800308 -0.800308
-0.800308 -0.800308 -0.800308;
#X pop;
#X obj 156 274 tabosc4~ waveshape15a;
#X obj 156 186 sig~ 110;
#X msg 181 215 set waveshape15a;
#X msg 182 244 set waveshape15b;
#X text 20 51 During a performance you're unlikely to want to draw
or recalculate wavetables on the fly \, because you don't want to give
Pd computationally intensive atomic tasks that could make Pd miss a
DAC deadline. Instead \, use "set" mesages to switch tabosc~ or tabread4~
between pre-prepared tables. Indeed \, you will eventually want to
save screen space by throwing all your wavetables in a subpatch somewhere.
;
#X obj 161 401 table waveshape15c 131;
#X text 41 362 There's also a "text object" hook so that you can have
arrays with parametrizable names and sizes:;
#X text 31 431 You would use this if you want to include one or more
arrays in an abstraction. In this invocation you can't save the state
of the array--instead \, juts read it in from a file or calculate it
at startup.;
#X connect 1 0 2 1;
#X connect 2 0 1 0;
#X connect 3 0 2 2;
#X connect 7 0 2 0;
#X connect 8 0 7 0;
#X connect 9 0 7 0;
#X connect 10 0 7 0;

View file

@ -0,0 +1,52 @@
#N canvas 11 3 915 618 12;
#X obj 37 217 hip~ 5;
#X text 96 219 high pass filter to cut DC;
#N canvas 0 0 450 300 graph1 0;
#X array sample-table 44104 float 0;
#X coords 0 1.02 44103 -1.02 200 130 1;
#X restore 585 20 graph;
#X obj 37 185 tabread4~ sample-table;
#X obj 37 150 line~;
#X obj 37 101 * 441;
#X floatatom 37 47 0 0 100 0 - - -;
#X obj 37 125 pack 0 100;
#X text 102 13 SCRATCH MACHINE;
#X text 72 48 <-- read point in 100ths of a second;
#X text 94 101 convert to SAMPLES (441 samples in 0.01 sec);
#X obj 405 235 loadbang;
#X text 246 174 read from the table;
#X text 237 192 (the input is the index in samples);
#X text 16 482 For more on reading and writing soundfiles to tables
\, setting their lengths \, etc \, see "arrays" in the "control examples"
series.;
#X text 14 355 This patch introduces the "tabread4~" object \, which
reads audio samples out of a floating-point array \, often called a
"sample table." The input is the index of the sample to read \, counting
from zero. The output is calculated using 4-point cubic interpolation
\, which is adequate for most purposes. Because of the interpolation
scheme \, tabread4~'s input cannot be less than one or greater than
the table length minus two.;
#X text 17 539 Fanatics take note: if you want really high-fidelity
sampling \, use a high-quality resampling program to up-sample your
soundfile to 88200 to drastically reduce interpolation error.;
#X text 591 173 (one second plus three extra;
#X text 593 192 for 4-point interpolation);
#X text 385 304 message to read a soundfile into the table (automatically
sent when you load this patch by the "loadbang" object.);
#X text 84 150 convert smoothly to audio signal;
#X text 84 62 (range is 0-100.) YOU ONLY HEAR OUTPUT;
#X text 85 78 WHEN THIS IS 0-100 AND ACTIVELY CHANGING.;
#X text 596 589 updated for Pd version 0.33;
#X text 584 151 --- 44103 samples ---;
#X msg 405 259 read ../sound/voice.wav sample-table;
#X obj 405 284 soundfiler;
#X obj 36 249 output~;
#X connect 0 0 27 0;
#X connect 0 0 27 1;
#X connect 3 0 0 0;
#X connect 4 0 3 0;
#X connect 5 0 7 0;
#X connect 6 0 5 0;
#X connect 7 0 4 0;
#X connect 11 0 25 0;
#X connect 25 0 26 0;

View file

@ -0,0 +1,64 @@
#N canvas 143 17 992 621 12;
#N canvas 0 0 450 300 graph1 0;
#X array tabread4-out 44100 float 0;
#X coords 0 1.02 44100 -1.02 200 130 1;
#X restore 632 200 graph;
#N canvas 0 0 450 300 graph1 0;
#X array table17 44103 float 0;
#X coords 0 1.02 44103 -1.02 200 130 1;
#X restore 631 14 graph;
#X obj 568 496 loadbang;
#X obj 65 277 tabwrite~ tabread4-out;
#X obj 34 308 hip~ 5;
#X floatatom 34 54 0 0 0 0 - - -;
#X text 241 215 read from the table;
#X text 49 11 LOOPING SAMPLER;
#X text 83 54 <-- frequency (Hz.);
#X floatatom 65 107 0 0 0 0 - - -;
#X obj 65 133 * 441;
#X obj 34 160 *~ 0;
#X obj 34 187 +~ 1;
#X text 110 248 <-- click to display output;
#X obj 34 80 phasor~ 0;
#X msg 65 245 bang;
#X text 110 108 <-- chunk size (100ths of a second);
#X obj 561 395 adc~ 1;
#X msg 575 422 bang;
#X text 615 423 <-- click here to record your own sample;
#X text 678 501 v-- re-read the original sample;
#X text 14 540 In this patch you will frequently hear discontinuities
at the looping point. If you're working in a studio \, you can sometimes
find "good" loop points for samples. Another approach \, better for
live situations \, is shown in the next patch.;
#X text 80 159 <-- readjust phase for range 0 - (chunk size);
#X text 79 187 <-- add one to avoid beginning of table;
#X obj 568 549 soundfiler;
#X text 629 153 ---- 44103 samples ----;
#X text 643 336 ---- 1 second ------;
#X obj 34 335 output~;
#X text 742 591 updated for Pd version 0.37;
#X obj 34 216 tabread4~ table17;
#X obj 562 455 tabwrite~ table17;
#X msg 568 524 read ../sound/voice.wav table17;
#X text 16 409 This is a looping sampler in which you specify the number
of loops per second (the frequency) and the size of the chunk to loop.
If the frequency is less than about 20 \, you will hear repetition
and the chunk size will sound like transposition. For frequencies above
50 or so \, you hear a tone whose timbre is controlled by the chunk
size (best kept below 10 or so.) Remember you can use the "shift" key
on number boxes to make fine adjustments.;
#X connect 2 0 31 0;
#X connect 4 0 27 0;
#X connect 4 0 27 1;
#X connect 5 0 14 0;
#X connect 9 0 10 0;
#X connect 10 0 11 1;
#X connect 11 0 12 0;
#X connect 12 0 29 0;
#X connect 14 0 11 0;
#X connect 15 0 3 0;
#X connect 17 0 30 0;
#X connect 18 0 30 0;
#X connect 29 0 4 0;
#X connect 29 0 3 0;
#X connect 31 0 24 0;

View file

@ -0,0 +1,72 @@
#N canvas 75 15 973 599 12;
#N canvas 0 0 450 300 graph1 0;
#X array cos-output 44100 float 0;
#X coords 0 1.02 44100 -1.02 200 130 1;
#X restore 724 191 graph;
#N canvas 0 0 450 300 graph1 0;
#X array table18 44103 float 0;
#X coords 0 1.02 44103 -1.02 200 130 1;
#X restore 721 16 graph;
#X obj 584 491 loadbang;
#X obj 45 249 hip~ 5;
#X floatatom 46 50 0 0 0 0 - - -;
#X text 85 49 <-- frequency (Hz.);
#X floatatom 132 87 0 0 0 0 - - -;
#X obj 132 114 * 441;
#X obj 110 163 +~ 1;
#X text 171 86 <-- chunk size (100ths of a second);
#X obj 584 404 adc~ 1;
#X msg 599 429 bang;
#X text 40 9 ENVELOPING YOUR LOOPING SAMPLER;
#X obj 45 139 -~ 0.5;
#X obj 45 189 cos~;
#X obj 45 222 *~;
#X obj 584 545 soundfiler;
#X text 736 148 -- 44103 samples ---;
#X text 727 322 ----- 1 second ------;
#X obj 46 77 phasor~;
#X obj 45 164 *~ 0.5;
#X obj 44 281 output~;
#X obj 110 138 *~;
#X text 28 362 Here we apply an amplitude envelope to protect against
discontinuities at the loop point. The envelope is just a cosine wave
from -90 degrees to +90 degrees \, (-pi/2 to pi/2 radians) \, i.e.
\, the part that is zero or positive in sign. The "cos~" object's input
is in cycles (units of 2pi radians) so -1/4 to +1/4 addresses the desired
part of the waveform.;
#X obj 167 247 tabwrite~ cos-output;
#X obj 167 223 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
-1;
#X text 188 220 <-- click to graph envelope;
#X text 28 476 To see the envelope \, put the phasor on 2 Hz or so
\, click the "graph" button \, and look at "cos-output." This is multiplied
by the tabread4~ output so that it doesn't click when the phase wraps
around.;
#X text 26 545 It is possible to get much more control over the shape
of the envelope \, but this will be taken up later.;
#X obj 110 189 tabread4~ table18;
#X obj 584 456 tabwrite~ table18;
#X msg 584 520 read ../sound/voice.wav table18;
#X text 641 430 <-- click here to record to table;
#X text 675 499 v-- re-read the original sound;
#X text 708 565 updated for Pd version 0.37;
#X connect 2 0 31 0;
#X connect 3 0 21 0;
#X connect 3 0 21 1;
#X connect 4 0 19 0;
#X connect 6 0 7 0;
#X connect 7 0 22 1;
#X connect 8 0 29 0;
#X connect 10 0 30 0;
#X connect 11 0 30 0;
#X connect 13 0 20 0;
#X connect 14 0 15 0;
#X connect 14 0 24 0;
#X connect 15 0 3 0;
#X connect 19 0 13 0;
#X connect 19 0 22 0;
#X connect 20 0 14 0;
#X connect 22 0 8 0;
#X connect 25 0 24 0;
#X connect 29 0 15 1;
#X connect 31 0 16 0;

View file

@ -0,0 +1,83 @@
#N canvas 53 232 936 654 12;
#N canvas 0 0 450 300 graph1 0;
#X array table19 44103 float 0;
#X coords 0 1.02 44100 -1.02 200 130 1;
#X restore 680 8 graph;
#X obj 40 382 hip~ 5;
#X floatatom 99 51 0 0 0 0 - - -;
#X text 146 50 <-- frequency (Hz.);
#X floatatom 129 106 0 0 0 0 - - -;
#X obj 129 135 * 441;
#X obj 100 158 *~ 0;
#X obj 100 181 +~ 1;
#X msg 194 281 bang;
#X text 164 106 <-- chunk size (100ths of a second);
#X obj 591 369 adc~ 1;
#X obj 591 395 hip~ 5;
#X msg 609 423 bang;
#N canvas 0 0 450 300 graph2 0;
#X array graph19 44100 float 0;
#X coords 0 44100 44100 0 200 130 1;
#X restore 681 196 graph;
#X obj 40 356 *~;
#X obj 123 276 line~;
#X obj 123 228 * 441;
#X floatatom 123 205 0 0 0 0 - - -;
#X obj 123 252 pack 0 100;
#X obj 101 310 +~;
#X text 34 474 In this patch we can loop in any "window" of the input
sample. The "read point" (0-100) gives the starting point of the window
and "chunk" is its size (both in 100ths of a second.) Try \, for example
\, frequency 4 \, sharpness 10 \, chunk size 25 \, and vary the read
point from -25 to 100 \, listening to the result.;
#X text 242 281 <-- graph table index;
#X text 684 337 ----- 1 second ------;
#X obj 595 490 loadbang;
#X text 631 514 v-- re-read the original sample;
#X obj 605 559 soundfiler;
#X text 678 147 ---- 44103 samples ---;
#X obj 591 455 tabwrite~ table19;
#X msg 605 535 read ../sound/voice.wav table19;
#X text 688 628 updated for Pd version 0.37;
#X msg 595 585 \; graph19 ylabel 48000 0 44100;
#X obj 39 103 -~ 0.5;
#X obj 99 76 phasor~;
#X obj 39 127 *~ 0.5;
#X obj 39 150 cos~;
#X text 157 206 <-- read point (100ths of a second);
#X obj 41 406 output~;
#X text 651 422 <-- record;
#X text 36 13 ENVELOPING THE LOOPING SAMPLER;
#X text 37 574 You should hear some doppler shift as you change the
read point. To see why \, click on "graph table index" and quickly
start changing the read point--- you should see entertaining pictures
in "table-index". The next patch shows how to prevent this if you wish
to.;
#X obj 100 336 tabread4~ table19;
#X obj 194 307 tabwrite~ graph19;
#X connect 1 0 36 0;
#X connect 2 0 32 0;
#X connect 4 0 5 0;
#X connect 5 0 6 1;
#X connect 6 0 7 0;
#X connect 7 0 19 0;
#X connect 8 0 41 0;
#X connect 10 0 11 0;
#X connect 11 0 27 0;
#X connect 12 0 27 0;
#X connect 14 0 1 0;
#X connect 15 0 19 1;
#X connect 16 0 18 0;
#X connect 17 0 16 0;
#X connect 18 0 15 0;
#X connect 19 0 40 0;
#X connect 19 0 41 0;
#X connect 23 0 30 0;
#X connect 23 0 28 0;
#X connect 28 0 25 0;
#X connect 31 0 33 0;
#X connect 32 0 6 0;
#X connect 32 0 31 0;
#X connect 33 0 34 0;
#X connect 34 0 14 0;
#X connect 40 0 14 1;

View file

@ -0,0 +1,85 @@
#N canvas 177 116 924 622 12;
#N canvas 0 0 450 300 graph1 0;
#X array table20 44103 float 0;
#X coords 0 1.02 44100 -1.02 200 130 1;
#X restore 631 10 graph;
#X obj 582 447 loadbang;
#X obj 13 425 hip~ 5;
#X floatatom 87 49 0 0 0 0 - - -;
#X text 126 48 <-- frequency (Hz.);
#X floatatom 150 108 0 0 0 0 - - -;
#X obj 150 133 * 441;
#X obj 50 220 +~ 1;
#X obj 87 73 phasor~ 0;
#X msg 175 273 bang;
#X text 189 107 <-- chunk size (100ths of a second);
#X obj 576 343 adc~ 1;
#X obj 576 367 hip~ 5;
#X msg 591 390 bang;
#X text 630 464 v-- re-read the original sample;
#N canvas 0 0 450 300 graph2 0;
#X array graph20 44100 float 0;
#X coords 0 44100 44100 0 200 130 1;
#X restore 633 179 graph;
#X obj 13 401 *~;
#X obj 72 308 line~;
#X obj 149 242 * 441;
#X floatatom 149 218 0 0 0 0 - - -;
#X obj 72 284 pack 0 100;
#X text 184 217 <-- read point in 100ths of a second;
#X obj 51 356 +~;
#X text 218 272 <-- graph table index;
#X obj 72 332 samphold~;
#X obj 74 170 samphold~;
#X obj 51 196 *~;
#X text 643 315 ----- 1 second ------;
#X text 631 144 ---- 44103 samples ---;
#X obj 591 508 soundfiler;
#X text 21 8 SLIDING STABLE LOOPS WITHOUT DOPPLER SHIFT;
#X msg 582 534 \; graph20 ylabel 48000 0 44100;
#X text 631 390 <-- record;
#X obj 13 451 output~;
#X obj 12 103 -~ 0.5;
#X obj 12 127 *~ 0.5;
#X obj 12 150 cos~;
#X obj 175 353 tabwrite~ graph20;
#X obj 51 381 tabread4~ table20;
#X obj 576 417 tabwrite~ table20;
#X msg 591 484 read ../sound/voice.wav table20;
#X text 11 518 This example differs from the previous one in having
samphold~ objects which allow the chunk size and especially the read
point to change only at points where the phase wraps around. This removes
signal discontinuities (when the chunk size changes) and doppler shift
when the read point is changing.;
#X text 652 592 updated for Pd version 0.37;
#X connect 1 0 31 0;
#X connect 1 0 40 0;
#X connect 2 0 33 0;
#X connect 2 0 33 1;
#X connect 3 0 8 0;
#X connect 5 0 6 0;
#X connect 6 0 25 0;
#X connect 7 0 22 0;
#X connect 8 0 24 1;
#X connect 8 0 25 1;
#X connect 8 0 26 0;
#X connect 8 0 34 0;
#X connect 9 0 37 0;
#X connect 11 0 12 0;
#X connect 12 0 39 0;
#X connect 13 0 39 0;
#X connect 16 0 2 0;
#X connect 17 0 24 0;
#X connect 18 0 20 0;
#X connect 19 0 18 0;
#X connect 20 0 17 0;
#X connect 22 0 37 0;
#X connect 22 0 38 0;
#X connect 24 0 22 1;
#X connect 25 0 26 1;
#X connect 26 0 7 0;
#X connect 34 0 35 0;
#X connect 35 0 36 0;
#X connect 36 0 16 0;
#X connect 38 0 16 1;
#X connect 40 0 29 0;

View file

@ -0,0 +1,109 @@
#N canvas 107 88 930 596 12;
#N canvas 0 0 450 300 graph1 0;
#X array table21 44103 float 0;
#X coords 0 1.02 44100 -1.02 200 130 1;
#X restore 645 291 graph;
#X obj 467 506 loadbang;
#X obj 19 508 hip~ 5;
#X floatatom 10 254 0 0 0 0 - - -;
#X obj 10 279 * 441;
#X obj 10 401 +~ 1;
#X text 47 253 <-- chunk size (100ths of a second);
#X obj 471 402 adc~ 1;
#X obj 471 427 hip~ 5;
#X msg 486 449 bang;
#X obj 44 482 *~;
#X obj 106 404 line~;
#X obj 106 354 * 441;
#X floatatom 106 329 0 0 0 0 - - -;
#X obj 106 379 pack 0 100;
#X text 152 331 <-- read point in 100ths of a second;
#X obj 44 433 +~;
#X obj 106 429 samphold~;
#X obj 10 329 samphold~;
#X obj 10 304 sig~;
#X obj 10 376 *~;
#X text 18 5 CALCULATING LOOP FREQUENCY AS FUNCTION OF TRANSPOSITION
;
#X obj 124 485 r~ phase;
#X obj 10 204 s~ phase;
#X obj 68 304 r~ phase;
#X obj 26 351 r~ phase;
#X obj 164 405 r~ phase;
#X obj 151 299 s chunk-size;
#X floatatom 10 50 0 0 0 0 - - -;
#X text 48 51 <-- transposition (10ths of a halftone);
#X obj 151 274 * 0.01;
#X text 264 287 chunk size;
#X text 264 309 in seconds;
#X obj 21 105 r chunk-size;
#X obj 21 130 t b f;
#X obj 10 154 /;
#X text 80 131 divide speed change by chunk;
#X text 78 152 size to get loop frequency;
#X text 382 75 The transposition is frequency in Hz. divided by chunk
size in seconds. This patch calculates the loop frequency as a function
of desired transposition;
#X text 384 126 Notice now that we get Doppler effects when the chunk
size changes. You can suppress that if you don't want it \, by converting
the chunk size to an audio signal \, sampling and holding it. But then
there would be more work to deal with very low frequencies never triggering
the sample and hold...;
#X obj 467 560 soundfiler;
#X obj 10 27 loadbang;
#X obj 124 509 -~ 0.5;
#X obj 124 533 *~ 0.5;
#X obj 124 556 cos~;
#X obj 19 533 output~;
#X obj 44 458 tabread4~ table21;
#X text 527 449 <-- record;
#X text 560 513 v-- re-read original table;
#X text 682 572 updated for Pd version 0.37;
#X text 647 425 --- 44103 samples ---;
#X obj 10 75 expr pow(2 \, $f1/120);
#X text 199 75 speed change;
#X text 387 208 You might also want to have a way to retrigger the
loop to sync it with some other process. By the time we had all this
built the patch would be fairly involved. For now \, we'll move on
to the next topic...;
#X obj 10 178 phasor~;
#X obj 471 476 tabwrite~ table21;
#X msg 467 533 read ../sound/voice.wav table21;
#X connect 1 0 56 0;
#X connect 2 0 45 0;
#X connect 2 0 45 1;
#X connect 3 0 4 0;
#X connect 3 0 30 0;
#X connect 4 0 19 0;
#X connect 5 0 16 0;
#X connect 7 0 8 0;
#X connect 8 0 55 0;
#X connect 9 0 55 0;
#X connect 10 0 2 0;
#X connect 11 0 17 0;
#X connect 12 0 14 0;
#X connect 13 0 12 0;
#X connect 14 0 11 0;
#X connect 16 0 46 0;
#X connect 17 0 16 1;
#X connect 18 0 20 0;
#X connect 19 0 18 0;
#X connect 20 0 5 0;
#X connect 22 0 42 0;
#X connect 24 0 18 1;
#X connect 25 0 20 1;
#X connect 26 0 17 1;
#X connect 28 0 51 0;
#X connect 30 0 27 0;
#X connect 33 0 34 0;
#X connect 34 0 35 0;
#X connect 34 1 35 1;
#X connect 35 0 54 0;
#X connect 41 0 28 0;
#X connect 42 0 43 0;
#X connect 43 0 44 0;
#X connect 44 0 10 1;
#X connect 46 0 10 0;
#X connect 51 0 35 0;
#X connect 54 0 23 0;
#X connect 56 0 40 0;

View file

@ -0,0 +1,158 @@
#N canvas 28 47 748 713 12;
#X obj 19 511 hip~ 5;
#X floatatom 25 38 0 0 100 0 - - -;
#X obj 25 63 * 441;
#X obj 20 380 +~ 1;
#X text 69 35 <-- chunk size (100ths of a second);
#X obj 20 458 *~;
#X obj 26 211 line~;
#X obj 26 161 * 441;
#X floatatom 26 136 0 0 100 0 - - -;
#X obj 26 186 pack 0 100;
#X text 60 137 <-- read point in 100ths of a second;
#X obj 20 409 +~;
#X obj 76 408 samphold~;
#X obj 20 308 samphold~;
#X obj 20 355 *~;
#X obj 185 369 r~ phase;
#X obj 418 210 s~ phase;
#X obj 108 308 r~ phase;
#X obj 42 332 r~ phase;
#X obj 96 383 r~ phase;
#X obj 77 82 s chunk-size;
#X floatatom 418 56 0 0 0 0 - - -;
#X obj 77 57 * 0.01;
#X text 189 58 chunk size;
#X text 189 80 in seconds;
#X obj 429 111 r chunk-size;
#X obj 429 136 t b f;
#X obj 418 160 /;
#X obj 418 33 loadbang;
#X obj 185 393 -~ 0.5;
#X obj 185 417 *~ 0.5;
#X obj 185 440 cos~;
#X obj 19 536 output~;
#X text 486 684 updated for Pd version 0.37;
#X obj 418 81 expr pow(2 \, $f1/120);
#X text 607 81 speed change;
#X obj 418 184 phasor~;
#X text 18 5 TWO OVERLAPPING SAMPLE READ ELEMENTS;
#N canvas 30 567 660 275 table 0;
#N canvas 0 0 450 300 graph1 0;
#X array table22 44103 float 0;
#X coords 0 1.02 44100 -1.02 200 130 1;
#X restore 442 61 graph;
#X text 444 195 --- 44103 samples ---;
#X obj 41 148 loadbang;
#X obj 45 44 adc~ 1;
#X obj 45 69 hip~ 5;
#X msg 60 91 bang;
#X obj 41 202 soundfiler;
#X text 101 91 <-- record;
#X text 134 155 v-- re-read original table;
#X obj 45 118 tabwrite~ table22;
#X msg 41 175 read ../sound/voice.wav table22;
#X connect 2 0 10 0;
#X connect 3 0 4 0;
#X connect 4 0 9 0;
#X connect 5 0 9 0;
#X connect 10 0 6 0;
#X restore 567 327 pd table;
#X obj 25 110 s chunk-size-samples;
#X text 211 112 ... and in samples;
#X obj 26 234 s~ read-pt;
#X obj 77 360 r~ read-pt;
#X obj 505 203 +~ 0.5;
#X obj 506 229 wrap~;
#X obj 506 254 s~ phase2;
#X obj 20 283 r chunk-size-samples;
#X obj 274 391 +~ 1;
#X obj 274 469 *~;
#X obj 274 420 +~;
#X obj 329 419 samphold~;
#X obj 274 319 samphold~;
#X obj 274 366 *~;
#X obj 439 404 -~ 0.5;
#X obj 439 428 *~ 0.5;
#X obj 439 451 cos~;
#X obj 330 371 r~ read-pt;
#X obj 274 294 r chunk-size-samples;
#X obj 363 320 r~ phase2;
#X obj 296 343 r~ phase2;
#X obj 439 380 r~ phase2;
#X obj 339 394 r~ phase2;
#X obj 19 487 +~;
#X text 453 56 <-- transposition \, halftones/10;
#X text 456 159 loop frequency;
#X text 566 190 second phase signal;
#X text 566 210 out of phase from;
#X text 565 231 first one;
#X text 70 265 copy 1;
#X text 327 274 copy 2;
#X text 118 503 Here is the previous patch modified to use two copies
of the sample reader \, 180 degrees out of phase. The second sawtooth
signal is derived from the first one by adding a constant (0.5) and
wrapping the result to fit again between zero and one. The result is
the "phase2" signal.;
#X text 119 584 The computation of "chunk-size-samples" (as a message)
and "read-pt" (an audio signal) is the same for both copies and is
separated out at top left. At top right is the same loop frequency
calculation as before.;
#X text 120 654 Finally \, the two copies' outputs are added and the
result sent to the audio output.;
#X obj 20 434 tabread4~ table22;
#X obj 274 445 tabread4~ table22;
#X connect 0 0 32 0;
#X connect 0 0 32 1;
#X connect 1 0 2 0;
#X connect 1 0 22 0;
#X connect 2 0 39 0;
#X connect 3 0 11 0;
#X connect 5 0 62 0;
#X connect 6 0 41 0;
#X connect 7 0 9 0;
#X connect 8 0 7 0;
#X connect 9 0 6 0;
#X connect 11 0 73 0;
#X connect 12 0 11 1;
#X connect 13 0 14 0;
#X connect 14 0 3 0;
#X connect 15 0 29 0;
#X connect 17 0 13 1;
#X connect 18 0 14 1;
#X connect 19 0 12 1;
#X connect 21 0 34 0;
#X connect 22 0 20 0;
#X connect 25 0 26 0;
#X connect 26 0 27 0;
#X connect 26 1 27 1;
#X connect 27 0 36 0;
#X connect 28 0 21 0;
#X connect 29 0 30 0;
#X connect 30 0 31 0;
#X connect 31 0 5 1;
#X connect 34 0 27 0;
#X connect 36 0 16 0;
#X connect 36 0 43 0;
#X connect 42 0 12 0;
#X connect 43 0 44 0;
#X connect 44 0 45 0;
#X connect 46 0 13 0;
#X connect 47 0 49 0;
#X connect 48 0 62 1;
#X connect 49 0 74 0;
#X connect 50 0 49 1;
#X connect 51 0 52 0;
#X connect 52 0 47 0;
#X connect 53 0 54 0;
#X connect 54 0 55 0;
#X connect 55 0 48 1;
#X connect 56 0 50 0;
#X connect 57 0 51 0;
#X connect 58 0 51 1;
#X connect 59 0 52 1;
#X connect 60 0 53 0;
#X connect 61 0 50 1;
#X connect 62 0 0 0;
#X connect 73 0 5 0;
#X connect 74 0 48 0;

View file

@ -0,0 +1,166 @@
#N canvas 123 36 683 718 12;
#X obj 6 529 hip~ 5;
#X floatatom 8 47 4 0 100 0 - - -;
#X obj 7 476 *~;
#X floatatom 7 123 0 0 200 0 - - -;
#X obj 7 378 +~;
#X obj 6 330 samphold~;
#X obj 7 354 *~;
#X obj 172 385 r~ phase;
#X obj 357 210 s~ phase;
#X obj 94 331 r~ phase;
#X obj 42 355 r~ phase;
#X obj 8 90 s chunk-size;
#X floatatom 357 42 0 0 0 0 - - -;
#X text 124 82 chunk size;
#X text 121 96 in seconds;
#X obj 369 79 r chunk-size;
#X obj 369 104 t b f;
#X obj 172 409 -~ 0.5;
#X obj 172 433 *~ 0.5;
#X obj 172 456 cos~;
#X obj 7 560 output~;
#X text 417 698 updated for Pd version 0.37;
#X obj 357 184 phasor~;
#N canvas 30 567 660 275 table 0;
#N canvas 0 0 450 300 graph1 0;
#X array table23 44103 float 0;
#X coords 0 1.02 44100 -1.02 200 130 1;
#X restore 442 61 graph;
#X text 444 195 --- 44103 samples ---;
#X obj 41 148 loadbang;
#X obj 45 44 adc~ 1;
#X obj 45 69 hip~ 5;
#X msg 60 91 bang;
#X obj 41 202 soundfiler;
#X text 101 91 <-- record;
#X text 134 155 v-- re-read original table;
#X obj 45 118 tabwrite~ table23;
#X msg 41 175 read ../sound/voice.wav table23;
#X connect 2 0 10 0;
#X connect 3 0 4 0;
#X connect 4 0 9 0;
#X connect 5 0 9 0;
#X connect 10 0 6 0;
#X restore 558 460 pd table;
#X obj 7 263 s~ read-pt;
#X obj 45 378 r~ read-pt;
#X obj 444 203 +~ 0.5;
#X obj 445 229 wrap~;
#X obj 445 254 s~ phase2;
#X obj 6 505 +~;
#X text 391 43 <-- transposition \, halftones/10;
#X obj 8 67 * 0.001;
#X obj 7 215 phasor~;
#X obj 7 402 *~ 44100;
#X obj 7 452 tabread4~ table23;
#X obj 6 305 r chunk-size;
#X obj 6 428 +~ 1;
#X floatatom 365 161 5 0 0 0 - - -;
#X obj 15 169 s precession;
#X obj 482 103 t b f;
#X obj 482 78 r precession;
#X obj 7 146 * 0.01;
#X obj 258 485 *~;
#X obj 258 387 +~;
#X obj 257 339 samphold~;
#X obj 258 363 *~;
#X obj 423 418 -~ 0.5;
#X obj 423 442 *~ 0.5;
#X obj 423 465 cos~;
#X obj 296 387 r~ read-pt;
#X obj 258 411 *~ 44100;
#X obj 258 461 tabread4~ table23;
#X obj 257 314 r chunk-size;
#X obj 257 437 +~ 1;
#X obj 345 340 r~ phase2;
#X obj 293 364 r~ phase2;
#X obj 423 394 r~ phase2;
#X text 37 123 <-- precession \, percent;
#X obj 8 3 loadbang;
#X text 158 3 TIME COMPRESSION/EXPANSION BY LOOPED SAMPLING;
#X text 111 529 Here \, rather than ask you to push the read pointer
back and forth in the sample \, we use a phasor~. This makes it possible
to avoid the samphold~ on the read pointer (r~ read-pt) \, since \,
knowing the precession \, we can correct for it in computing the frequency
of the original phasor~ at right.;
#X text 111 626 We've changed the control for "chunk size" to milliseconds
for added convenience \, and delayed multiplying sample location by
the sample rate (44100) until the last moment \, so that calculations
using "read-pt" and "chunk size" can be in the same units (seconds.)
;
#X msg 8 25 25;
#X floatatom 139 192 4 0 900 0 - - -;
#X obj 139 212 * 0.001;
#X msg 139 170 900;
#X text 48 47 <-- chunk size (msec);
#X obj 357 136 expr (pow(2 \, $f1/120)-$f3)/$f2;
#X obj 139 237 t b f;
#X obj 139 146 loadbang;
#X text 182 188 <-- loop length;
#X text 223 203 (msec);
#X obj 7 239 *~;
#X obj 7 191 /;
#X connect 0 0 20 0;
#X connect 0 0 20 1;
#X connect 1 0 31 0;
#X connect 2 0 29 0;
#X connect 3 0 41 0;
#X connect 4 0 33 0;
#X connect 5 0 6 0;
#X connect 6 0 4 0;
#X connect 7 0 17 0;
#X connect 9 0 5 1;
#X connect 10 0 6 1;
#X connect 12 0 67 0;
#X connect 15 0 16 0;
#X connect 16 0 67 0;
#X connect 16 1 67 1;
#X connect 17 0 18 0;
#X connect 18 0 19 0;
#X connect 19 0 2 1;
#X connect 22 0 8 0;
#X connect 22 0 26 0;
#X connect 25 0 4 1;
#X connect 26 0 27 0;
#X connect 27 0 28 0;
#X connect 29 0 0 0;
#X connect 31 0 11 0;
#X connect 32 0 72 0;
#X connect 33 0 36 0;
#X connect 34 0 2 0;
#X connect 35 0 5 0;
#X connect 36 0 34 0;
#X connect 39 0 67 0;
#X connect 39 1 67 2;
#X connect 40 0 39 0;
#X connect 41 0 38 0;
#X connect 41 0 73 0;
#X connect 42 0 29 1;
#X connect 43 0 50 0;
#X connect 44 0 45 0;
#X connect 45 0 43 0;
#X connect 46 0 47 0;
#X connect 47 0 48 0;
#X connect 48 0 42 1;
#X connect 49 0 43 1;
#X connect 50 0 53 0;
#X connect 51 0 42 0;
#X connect 52 0 44 0;
#X connect 53 0 51 0;
#X connect 54 0 44 1;
#X connect 55 0 45 1;
#X connect 56 0 46 0;
#X connect 58 0 62 0;
#X connect 62 0 1 0;
#X connect 63 0 64 0;
#X connect 64 0 68 0;
#X connect 64 0 72 1;
#X connect 65 0 63 0;
#X connect 67 0 22 0;
#X connect 67 0 37 0;
#X connect 68 0 73 0;
#X connect 68 1 73 1;
#X connect 69 0 65 0;
#X connect 72 0 24 0;
#X connect 73 0 32 0;

View file

@ -0,0 +1,66 @@
#N canvas 87 57 580 690 12;
#X text 355 655 updated for Pd version 0.42;
#X text 28 36 Pd is usually compiled to work on 32-bit audio samples.
These do not \, in general \, have enough precision for use as indices
into an array of more than about 32K samples. This is because the mantissa
of a 23-bit floating point number has only 24 bits \, out of which
you would be using 16 bits or more to address a sample more than 32K
into the array \, so there would remain 8 or fewer bits to supply the
fraction. In the most extreme situation possible \, the sample could
contain a Nyquist frequency sinusoid and the output would then have
only about 8 bits of accuracy!;
#X text 29 196 You can use the "onset" inlet to tabread4~ to get good
accuracy reading longer arrays. The tabread4~ object adds the index
and the "main" (signal) inlet in 64-bit precision. So if \, for example
\, the onset inlet could specify an integer exactly up to about 8 million
(190 seconds at 44100 Hz) \, and the signal inlet could act as a displacement.
;
#X text 116 13 USING ONSETS INTO TABREAD4~ TO IMPROVE ACCURACY;
#X obj 41 587 output~;
#X obj 395 507 samplerate~;
#X obj 395 531 / 2;
#X obj 384 445 loadbang;
#X obj 384 582 tabwrite~ \$0-tab;
#X obj 40 557 tabread4~ \$0-tab;
#X obj 395 555 osc~;
#X obj 172 557 tabread4~ \$0-tab;
#X obj 173 589 output~;
#X obj 384 486 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144
-1 -1;
#X msg 408 468 \; pd dsp 1;
#X obj 41 474 *~ 10000;
#X obj 41 527 +~;
#X floatatom 192 476 6 0 0 0 - - -;
#X msg 247 446 1;
#X obj 383 610 table \$0-tab 200000;
#X obj 42 446 phasor~ 0.02;
#X msg 192 446 150001;
#X text 28 310 At left below an onset (1 or 150000 samples) is added
to the index of a table lookup. If you select the onset of 150001 \,
you should hear the truncation error. (The table contains a Nyquist
signal and the "correct" output should be a 100 Hz. tone.) At right
\, the onset is presented in the separate onset inlet. The worst-case
truncation error drops by about 30 dB.;
#X text 57 647 BAD;
#X text 190 646 GOOD;
#X text 193 425 ONSET INTO TABLE;
#X text 384 426 This loads the table:;
#X connect 5 0 6 0;
#X connect 6 0 10 0;
#X connect 7 0 13 0;
#X connect 7 0 14 0;
#X connect 9 0 4 0;
#X connect 9 0 4 1;
#X connect 10 0 8 0;
#X connect 11 0 12 0;
#X connect 11 0 12 1;
#X connect 13 0 5 0;
#X connect 13 0 8 0;
#X connect 15 0 16 0;
#X connect 15 0 11 0;
#X connect 16 0 9 0;
#X connect 17 0 11 1;
#X connect 17 0 16 1;
#X connect 18 0 17 0;
#X connect 20 0 15 0;
#X connect 21 0 17 0;

View file

@ -0,0 +1,158 @@
#N canvas 332 70 817 861 12;
#X obj 399 526 metro 100;
#X obj 212 472 phasor~;
#X obj 399 556 snapshot~;
#X text 561 824 updated for Pd version 0.42;
#X obj 23 557 output~;
#X obj 23 461 phasor~;
#X floatatom 23 329 5 -100 1000 0 - - -;
#X obj 23 518 tabread4~ \$0-tab;
#X msg 290 329 0.5;
#X msg 326 329 0.01;
#X obj 398 455 loadbang;
#X msg 399 478 1;
#X obj 344 635 +;
#X obj 144 680 tabread4~ \$0-tab;
#X obj 375 634 f;
#X obj 312 612 t f f;
#X obj 145 712 output~;
#X floatatom 455 667 8 0 0 0 - - -;
#X obj 344 670 t f b;
#X obj 377 699 f;
#X obj 344 699 -;
#X floatatom 457 612 8 0 0 0 - - -;
#X obj 326 726 -;
#X obj 399 507 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 1
1;
#X obj 212 498 -~ 0.5;
#X obj 290 811 + 0.5;
#X obj 22 490 *~ 1e+06;
#X floatatom 326 753 8 0 0 0 - - -;
#X obj 530 519 samplerate~;
#X obj 484 546 /;
#X obj 484 519 t f b;
#X obj 451 589 +;
#X obj 295 787 / 10000;
#X obj 212 523 *~ 10000;
#X obj 484 570 * 10000;
#X obj 532 155 samplerate~;
#X obj 532 179 / 2;
#X obj 521 93 loadbang;
#X obj 521 230 tabwrite~ \$0-tab;
#X obj 532 203 osc~;
#X obj 521 134 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144
-1 -1;
#X msg 545 116 \; pd dsp 1;
#X obj 520 258 table \$0-tab 1e+06;
#X text 488 61 and will take about 20 seconds to fill.;
#X text 488 45 *** The table is now 1 million points \,;
#X obj 23 433 / 1e+06;
#X text 61 328 playback speed \, samples/sec;
#X text 89 460 naive way: just;
#X text 89 475 run a phasor;
#X text 88 491 into tabread4~;
#X text 454 680 new onset is phase plus old onset;
#X obj 341 357 * 1e+06;
#X text 458 626 extrapolated phase of next sample;
#X text 409 700 new onset minus old onset;
#X text 389 726 back up phasor output by amount the onset advanced
;
#X text 387 739 (approximately zero but not exactly because of;
#X text 389 753 truncation error!);
#X obj 341 383 t b f;
#X text 400 357 convert to samples;
#X text 385 384 set both last-onset and previous-onset;
#X text 385 407 ... and also reset phasor.;
#X text 354 791 convert phase back to range 0-1;
#X text 215 548 convert phase to;
#X text 215 562 range +/-5000;
#X obj 212 435 / 10000;
#X text 40 410 cycles/sec;
#X text 30 400 convert to;
#X text 216 412 cycles/sec;
#X text 206 402 convert to;
#X text 469 472 in order to change onset to reflect it;
#X text 469 456 Each 100 msec \, poll phase of phasor~;
#X text 24 29 Here is how to use the tabread~ "onset" input to allow
clean varispeed playback from a long table. At left \, a phasor~ is
naiveley rescaled to the size of the tble. At right \, the phasor~
gets only a 10000-point range about a moving "onset". Ten times per
second \, we poll tha phasor~ phase \, sum its value into the onset
\, and back up the phase of the phasor~ correspondingly.;
#X text 22 143 The tricky bits are \, first \, that we need to poll
the phasor~ phase one sample into the future (so we add the per-sample
increment into the snapshot~ result). Second \, we can't just reset
the phasor~ to a fixed point - instead \, we measure how much the onset
has actually increased (which has truncation error from summing in
the phase snapshot) \, and subtract that increase from the phase \,
giving a value that differs from zero by the truncation error but reflects
the true phase we should reset to for continuity.;
#X text 24 287 The metronome rate is arbitrary but should be fast enough
that the phasor~ never has time to wrap.;
#X text 518 539 extrapolate snapshot of phase by one;
#X text 517 552 sample to sync with next block;
#X text 41 617 BAD;
#X text 160 770 GOOD;
#X text 195 9 VARIABLE SPEED PLAYBACK FROM LONG TABLES;
#X msg 340 408 0;
#X text 369 328 <- reset phase. 0.5 causes trouble for the "bad" way.
;
#X connect 0 0 2 0;
#X connect 1 0 24 0;
#X connect 2 0 31 0;
#X connect 5 0 26 0;
#X connect 6 0 45 0;
#X connect 6 0 64 0;
#X connect 7 0 4 0;
#X connect 7 0 4 1;
#X connect 8 0 5 1;
#X connect 8 0 51 0;
#X connect 9 0 5 1;
#X connect 9 0 51 0;
#X connect 10 0 11 0;
#X connect 11 0 23 0;
#X connect 12 0 14 0;
#X connect 12 0 18 0;
#X connect 12 0 13 1;
#X connect 12 0 17 0;
#X connect 13 0 16 0;
#X connect 13 0 16 1;
#X connect 14 0 12 1;
#X connect 15 0 22 0;
#X connect 15 1 12 0;
#X connect 18 0 19 1;
#X connect 18 0 20 0;
#X connect 18 1 19 0;
#X connect 19 0 20 1;
#X connect 20 0 22 1;
#X connect 22 0 27 0;
#X connect 22 0 32 0;
#X connect 23 0 0 0;
#X connect 24 0 33 0;
#X connect 25 0 1 1;
#X connect 26 0 7 0;
#X connect 28 0 29 1;
#X connect 29 0 34 0;
#X connect 30 0 29 0;
#X connect 30 1 28 0;
#X connect 31 0 15 0;
#X connect 31 0 21 0;
#X connect 32 0 25 0;
#X connect 33 0 2 0;
#X connect 33 0 13 0;
#X connect 34 0 31 1;
#X connect 35 0 36 0;
#X connect 36 0 39 0;
#X connect 37 0 40 0;
#X connect 37 0 41 0;
#X connect 39 0 38 0;
#X connect 40 0 35 0;
#X connect 40 0 38 0;
#X connect 45 0 5 0;
#X connect 51 0 57 0;
#X connect 57 0 79 0;
#X connect 57 1 19 1;
#X connect 57 1 12 1;
#X connect 64 0 1 0;
#X connect 64 0 30 0;
#X connect 79 0 15 0;

View file

@ -0,0 +1,102 @@
#N canvas 601 188 580 659 12;
#N canvas 0 0 450 300 graph1 0;
#X array table24 259 float 1;
#A 0 -0.294693 0 0.294693 0.4 0.28948 0.10749 0.022875 0.0789655 0.181673
0.218249 0.171348 0.115564 0.119192 0.169863 0.201356 0.178657 0.137857
0.138353 0.188891 0.23571 0.22487 0.164534 0.115848 0.125265 0.176634
0.214361 0.205655 0.169043 0.14204 0.134157 0.124033 0.0997798 0.0859507
0.118173 0.195202 0.270956 0.301868 0.293569 0.285908 0.289835 0.256276
0.128881 -0.0684912 -0.215994 -0.195335 -0.0145421 0.174701 0.203986
0.0451069 -0.159794 -0.231026 -0.119011 0.0575033 0.135323 0.0628509
-0.0665307 -0.124779 -0.0776696 0.000279083 0.0247376 -0.00546273 -0.0222151
0.017933 0.0755681 0.0749102 4.97367e-06 -0.0729564 -0.0490464 0.0834901
0.232853 0.286943 0.213202 0.0759584 -0.0357248 -0.0863297 -0.101697
-0.115455 -0.125625 -0.107127 -0.0530433 0.012152 0.0608637 0.0902219
0.111597 0.119683 0.0910146 0.0236817 -0.0326555 -0.0100379 0.100844
0.216022 0.223032 0.094995 -0.0649958 -0.110291 0.00678482 0.180334
0.247439 0.144699 -0.0319975 -0.124321 -0.0648335 0.0680811 0.141409
0.100343 0.00354248 -0.0636733 -0.0891566 -0.131987 -0.227286 -0.316392
-0.293048 -0.12222 0.100475 0.222686 0.173879 0.0281889 -0.0714016
-0.0482686 0.0482418 0.108884 0.0773858 -0.00559103 -0.0590099 -0.0454391
0.00509731 0.0411467 0.0421476 0.0225557 2.40108e-06 -0.0225508 -0.0421448
-0.0411506 -0.00510821 0.0454302 0.0590142 0.0056084 -0.0773706 -0.108887
-0.0482625 0.048252 0.0714103 -0.0281575 -0.173853 -0.222693 -0.100517
0.122172 0.293026 0.316402 0.22731 0.132002 0.0891614 0.063682 -0.00352253
-0.100324 -0.141412 -0.0681076 0.0648079 0.124324 0.0320316 -0.144663
-0.247435 -0.180365 -0.00682225 0.110282 0.0650224 -0.0949583 -0.223017
-0.216038 -0.100873 0.010022 0.0326611 -0.0236657 -0.0910033 -0.119682
-0.111601 -0.0902271 -0.0608718 -0.0121649 0.0530291 0.107119 0.125625
0.115458 0.101699 0.0863353 0.0357423 -0.0759289 -0.213176 -0.28694
-0.232878 -0.0835252 0.0490278 0.0729642 1.4921e-05 -0.0749008 -0.0755765
-0.0179463 0.0222127 0.00547055 -0.0247352 -0.000292052 0.0776522 0.12478
0.0665546 -0.062824 -0.135322 -0.0575355 0.118973 0.23102 0.159828
-0.0450604 -0.203969 -0.174729 0.014495 0.195309 0.21601 0.0685338
-0.128843 -0.25626 -0.289835 -0.285909 -0.293565 -0.30187 -0.270969
-0.195221 -0.118186 -0.0859518 -0.0997742 -0.124029 -0.134156 -0.142036
-0.169035 -0.205649 -0.214364 -0.176646 -0.125273 -0.115843 -0.16452
-0.22486 -0.235715 -0.188904 -0.13836 -0.137851 -0.178647 -0.201357
-0.169874 -0.1192 -0.115557 -0.171333 -0.218246 -0.181691 -0.0789875
-0.0228734 -0.107456 -0.289441 -0.399997 -0.294741 -7.20325e-05 0.294645
;
#X coords 0 1.02 258 -1.02 258 130 1;
#X restore 93 408 graph;
#X obj 33 288 line~;
#X msg 33 237 500 \, 1423 4000;
#X floatatom 41 262 5 0 0 0 - - -;
#X text 24 556 Synthesis techniques vary in their tendency to make
foldover. For higher pitched sounds you'll want to try out relatively
folvover-resistant ones.;
#X obj 33 342 output~;
#X obj 201 281 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
-1;
#N canvas 0 0 618 384 make-tab 0;
#X obj 13 28 inlet;
#X obj 99 28 inlet;
#X obj 183 28 inlet;
#X obj 255 29 inlet;
#X msg 38 176 \; table24 sinesum 256 1 1 1 1 0 0 0 0 1 0 0 0 0 0 0
1 0 0 0 0 0 0 1 0 0 0 0 0 0 1 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 1 \, normalize
0.4;
#X msg 14 277 \; table24 sinesum 256 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 \, normalize
0.2;
#X msg 183 101 \; table24 const 0 \, 0 1 1 1 1 1;
#X msg 255 58 \; table24 const 0;
#X connect 0 0 5 0;
#X connect 1 0 4 0;
#X connect 2 0 6 0;
#X connect 3 0 7 0;
#X restore 201 355 pd make-tab;
#X obj 232 300 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
-1;
#X obj 263 317 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
-1;
#X obj 295 334 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
-1;
#X text 222 276 sine;
#X text 252 297 complex;
#X text 284 314 rectangle;
#X text 313 332 clear;
#X obj 33 315 tabosc4~ table24;
#X text 56 2 THE NYQUIST THEOREM AND FOLDOVER;
#X text 30 33 WARNING: PLAY THIS QUIETLY TO AVOID UNPLEASANTNESS AND
POSSIBLE EAR DAMAGE.;
#X text 29 77 Foldover occurs when you synthesize frequencies greater
than the Nyquist frequency (half the sample rate). In this example
\, the fundamental only reaches 1423 \, but the tables contain high
partials. As the partials sweep upward you hear them reflect off the
Nyquist frequency. Also \, partials can come into contact with each
other causing beating. The value of 1423 was chosen to make the beating
effect especially strong if you're running at a sample rate of 44100
(the usual one.);
#X text 330 616 updated for Pd version 0.37;
#X text 219 245 waveforms:;
#X connect 1 0 15 0;
#X connect 2 0 1 0;
#X connect 3 0 1 0;
#X connect 6 0 7 0;
#X connect 8 0 7 1;
#X connect 9 0 7 2;
#X connect 10 0 7 3;
#X connect 15 0 5 0;
#X connect 15 0 5 1;

View file

@ -0,0 +1,39 @@
#N canvas 180 71 562 473 12;
#X obj 155 348 output~;
#X text 310 443 updated for Pd version 0.37;
#X text 56 2 FOLDOVER IN SAWTOOTH WAVES;
#X obj 154 320 clip~ 0 1;
#X obj 155 153 mtof;
#X floatatom 155 131 3 0 0 0 - - -;
#X obj 155 269 *~ 20;
#X obj 155 295 -~ 19;
#X obj 155 177 phasor~;
#N canvas 0 0 560 183 /SUBPATCH/ 0;
#X obj 25 74 loadbang;
#X msg 25 99 61;
#X obj 25 124 outlet;
#X text 7 6 This sets the pitch initially to 61 when the patch is first
opened.;
#X connect 0 0 1 0;
#X connect 1 0 2 0;
#X restore 155 105 pd;
#X text 190 130 <--pitch;
#X obj 164 206 output~;
#X text 237 205 <--sawtooth amplitude;
#X text 233 373 <--pulse train amplitude;
#X text 28 406 We'll explain more about making pulses later on... this
example is mostly intended as ear training.;
#X text 19 23 In more ordinary kinds of waveforms \, foldover comes
across as a "cheap synth" sound. You can hear the foldover clearly
in the pulse train here \, and less clearly (but still audibly) in
the straight sawtooth \, especially at high pitches.;
#X connect 3 0 0 0;
#X connect 3 0 0 1;
#X connect 4 0 8 0;
#X connect 5 0 4 0;
#X connect 6 0 7 0;
#X connect 7 0 3 0;
#X connect 8 0 6 0;
#X connect 8 0 11 0;
#X connect 8 0 11 1;
#X connect 9 0 5 0;

View file

@ -0,0 +1,55 @@
#N canvas 298 115 555 414 12;
#X obj 42 349 output~;
#X text 302 376 updated for Pd version 0.37;
#X text 56 2 ZIPPER NOISE;
#X obj 43 321 *~;
#X obj 125 350 output~;
#X obj 126 322 *~;
#X obj 65 262 line;
#X obj 149 262 line~;
#N canvas 0 0 450 300 metro 0;
#X obj 88 39 loadbang;
#X msg 87 65 1;
#X obj 87 96 metro 500;
#X obj 87 131 tgl 15 0 empty empty empty 0 -6 0 8 -262144 -1 -1 1 1
;
#X obj 87 153 sel 0 1;
#X obj 87 190 outlet;
#X obj 151 192 outlet;
#X connect 0 0 1 0;
#X connect 1 0 2 0;
#X connect 2 0 3 0;
#X connect 3 0 4 0;
#X connect 4 0 5 0;
#X connect 4 1 6 0;
#X restore 65 170 pd metro;
#X obj 65 198 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
-1;
#X obj 132 199 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
-1;
#X msg 65 219 1 300;
#X msg 132 221 0 300;
#X obj 72 290 osc~ 880;
#X text 30 28 Here is a related issue: if we use a (control) line object
to change an amplitude \, it sends ramping control messages \, once
every 20 msec by default. At left we use this to control the amplitude
of a sinusoid. In effect we're multiplying the sinusoid by a staircase
signal (50 increments per second.) Using the signal version \, line~
\, fixes the problem. Line~ outputs a ramp that is incremented every
sample.;
#X connect 3 0 0 0;
#X connect 3 0 0 1;
#X connect 5 0 4 0;
#X connect 5 0 4 1;
#X connect 6 0 3 1;
#X connect 7 0 5 1;
#X connect 8 0 9 0;
#X connect 8 1 10 0;
#X connect 9 0 11 0;
#X connect 10 0 12 0;
#X connect 11 0 6 0;
#X connect 11 0 7 0;
#X connect 12 0 6 0;
#X connect 12 0 7 0;
#X connect 13 0 3 0;
#X connect 13 0 5 0;

View file

@ -0,0 +1,48 @@
#N canvas 215 77 561 455 12;
#X text 14 7 CONVERTING CONTROL TO SIGNALS;
#X obj 29 350 output~;
#X obj 107 352 output~;
#N canvas 0 0 450 300 metro 0;
#X obj 88 39 loadbang;
#X msg 87 65 1;
#X obj 87 131 tgl 15 0 empty empty empty 0 -6 0 8 -262144 -1 -1 0 1
;
#X obj 87 153 sel 0 1;
#X obj 87 190 outlet;
#X obj 151 192 outlet;
#X obj 87 96 metro 2;
#X connect 0 0 1 0;
#X connect 1 0 6 0;
#X connect 2 0 3 0;
#X connect 3 0 4 0;
#X connect 3 1 5 0;
#X connect 6 0 2 0;
#X restore 30 242 pd metro;
#X msg 30 268 1 2;
#X msg 97 270 0 2;
#X obj 30 305 line~;
#X obj 108 306 vline~;
#X text 13 107 Here we try out line~ and vline~ as triangle wave generators.
The subpatch is still sending alternating bangs as in the last patch
\, but now at an audible frequency \, every 2 msec.;
#X text 17 172 The effect of line~ rounding breakpoints to the nearest
block (on the order of a millisecond) is that each 4-millisecond-long
cycle has a different shape. Using vline~ resolves the problem.;
#X text 385 437 Updated for Pd 0.37;
#X text 16 411 Sometimes you will want to use vline~ in place of sig~
for the same reason.;
#X text 15 27 For controlling amplitudes \, line~ \, with its block-aligned
breakpoints \, is accurate enough for most purposes. But certain usages
\, such as this patch \, demand more accuracy. The vline~ object \,
somewhat more expensive than line~ \, can handle breakpoints to sub-sample
accuracy.;
#X connect 3 0 4 0;
#X connect 3 1 5 0;
#X connect 4 0 6 0;
#X connect 4 0 7 0;
#X connect 5 0 6 0;
#X connect 5 0 7 0;
#X connect 6 0 1 0;
#X connect 6 0 1 1;
#X connect 7 0 2 0;
#X connect 7 0 2 1;

View file

@ -0,0 +1,84 @@
#N canvas 34 0 985 746 12;
#N canvas 0 0 450 300 graph1 0;
#X array tab28 176403 float 0;
#X coords 0 1.02 176403 -1.02 200 130 1;
#X restore 740 126 graph;
#X obj 577 486 loadbang;
#X obj 31 340 hip~ 5;
#X obj 587 345 adc~ 1;
#X obj 587 375 hip~ 5;
#X msg 558 306 bang;
#X text 681 492 v-- re-read the original sample;
#X text 20 6 ONE-SHOT SAMPLER USING LINE~ AS PHASE;
#X obj 31 306 *~;
#X obj 71 279 r cutoff;
#X obj 31 194 r phase;
#X msg 24 37 bang;
#X obj 124 92 delay 5;
#X text 77 37 <-- play the sample;
#X msg 24 128 \; cutoff 0 5;
#X text 34 85 cut the;
#X text 34 104 sound off;
#X text 204 77 Wait for the;
#X text 202 97 cutoff to finish;
#X text 349 121 set the upper line~ to start;
#X text 349 140 at the first sample and go;
#X text 348 161 forever (until the next trigger);
#X text 18 486 To start a note \, first we have to mute the output
in case ther's already something playing---otherwise we'll get a click.
The "cutoff" line~ then takes 5 msec to get to zero. After that amount
of delay \, we reset the phase to sample number 1 and set it in motion.
We want the line~ output to increase by 1 each sample of output \,
so we ask for it to do 4.41e+08 samples in 1e+07 milliseconds.;
#X text 18 602 The cutoff mechanism is still safe if we happen to ask
for two notes in under 5 msec. The second request would reset the delay
\, so that there's no way the delay can possibly fire without the cutoff
line~ at zero.;
#X text 596 305 <-- record;
#X obj 622 405 line~;
#X obj 587 410 *~;
#X text 738 267 ------ 4 seconds ------;
#X obj 655 342 del 3990;
#X msg 655 370 0 10;
#X text 706 371 <--stop recording;
#X text 19 672 We avoid clicking at the end of the table by getting
the table's own contents to go smoothly to zero. To do this we added
a level control to the recording patch that cuts off just before the
recording reaches the end of the table.;
#X text 576 599 this is.;
#X text 578 575 My apologies to Jonathan Harvey whose bell;
#X obj 577 545 soundfiler;
#X text 19 443 Here's how to make a sampler with a line~ object \,
instead of a phasor~ \, to generate the read location signal.;
#X obj 71 306 vline~;
#X obj 30 369 output~;
#X obj 31 224 vline~;
#X obj 558 439 tabwrite~ tab28;
#X msg 577 516 read ../sound/bell.aiff tab28;
#X obj 31 254 tabread4~ tab28;
#X msg 124 127 \; phase 1 \, 4.41e+08 1e+07 \; cutoff 1;
#X msg 497 386 0 \, 1 5;
#X text 719 717 updated for Pd version 0.37;
#X connect 1 0 40 0;
#X connect 2 0 37 0;
#X connect 2 0 37 1;
#X connect 3 0 4 0;
#X connect 4 0 26 0;
#X connect 5 0 28 0;
#X connect 5 0 43 0;
#X connect 5 0 39 0;
#X connect 8 0 2 0;
#X connect 9 0 36 0;
#X connect 10 0 38 0;
#X connect 11 0 14 0;
#X connect 11 0 12 0;
#X connect 12 0 42 0;
#X connect 25 0 26 1;
#X connect 26 0 39 0;
#X connect 28 0 29 0;
#X connect 29 0 25 0;
#X connect 36 0 8 1;
#X connect 38 0 41 0;
#X connect 40 0 34 0;
#X connect 41 0 8 0;
#X connect 43 0 25 0;

View file

@ -0,0 +1,25 @@
#N canvas 215 77 561 455 12;
#N canvas 0 0 269 179 metro 0;
#X obj 88 39 loadbang;
#X msg 87 65 1;
#X obj 87 128 outlet;
#X obj 87 96 metro 100;
#X msg 178 70 \; pd dsp 1;
#X connect 0 0 1 0;
#X connect 0 0 4 0;
#X connect 1 0 3 0;
#X connect 3 0 2 0;
#X restore 41 247 pd metro;
#X text 374 425 Updated for Pd 0.37;
#X obj 41 316 snapshot~;
#X obj 66 286 phasor~ 1;
#X floatatom 41 347 5 0 0 0 - - -;
#X text 14 7 CONVERTING SIGNALS TO CONTROLS;
#X text 15 35 The snapshot~ object allows you to convert from signals
back to control streams (float messages) -- an opposite of signal~.
The value output is always the end of the most recently computed audio
block \, so that even if you bang it metronomically (as here) it need
not give you samples that are exactly evenly spaced.;
#X connect 0 0 2 0;
#X connect 2 0 4 0;
#X connect 3 0 2 0;

View file

@ -0,0 +1,113 @@
#N canvas 66 7 617 909 12;
#X text 164 5 ENVELOPE FOLLOWERS;
#X text 10 25 The env~ object reports ths RMS signal level over the
last 256 samples (by default) or any other power of 2 that's at least
twice the block size. The analysis is done in an overlapped fashion
so that results appear every N/2 points if N is the analysis window
size. So the larger the window \, the stabler the result and the less
frequently it appears. Computation time doesn't depend heavily on N.
;
#X text 11 135 Envelope followers are frequently used to detect attacks
and periods of silence. (There are fancier attack detectors out there
\, though.) Here is a simple threshold-based attack and rest detector.
;
#X obj 102 297 dbtorms;
#X obj 23 293 osc~ 440;
#X obj 23 339 env~;
#X floatatom 78 329 0 0 0 0 - - -;
#X floatatom 102 274 0 0 0 0 - - -;
#X msg 451 320 \; pd dsp 1;
#X obj 119 380 t b f;
#X floatatom 119 403 0 0 0 0 - - -;
#X obj 126 458 pack;
#X obj 126 481 route 0 1;
#X obj 126 504 > 55;
#X obj 176 504 < 45;
#X obj 126 527 sel 1;
#X obj 176 527 sel 1;
#X msg 90 538 1;
#X msg 90 516 0;
#X obj 126 564 print attack;
#X obj 119 435 != 0;
#X obj 24 612 t b f;
#X floatatom 15 638 0 0 0 0 - - -;
#X obj 27 688 pack;
#X obj 27 711 route 0 1;
#X obj 27 749 sel 1;
#X msg 6 856 1;
#X msg 7 879 0;
#X obj 20 666 != 0;
#X obj 58 639 < 45;
#X obj 31 783 timer;
#X obj 113 712 sel 0;
#X obj 95 832 sel 0;
#X obj 45 832 sel 1;
#X obj 45 873 print rest;
#X obj 31 806 > 1000;
#X text 162 403 state -- 1 if waiting for low threshold \,;
#X text 199 418 0 if we've attained it and now want the;
#X text 202 434 high one.;
#X text 209 480 route the RMS value according to state;
#X text 239 506 if off \, 55 dB means attack. If on \, 45;
#X text 240 527 dB or less means state changes to off.;
#X text 132 359 ATTACK DETECTION;
#X text 40 594 REST DETECTION;
#X text 100 637 Here we always will test RMS against a low value;
#X text 125 654 but as before we route the result according to;
#X text 147 671 our state \, 1 if "resting" \, 0 if not.;
#X text 163 709 regardless of state \, when RMS isn't low;
#X text 185 724 reset the timer;
#X text 202 846 RMS isn't low enough.;
#X text 120 744 If we're not in rest \, and the RMS is low \,;
#X text 143 761 check elapsed time sinse RMS last wasn't low.;
#X text 122 802 If more than 1 second \, report a rest.;
#X text 170 828 If we're at rest \, pop out of it when;
#X text 11 201 Both detectors are state machines with two states \,
on and off. If on \, a test is run to determine whether to turn off
\, and vice versa. The tests are run at each output of the rms~ object.
;
#X text 355 884 updated for Pd version 0.37;
#X text 109 320 note 3.01 dB difference between;
#X text 113 336 peak and RMS amplitudes.;
#X obj 451 297 loadbang;
#X obj 23 316 *~;
#X connect 3 0 59 1;
#X connect 4 0 59 0;
#X connect 5 0 6 0;
#X connect 5 0 9 0;
#X connect 5 0 21 0;
#X connect 7 0 3 0;
#X connect 9 0 10 0;
#X connect 9 1 11 1;
#X connect 10 0 20 0;
#X connect 11 0 12 0;
#X connect 12 0 13 0;
#X connect 12 1 14 0;
#X connect 13 0 15 0;
#X connect 14 0 16 0;
#X connect 15 0 17 0;
#X connect 15 0 19 0;
#X connect 16 0 18 0;
#X connect 17 0 10 0;
#X connect 18 0 10 0;
#X connect 20 0 11 0;
#X connect 21 0 22 0;
#X connect 21 1 29 0;
#X connect 22 0 28 0;
#X connect 23 0 24 0;
#X connect 24 0 25 0;
#X connect 24 1 32 0;
#X connect 25 0 30 1;
#X connect 26 0 22 0;
#X connect 27 0 22 0;
#X connect 28 0 23 0;
#X connect 29 0 23 1;
#X connect 29 0 31 0;
#X connect 30 0 35 0;
#X connect 31 0 30 0;
#X connect 32 0 27 0;
#X connect 33 0 26 0;
#X connect 33 0 34 0;
#X connect 35 0 33 0;
#X connect 58 0 8 0;
#X connect 59 0 5 0;

View file

@ -0,0 +1,156 @@
#N canvas 57 74 829 559 12;
#N canvas 0 0 450 300 (subpatch) 0;
#X array 29-sequence 9 float 3;
#A 0 110 550 385 495 165 385 495 275 615;
#X coords 0 500 9 0 200 100 1;
#X restore 621 42 graph;
#X obj 27 426 *~;
#X obj 27 454 hip~ 5;
#N canvas 0 0 450 300 (subpatch) 0;
#X array 29-envelope 103 float 1;
#A 0 -0.0199988 1.0673e-06 0.0500008 0.13 0.16 0.28 0.5 0.6 0.7 0.8
1.01111 1 0.988889 0.977778 0.966667 0.955556 0.944444 0.933333 0.922222
0.911111 0.9 0.888889 0.797778 0.737777 0.677777 0.647777 0.617777
0.557777 0.487777 0.467777 0.447776 0.417776 0.397776 0.387776 0.377776
0.367776 0.347776 0.327776 0.317776 0.297776 0.277776 0.267776 0.257776
0.257776 0.277776 0.297776 0.327776 0.357776 0.377776 0.397776 0.407776
0.427776 0.437776 0.387776 0.367776 0.347776 0.337776 0.287776 0.277776
0.277776 0.277776 0.267776 0.267776 0.267776 0.297776 0.317776 0.347776
0.367776 0.367776 0.357776 0.347776 0.337776 0.307776 0.287776 0.257776
0.227776 0.197776 0.167776 0.167776 0.167776 0.167776 0.167776 0.157776
0.157776 0.157776 0.157776 0.147776 0.147776 0.147776 0.137776 0.137776
0.111111 0.1 0.0888889 0.0777778 0.0666667 0.0555556 0.0444444 0.0333333
0.0222222 0.0111111 0 -0.0111111;
#X coords 0 1 102 0 200 100 1;
#X restore 622 146 graph;
#N canvas 0 0 450 300 (subpatch) 0;
#X array 29-sample 259 float 1;
#A 0 0.989177 1 0.989177 0.95694 0.903989 0.83147 0.740952 0.634394
0.514103 0.382684 0.242981 0.0980184 -0.0490663 -0.195089 -0.336888
-0.471395 -0.595698 -0.707105 -0.803206 -0.88192 -0.941543 -0.980785
-0.998795 -0.995185 -0.970032 -0.923881 -0.85773 -0.773013 -0.671561
-0.555573 -0.427558 -0.290288 -0.146734 -3.98038e-06 0.146726 0.290281
0.427551 0.555566 0.671556 0.773007 0.857726 0.923878 0.97003 0.995184
0.998796 0.980786 0.941546 0.881924 0.803211 0.707111 0.595704 0.471402
0.336896 0.195097 0.0490743 -0.0980105 -0.242974 -0.382677 -0.514097
-0.634388 -0.740946 -0.831465 -0.903986 -0.956938 -0.989175 -1 -0.989178
-0.956943 -0.903993 -0.831474 -0.740957 -0.6344 -0.51411 -0.382692
-0.242989 -0.0980263 0.0490584 0.195081 0.336881 0.471388 0.595691
0.7071 0.803202 0.881916 0.941541 0.980783 0.998795 0.995186 0.970034
0.923884 0.857734 0.773018 0.671567 0.55558 0.427566 0.290296 0.146742
1.19412e-05 -0.146719 -0.290273 -0.427544 -0.55556 -0.67155 -0.773002
-0.857722 -0.923875 -0.970028 -0.995183 -0.998796 -0.980788 -0.941549
-0.881928 -0.803216 -0.707117 -0.595711 -0.471409 -0.336903 -0.195104
-0.0490822 0.0980025 0.242966 0.38267 0.51409 0.634382 0.740941 0.831461
0.903983 0.956936 0.989174 1 0.989179 0.956945 0.903996 0.831479 0.740962
0.634406 0.514117 0.382699 0.242997 0.0980342 -0.0490504 -0.195073
-0.336873 -0.471381 -0.595685 -0.707094 -0.803197 -0.881913 -0.941538
-0.980782 -0.998795 -0.995187 -0.970036 -0.923887 -0.857738 -0.773023
-0.671573 -0.555586 -0.427573 -0.290303 -0.14675 -1.99019e-05 0.146711
0.290265 0.427537 0.555553 0.671544 0.772997 0.857718 0.923872 0.970026
0.995183 0.998797 0.980789 0.941551 0.881931 0.803221 0.707122 0.595717
0.471416 0.336911 0.195112 0.0490902 -0.0979946 -0.242958 -0.382662
-0.514083 -0.634375 -0.740936 -0.831457 -0.903979 -0.956933 -0.989173
-1 -0.98918 -0.956947 -0.904 -0.831483 -0.740968 -0.634412 -0.514124
-0.382706 -0.243004 -0.0980421 0.0490425 0.195065 0.336866 0.471374
0.595679 0.707088 0.803192 0.881909 0.941535 0.98078 0.998794 0.995187
0.970038 0.92389 0.857742 0.773028 0.671579 0.555593 0.42758 0.290311
0.146758 2.78627e-05 -0.146703 -0.290258 -0.42753 -0.555547 -0.671538
-0.772992 -0.857714 -0.923868 -0.970024 -0.995182 -0.998797 -0.980791
-0.941554 -0.881935 -0.803225 -0.707128 -0.595723 -0.471423 -0.336918
-0.19512 -0.0490981 0.0979867 0.24295 0.382655 0.514076 0.634369 0.74093
0.831452 0.903976 0.956931 0.989172 1 0.989181;
#X coords 0 1 258 -1 200 100 1;
#X restore 619 281 graph;
#X text 566 533 updated for Pd version 0.37;
#X obj 26 218 tabread~ 29-sequence;
#X obj 106 241 wrap~;
#X obj 106 265 *~ 100;
#X obj 106 289 +~ 1;
#X obj 26 242 phasor~;
#X obj 26 266 -~ 0.5;
#X obj 27 377 cos~;
#X obj 84 336 *~;
#X obj 28 488 output~;
#X obj 84 408 tabread4~ 29-sample;
#X obj 106 313 tabread4~ 29-envelope;
#X obj 84 360 *~ 128;
#X obj 84 384 +~ 129;
#X obj 27 401 +~ 1;
#X obj 26 194 *~ 9;
#N canvas 328 85 609 424 make-tables 0;
#X msg 109 52 bang;
#X obj 109 77 t b b;
#X obj 152 134 f;
#X obj 190 134 + 1;
#X msg 174 106 0;
#X obj 109 103 until;
#X obj 152 162 t f f;
#X obj 27 190 moses 10;
#X obj 18 272 tabwrite 29-envelope;
#X obj 75 159 sel 102;
#X obj 23 218 expr ($f1-1)/10;
#X obj 35 243 expr (101-$f1)/90;
#X msg 120 380 \; 29-sample cosinesum 256 0 0 0 0 0 0 1;
#X msg 120 338 \; 29-sequence 0 55 550 385 495 165 385 495 275 615
;
#X text 30 8 bang to recalculate the envelope table (I did this but
then went in and changed it with the mouse afterward.);
#X text 84 299 The sequence is just a list of specified frequencies
\; the wavetable is a cosine.;
#X connect 0 0 1 0;
#X connect 1 0 5 0;
#X connect 1 1 4 0;
#X connect 2 0 3 0;
#X connect 2 0 6 0;
#X connect 2 0 9 0;
#X connect 3 0 2 1;
#X connect 4 0 2 1;
#X connect 5 0 2 0;
#X connect 6 0 7 0;
#X connect 6 1 8 1;
#X connect 7 0 10 0;
#X connect 7 1 11 0;
#X connect 9 0 5 1;
#X connect 10 0 8 0;
#X connect 11 0 8 0;
#X restore 689 401 pd make-tables;
#X text 46 1 ANALOG-SYNTH-STYLE SEQUENCER;
#X obj 26 170 phasor~ 0.6;
#X text 97 194 main loop: sawtooth of amplitude 9;
#X text 218 219 read frequency sequence;
#X text 162 241 9x original frequency sawtooth;
#X text 173 266 adjust for reading;
#X text 346 266 envelope sample;
#X text 123 336 multiply envelope by audio-frequency sawtooth;
#X text 147 361 adjust amplitude and center for wavetable;
#X text 62 428 multiply by raised-cosine smoothing function;
#X text 478 401 how to make the tables:;
#X text 27 27 Some control operations can be carried out entirely by
tilde objects passing audio signals around. Here is an imitation of
an analog sequencer and envelope generator. A phasor~ loops through
the "sequence" table at 0.6 Hz \, generating 9 frequencies. Simultaneously
\, by multiplying by 9 and wrapping \, we create a sawtooth at 9*0.6=5.4
Hz \, which reads a second table for an envelope shape. This becomes
the grain size for a sampler based on the 18.sampler.looped example
earlier.;
#X connect 1 0 2 0;
#X connect 2 0 14 0;
#X connect 2 0 14 1;
#X connect 6 0 10 0;
#X connect 7 0 8 0;
#X connect 8 0 9 0;
#X connect 9 0 16 0;
#X connect 10 0 11 0;
#X connect 11 0 13 0;
#X connect 11 0 12 0;
#X connect 12 0 19 0;
#X connect 13 0 17 0;
#X connect 15 0 1 1;
#X connect 16 0 13 1;
#X connect 17 0 18 0;
#X connect 18 0 15 0;
#X connect 19 0 1 0;
#X connect 20 0 6 0;
#X connect 20 0 7 0;
#X connect 23 0 20 0;

View file

@ -0,0 +1,104 @@
#N canvas 120 85 930 452 12;
#N canvas 0 0 450 300 graph1 0;
#X array samphold 44100 float 0;
#X coords 0 1 44100 0 300 200 1;
#X restore 606 36 graph;
#N canvas 0 0 439 429 tables 0;
#N canvas 0 0 450 300 graph1 0;
#X array dbtorms 123 float 1;
#A 0 0 0 1.25893e-05 1.41254e-05 1.58489e-05 1.77828e-05 1.99526e-05
2.23872e-05 2.51189e-05 2.81838e-05 3.16228e-05 3.54813e-05 3.98107e-05
4.46684e-05 5.01187e-05 5.62341e-05 6.30957e-05 7.07946e-05 7.94328e-05
8.91251e-05 1e-04 0.000112202 0.000125893 0.000141254 0.000158489 0.000177828
0.000199526 0.000223872 0.000251189 0.000281838 0.000316228 0.000354813
0.000398107 0.000446684 0.000501187 0.000562341 0.000630957 0.000707946
0.000794328 0.000891251 0.001 0.00112202 0.00125893 0.00141254 0.00158489
0.00177828 0.00199526 0.00223872 0.00251189 0.00281838 0.00316228 0.00354813
0.00398107 0.00446684 0.00501187 0.00562341 0.00630957 0.00707946 0.00794328
0.00891251 0.01 0.0112202 0.0125893 0.0141254 0.0158489 0.0177828 0.0199526
0.0223872 0.0251189 0.0281838 0.0316228 0.0354813 0.0398107 0.0446684
0.0501187 0.0562341 0.0630957 0.0707946 0.0794328 0.0891251 0.1 0.112202
0.125893 0.141254 0.158489 0.177828 0.199526 0.223872 0.251189 0.281838
0.316228 0.354813 0.398107 0.446684 0.501187 0.562341 0.630957 0.707946
0.794328 0.891251 1 1.12202 1.25893 1.41254 1.58489 1.77828 1.99526
2.23872 2.51189 2.81838 3.16228 3.54813 3.98107 4.46684 5.01187 5.62341
6.30957 7.07946 7.94328 8.91251 10 11.2202 12.5893;
#X coords 0 10 123 0 200 100 1;
#X restore 78 55 graph;
#X text 280 148 0;
#X text 282 48 10;
#X text 97 158 ------ 123 samples ------;
#N canvas 0 0 450 300 graph2 0;
#X array mtof 130 float 1;
#A 0 8.1758 8.66196 9.17702 9.72272 10.3009 10.9134 11.5623 12.2499
12.9783 13.75 14.5676 15.4339 16.3516 17.3239 18.354 19.4454 20.6017
21.8268 23.1247 24.4997 25.9565 27.5 29.1352 30.8677 32.7032 34.6478
36.7081 38.8909 41.2034 43.6535 46.2493 48.9994 51.9131 55 58.2705
61.7354 65.4064 69.2957 73.4162 77.7817 82.4069 87.3071 92.4986 97.9989
103.826 110 116.541 123.471 130.813 138.591 146.832 155.563 164.814
174.614 184.997 195.998 207.652 220 233.082 246.942 261.626 277.183
293.665 311.127 329.628 349.228 369.994 391.995 415.305 440 466.164
493.883 523.251 554.365 587.33 622.254 659.255 698.456 739.989 783.991
830.609 880 932.328 987.767 1046.5 1108.73 1174.66 1244.51 1318.51
1396.91 1479.98 1567.98 1661.22 1760 1864.66 1975.53 2093 2217.46 2349.32
2489.02 2637.02 2793.83 2959.96 3135.96 3322.44 3520 3729.31 3951.07
4186.01 4434.92 4698.64 4978.03 5274.04 5587.65 5919.91 6271.93 6644.88
7040 7458.62 7902.13 8372.02 8869.84 9397.27 9956.06 10548.1 11175.3
11839.8 12543.9 13289.8 14080;
#X coords 0 12000 130 0 200 100 1;
#X restore 85 232 graph;
#X text 95 340 ------ 130 samples ------;
#X text 294 325 0;
#X text 296 225 12000;
#X restore 648 280 pd tables;
#X text 67 8 SAMPLE AND HOLD;
#X obj 141 266 phasor~ 5;
#X obj 44 241 phasor~ 7;
#X obj 44 266 samphold~;
#X floatatom 44 216 0 0 0 0 - - -;
#X floatatom 141 211 0 0 0 0 - - -;
#X obj 216 319 tabwrite~ samphold;
#X msg 216 294 bang;
#X obj 44 341 tabread4~ mtof;
#X obj 44 291 *~ 48;
#X obj 44 316 +~ 36;
#X obj 44 366 osc~;
#X msg 216 236 0;
#X text 259 293 <--graph output;
#X obj 44 191 unpack;
#X text 254 233 <-- reset phase;
#X msg 311 131 32 96.33;
#X msg 124 131 5 7;
#X msg 44 131 1 5;
#X msg 78 131 2 11;
#X msg 161 131 3.7 8.8;
#X msg 235 131 3.4 8.9;
#X text 16 31 Another analog favorite \, the sample and hold unit freezes
an audio signal on command. In the Pd version \, the second input of
samphold~ triggers it \, and the first input becomes the output's new
value whenever the trigger decreases from one sample to the next. This
is ideal for updating values when a phasor wraps around.;
#X text 679 428 updated for Pd version 0.37;
#X obj 44 392 output~;
#X connect 3 0 5 1;
#X connect 4 0 5 0;
#X connect 5 0 11 0;
#X connect 5 0 8 0;
#X connect 6 0 4 0;
#X connect 7 0 3 0;
#X connect 9 0 8 0;
#X connect 10 0 13 0;
#X connect 11 0 12 0;
#X connect 12 0 10 0;
#X connect 13 0 26 0;
#X connect 13 0 26 1;
#X connect 14 0 3 1;
#X connect 14 0 4 1;
#X connect 16 0 6 0;
#X connect 16 1 7 0;
#X connect 18 0 16 0;
#X connect 19 0 16 0;
#X connect 20 0 16 0;
#X connect 21 0 16 0;
#X connect 22 0 16 0;
#X connect 23 0 16 0;

View file

@ -0,0 +1,107 @@
#N canvas 57 27 578 769 12;
#X obj 13 514 mtof;
#X obj 13 463 stripnote;
#X obj 164 519 select;
#X obj 155 413 float;
#X obj 164 381 t b f;
#X obj 164 487 float;
#X text 217 367 f - store pitch below;
#X text 209 415 velocity stored here;
#X text 128 459 off;
#X text 216 486 recall pitch;
#X text 132 2 MONOPHONIC MIDI SYNTH;
#X obj 13 340 unpack;
#X obj 13 273 notein;
#X obj 13 300 pack;
#X obj 94 570 line~;
#X msg 94 544 \$1 100;
#X msg 164 545 0 1000;
#X text 15 75 First \, at top \, incoming MIDI notes are parsed and
used to set pitch and trigger an ADSR envelope. Second \, the envelope
generator itself has been extended to offer controls over the time
and target values via number boxes.;
#X text 17 21 This patch shows how to make a monophonic synthesizer
that could be controlled from a MIDI or voltage-control keyboard--in
this example we assume MIDI.;
#X msg 152 290 55 64;
#X msg 152 316 55 0;
#X msg 95 291 48 64;
#X msg 95 317 48 0;
#X text 14 142 The note-off testing is complicated by the fact that
we have to test both that the velocity is zero \, and further that
the note-off pitch matches the pitch that is now playing (the most
recent note-on pitch.);
#X text 218 387 b - bang to recall velocity;
#X obj 155 442 sel 0;
#X text 177 463 on;
#X obj 16 712 output~;
#X obj 15 688 hip~ 5;
#X obj 14 642 *~;
#X obj 13 541 phasor~;
#X obj 13 565 -~ 0.5;
#X obj 14 593 cos~;
#X obj 102 617 *~;
#X obj 14 617 +~ 1;
#X text 332 741 updated for Pd version 0.37;
#X obj 102 665 cos~;
#X msg 95 268 48 128;
#X text 18 491 pitch;
#X text 19 443 messages;
#X text 210 441 test for note on or off;
#X text 227 520 test against latest;
#X text 270 535 note-on pitch;
#X text 18 407 filter;
#X text 19 425 note-on;
#X obj 15 664 *~;
#X obj 94 517 / 127;
#X text 14 208 The synthesis technique is the same as in the previous
patch \, done in a simpler (but less general) way with a cos~ object
replacing the wavetable lookup.;
#X text 148 571 envelope generator now controls amplitude;
#X text 317 589 as well as grain size;
#X obj 102 641 *~ 2;
#X obj 123 594 +~ 0.5;
#X text 148 687 The +~ 0.5 and *~ 2 are fudge factors.;
#X text 148 648 This replaces the tabread4~;
#X text 146 668 in the previous patch.;
#X text 211 290 These buttons simulate MIDI input.;
#X connect 0 0 30 0;
#X connect 1 0 2 1;
#X connect 1 0 0 0;
#X connect 2 0 16 0;
#X connect 3 0 25 0;
#X connect 4 0 3 0;
#X connect 4 1 5 1;
#X connect 5 0 2 0;
#X connect 11 0 1 0;
#X connect 11 0 4 0;
#X connect 11 1 1 1;
#X connect 11 1 3 1;
#X connect 12 0 13 0;
#X connect 12 1 13 1;
#X connect 13 0 11 0;
#X connect 14 0 45 1;
#X connect 14 0 51 0;
#X connect 15 0 14 0;
#X connect 16 0 14 0;
#X connect 19 0 11 0;
#X connect 20 0 11 0;
#X connect 21 0 11 0;
#X connect 22 0 11 0;
#X connect 25 0 5 0;
#X connect 25 1 46 0;
#X connect 28 0 27 0;
#X connect 28 0 27 1;
#X connect 29 0 45 0;
#X connect 30 0 31 0;
#X connect 31 0 33 0;
#X connect 31 0 32 0;
#X connect 32 0 34 0;
#X connect 33 0 50 0;
#X connect 34 0 29 0;
#X connect 36 0 29 1;
#X connect 37 0 11 0;
#X connect 45 0 28 0;
#X connect 46 0 15 0;
#X connect 50 0 36 0;
#X connect 51 0 33 1;

View file

@ -0,0 +1,50 @@
#N canvas 173 105 567 576 12;
#X text 246 260 attack;
#X text 317 261 release;
#X obj 248 397 line~;
#X msg 318 355 0 500;
#X text 126 7 ENVELOPE GENERATORS;
#X obj 65 369 phasor~ 50;
#X obj 65 417 *~;
#X obj 65 465 wrap~;
#X msg 247 355 1 2500;
#X obj 65 393 -~ 0.5;
#X msg 182 331 10 200;
#X obj 247 331 del 200;
#X text 26 22 This patch uses an envelope generator to control a sound.
When you hit "attack" two things happen. First \, the line~ object
rises to 10 in 200 milliseconds. Then after a "delay" of the same 200
msec \, the second message sends the line~ back down to 1 over another
2500 msec. The "release" just ramps us down to zero at the end.;
#X obj 65 513 output~;
#X text 311 550 updated for Pd version 0.37;
#X obj 65 441 +~ 0.5;
#X obj 65 489 hip~ 5;
#X obj 247 280 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
-1;
#X obj 318 281 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
-1;
#X msg 257 308 stop;
#X text 28 121 You can hit the "attack" and/or "release" while something
is still going on from a previous attack or release \, and the envelope
generator does the ``right thing". In particular \, the release button
sends a "stop" to the "del" object \, in case it is still scheduled
to go off from a previous attack.;
#X text 27 218 The synthesis method is a form of waveshaping \, which
is the subject of a later chapter.;
#X connect 2 0 6 1;
#X connect 3 0 2 0;
#X connect 5 0 9 0;
#X connect 6 0 15 0;
#X connect 7 0 16 0;
#X connect 8 0 2 0;
#X connect 9 0 6 0;
#X connect 10 0 2 0;
#X connect 11 0 8 0;
#X connect 15 0 7 0;
#X connect 16 0 13 0;
#X connect 17 0 11 0;
#X connect 17 0 10 0;
#X connect 18 0 3 0;
#X connect 18 0 19 0;
#X connect 19 0 11 0;

View file

@ -0,0 +1,42 @@
#N canvas 40 23 609 630 12;
#N canvas 0 0 450 300 graph1 0;
#X array adsr-output 44100 float 0;
#X coords 0 1.02 44100 -1.02 200 130 1;
#X restore 121 332 graph;
#X text 121 464 ------ 1 second ------;
#X obj 18 92 r trigger;
#X obj 34 168 tabwrite~ adsr-output;
#X obj 56 143 r graphit;
#X msg 261 89 bang;
#X text 305 90 <-- attack and delayed release;
#X obj 272 113 del 500;
#X text 376 196 <-- attack only;
#X msg 261 177 \; pd dsp 1 \; trigger 1 \; graphit bang;
#X text 377 273 <-- release only;
#X msg 260 247 \; pd dsp 1 \; trigger 0 \; graphit bang;
#X msg 272 138 \; trigger 0;
#X text 324 452 -1;
#X text 326 327 1;
#X text 12 27 This patch introduces a simple "adsr" abstraction we'll
use frequently. You can click on the "adsr" object to see what's inside.
;
#X text 16 516 The active ingredient of the ADSR envelope generator
is a single line~ which gets passed messages to make the attack and
release behavior. You can retrigger the ADSR envelope generator all
you wish without having to wait for attacks or releases to finish;
#X text 104 5 ENVELOPE GENERATOR ABSTRACTION;
#X obj 18 118 adsr 1 100 200 50 300;
#X text 356 601 updated for Pd version 0.37;
#X obj 36 195 osc~ 440;
#X obj 17 220 *~;
#X obj 16 249 output~;
#X connect 2 0 18 0;
#X connect 4 0 3 0;
#X connect 5 0 9 0;
#X connect 5 0 7 0;
#X connect 7 0 12 0;
#X connect 18 0 3 0;
#X connect 18 0 21 0;
#X connect 20 0 21 1;
#X connect 21 0 22 0;
#X connect 21 0 22 1;

View file

@ -0,0 +1,100 @@
#N canvas 158 69 674 673 12;
#X obj 32 80 r trigger;
#X text 85 8 USING ADSR'S OUTPUT AS dB;
#X obj 32 131 tabread4~ dbtorms;
#N canvas 0 0 450 300 graph1 0;
#X array dbtorms 123 float 1;
#A 0 0 0 1.25893e-05 1.41254e-05 1.58489e-05 1.77828e-05 1.99526e-05
2.23872e-05 2.51189e-05 2.81838e-05 3.16228e-05 3.54813e-05 3.98107e-05
4.46684e-05 5.01187e-05 5.62341e-05 6.30957e-05 7.07946e-05 7.94328e-05
8.91251e-05 1e-04 0.000112202 0.000125893 0.000141254 0.000158489 0.000177828
0.000199526 0.000223872 0.000251189 0.000281838 0.000316228 0.000354813
0.000398107 0.000446684 0.000501187 0.000562341 0.000630957 0.000707946
0.000794328 0.000891251 0.001 0.00112202 0.00125893 0.00141254 0.00158489
0.00177828 0.00199526 0.00223872 0.00251189 0.00281838 0.00316228 0.00354813
0.00398107 0.00446684 0.00501187 0.00562341 0.00630957 0.00707946 0.00794328
0.00891251 0.01 0.0112202 0.0125893 0.0141254 0.0158489 0.0177828 0.0199526
0.0223872 0.0251189 0.0281838 0.0316228 0.0354813 0.0398107 0.0446684
0.0501187 0.0562341 0.0630957 0.0707946 0.0794328 0.0891251 0.1 0.112202
0.125893 0.141254 0.158489 0.177828 0.199526 0.223872 0.251189 0.281838
0.316228 0.354813 0.398107 0.446684 0.501187 0.562341 0.630957 0.707946
0.794328 0.891251 1 1.12202 1.25893 1.41254 1.58489 1.77828 1.99526
2.23872 2.51189 2.81838 3.16228 3.54813 3.98107 4.46684 5.01187 5.62341
6.30957 7.07946 7.94328 8.91251 10 11.2202 12.5893;
#X coords 0 10 123 0 200 100 1;
#X restore 387 83 graph;
#N canvas 461 495 663 358 make-table 0;
#X obj 97 195 moses 2;
#X msg 81 44 bang;
#X obj 81 73 t b b;
#X obj 152 134 f;
#X obj 190 134 + 1;
#X msg 174 106 0;
#X obj 81 102 until;
#X obj 73 162 sel 122;
#X msg 97 226 0;
#X obj 141 227 dbtorms;
#X obj 152 162 t f f;
#X obj 97 259 tabwrite dbtorms;
#X floatatom 435 103 0 0 0 0 - - -;
#X floatatom 435 186 0 0 0 0 - - -;
#X obj 435 157 tabread4 dbtorms;
#X floatatom 331 183 0 0 0 0 - - -;
#X obj 331 154 dbtorms;
#X text 35 12 bang to recalculate the table;
#X text 268 62 check accuracy of reading table against;
#X text 268 81 the "real" dbtorms object.;
#X connect 0 0 8 0;
#X connect 0 1 9 0;
#X connect 1 0 2 0;
#X connect 2 0 6 0;
#X connect 2 1 5 0;
#X connect 3 0 4 0;
#X connect 3 0 7 0;
#X connect 3 0 10 0;
#X connect 4 0 3 1;
#X connect 5 0 3 1;
#X connect 6 0 3 0;
#X connect 7 0 6 1;
#X connect 8 0 11 0;
#X connect 9 0 11 0;
#X connect 10 0 0 0;
#X connect 10 1 11 1;
#X connect 12 0 14 0;
#X connect 12 0 16 0;
#X connect 14 0 13 0;
#X connect 16 0 15 0;
#X restore 266 351 pd make-table;
#X text 257 327 here's the patch I used to make the table:;
#X obj 53 157 osc~ 440;
#X text 589 176 0;
#X text 590 77 10;
#X text 406 186 ------ 123 samples ------;
#X text 117 306 <-- attack;
#X text 116 362 <-- release;
#X msg 31 347 \; pd dsp 1 \; trigger 0;
#X obj 32 182 *~;
#X msg 30 292 \; pd dsp 1 \; trigger 1;
#X obj 32 106 adsr 100 100 200 70 300;
#X text 28 409 The table is indexed from 1 to 120 so that 1 gives a
true zero out and 120 gives 10 (a 20 dB boost.) The extra 20 dB are
for headroom.;
#X text 25 459 (There's also a "real" dbtorms~ object... but it's almost
certainly much more compute-intensive than tabread4~ \, since it has
to call a library "exp" function.);
#X text 26 518 Notice how the attack sounds different when you retrigger
than when you start from zero. This is because if you go from the steady
state you only rise 30 dB instead of 100 \, so it sounds slower...
a slur effect. If you don't want this \, you might try increasing the
amplitude of retriggered notes in comparison to isolated ones.;
#X text 34 28 For more natural sounding amplitude control \, you can
use the ADSR's output as log amplitude. In practice this is best done
using a lookup table:;
#X obj 31 211 output~;
#X text 406 631 updated for Pd version 0.37;
#X connect 0 0 15 0;
#X connect 2 0 13 0;
#X connect 6 0 13 1;
#X connect 13 0 20 0;
#X connect 13 0 20 1;
#X connect 15 0 2 0;

View file

@ -0,0 +1,81 @@
#N canvas 130 66 646 584 12;
#X obj 21 345 osc~;
#X obj 21 370 *~;
#X obj 81 350 line~;
#X obj 21 320 line~;
#X obj 163 455 osc~;
#X obj 212 483 *~;
#X obj 234 366 line~;
#X obj 163 366 line~;
#X obj 163 313 sqrt;
#X obj 163 339 sqrt;
#X obj 234 313 sqrt;
#X obj 234 339 sqrt;
#X obj 163 398 *~;
#X obj 163 428 *~;
#X obj 234 398 *~;
#X obj 234 427 *~;
#X obj 163 288 unpack;
#X obj 234 288 unpack;
#X obj 21 295 r freq;
#X obj 81 326 r amp;
#X obj 163 263 r freq;
#X obj 234 263 r amp;
#X msg 340 277 \; amp 0 5000 \;;
#X msg 340 232 \; amp 1 5000 \;;
#X msg 492 278 \; amp 0 1000 \;;
#X msg 494 232 \; amp 1 1000 \;;
#X msg 337 357 \; freq 1760 5000 \;;
#X msg 338 404 \; freq 55 5000 \;;
#X msg 493 357 \; freq 1760 1000 \;;
#X msg 496 405 \; freq 55 1000 \;;
#X text 90 15 QUARTIC AND LINEAR ENVELOPES COMPARED;
#X obj 341 464 loadbang;
#X msg 341 492 \; amp 1 \; freq 1760;
#X text 22 265 LINEAR;
#X text 168 236 QUARTIC;
#X obj 21 397 output~;
#X obj 212 509 output~;
#X text 14 123 In the quartic example \, for both the amplitude and
the frequency \, we have to take the fourth root of the target value
(which we get by taking square root twice.) Then we raise the line~
output to the fourth power by squaring twice (the *~ objects \, whose
left and right inlets are the same.) The cost is mostly that of the
four additional *~ objects.;
#X text 350 553 updated for Pd version 0.37;
#X text 19 39 This patch has two sine wave oscillators \, one with
linear envelopes \, the other with quartic ones which sound more uniform.
The message boxes sweep the amplitude and frequency up and down. You
can compare the two to see that quartic-shaped changes sound more uniform
than linear ones.;
#X connect 0 0 1 0;
#X connect 1 0 35 0;
#X connect 1 0 35 1;
#X connect 2 0 1 1;
#X connect 3 0 0 0;
#X connect 4 0 5 0;
#X connect 5 0 36 0;
#X connect 5 0 36 1;
#X connect 6 0 14 0;
#X connect 6 0 14 1;
#X connect 7 0 12 0;
#X connect 7 0 12 1;
#X connect 8 0 9 0;
#X connect 9 0 7 0;
#X connect 10 0 11 0;
#X connect 11 0 6 0;
#X connect 12 0 13 0;
#X connect 12 0 13 1;
#X connect 13 0 4 0;
#X connect 14 0 15 0;
#X connect 14 0 15 1;
#X connect 15 0 5 1;
#X connect 16 0 8 0;
#X connect 16 1 7 1;
#X connect 17 0 10 0;
#X connect 17 1 6 1;
#X connect 18 0 3 0;
#X connect 19 0 2 0;
#X connect 20 0 16 0;
#X connect 21 0 17 0;
#X connect 31 0 32 0;

View file

@ -0,0 +1,153 @@
#N canvas 222 84 686 544 12;
#X obj 48 106 r trigger;
#X obj 48 154 tabread4~ dbtorms;
#X text 144 313 <-- attack;
#X text 568 305 <-- release;
#X obj 48 208 *~;
#N canvas 151 343 812 522 make-table 0;
#X msg 82 49 bang;
#X obj 82 78 t b b;
#X obj 141 142 f;
#X obj 179 142 + 1;
#X msg 150 112 0;
#X obj 82 107 until;
#X obj 141 176 t f f;
#X floatatom 369 67 0 0 0 0 - - -;
#X floatatom 369 127 0 0 0 0 - - -;
#N canvas 0 0 450 300 graph1 0;
#X array dbtorms 123 float 1;
#A 0 0 0 1.25893e-05 1.41254e-05 1.58489e-05 1.77828e-05 1.99526e-05
2.23872e-05 2.51189e-05 2.81838e-05 3.16228e-05 3.54813e-05 3.98107e-05
4.46684e-05 5.01187e-05 5.62341e-05 6.30957e-05 7.07946e-05 7.94328e-05
8.91251e-05 1e-04 0.000112202 0.000125893 0.000141254 0.000158489 0.000177828
0.000199526 0.000223872 0.000251189 0.000281838 0.000316228 0.000354813
0.000398107 0.000446684 0.000501187 0.000562341 0.000630957 0.000707946
0.000794328 0.000891251 0.001 0.00112202 0.00125893 0.00141254 0.00158489
0.00177828 0.00199526 0.00223872 0.00251189 0.00281838 0.00316228 0.00354813
0.00398107 0.00446684 0.00501187 0.00562341 0.00630957 0.00707946 0.00794328
0.00891251 0.01 0.0112202 0.0125893 0.0141254 0.0158489 0.0177828 0.0199526
0.0223872 0.0251189 0.0281838 0.0316228 0.0354813 0.0398107 0.0446684
0.0501187 0.0562341 0.0630957 0.0707946 0.0794328 0.0891251 0.1 0.112202
0.125893 0.141254 0.158489 0.177828 0.199526 0.223872 0.251189 0.281838
0.316228 0.354813 0.398107 0.446684 0.501187 0.562341 0.630957 0.707946
0.794328 0.891251 1 1.12202 1.25893 1.41254 1.58489 1.77828 1.99526
2.23872 2.51189 2.81838 3.16228 3.54813 3.98107 4.46684 5.01187 5.62341
6.30957 7.07946 7.94328 8.91251 10 11.2202 12.5893;
#X coords 0 10 123 0 200 100 1;
#X restore 538 298 graph;
#X text 740 391 0;
#X text 742 291 10;
#X text 544 403 ------ 123 samples ------;
#N canvas 0 0 450 300 graph2 0;
#X array mtof 130 float 1;
#A 0 8.1758 8.66196 9.17702 9.72272 10.3009 10.9134 11.5623 12.2499
12.9783 13.75 14.5676 15.4339 16.3516 17.3239 18.354 19.4454 20.6017
21.8268 23.1247 24.4997 25.9565 27.5 29.1352 30.8677 32.7032 34.6478
36.7081 38.8909 41.2034 43.6535 46.2493 48.9994 51.9131 55 58.2705
61.7354 65.4064 69.2957 73.4162 77.7817 82.4069 87.3071 92.4986 97.9989
103.826 110 116.541 123.471 130.813 138.591 146.832 155.563 164.814
174.614 184.997 195.998 207.652 220 233.082 246.942 261.626 277.183
293.665 311.127 329.628 349.228 369.994 391.995 415.305 440 466.164
493.883 523.251 554.365 587.33 622.254 659.255 698.456 739.989 783.991
830.609 880 932.328 987.767 1046.5 1108.73 1174.66 1244.51 1318.51
1396.91 1479.98 1567.98 1661.22 1760 1864.66 1975.53 2093 2217.46 2349.32
2489.02 2637.02 2793.83 2959.96 3135.96 3322.44 3520 3729.31 3951.07
4186.01 4434.92 4698.64 4978.03 5274.04 5587.65 5919.91 6271.93 6644.88
7040 7458.62 7902.13 8372.02 8869.84 9397.27 9956.06 10548.1 11175.3
11839.8 12543.9 13289.8 14080;
#X coords 0 12000 130 0 200 100 1;
#X restore 537 130 graph;
#X obj 283 102 mtof;
#X floatatom 282 127 0 0 0 0 - - -;
#X text 541 237 ------ 130 samples ------;
#X text 746 223 0;
#X text 748 123 12000;
#X obj 81 203 mtof;
#X obj 72 167 sel 129;
#X obj 80 229 tabwrite mtof;
#X obj 369 99 tabread4 mtof;
#X obj 71 418 moses 2;
#X msg 55 267 bang;
#X obj 55 296 t b b;
#X obj 126 357 f;
#X obj 164 357 + 1;
#X msg 148 329 0;
#X obj 55 325 until;
#X obj 47 385 sel 122;
#X msg 71 449 0;
#X obj 115 450 dbtorms;
#X obj 126 385 t f f;
#X obj 71 482 tabwrite dbtorms;
#X text 312 40 ... and test accuracy;
#X text 23 15 patch to recalculate the mtof table;
#X text 107 267 bang to recalculate dbtorms table;
#X connect 0 0 1 0;
#X connect 1 0 5 0;
#X connect 1 1 4 0;
#X connect 2 0 3 0;
#X connect 2 0 6 0;
#X connect 2 0 20 0;
#X connect 3 0 2 1;
#X connect 4 0 2 1;
#X connect 5 0 2 0;
#X connect 6 0 19 0;
#X connect 6 1 21 1;
#X connect 7 0 14 0;
#X connect 7 0 22 0;
#X connect 14 0 15 0;
#X connect 19 0 21 0;
#X connect 20 0 5 1;
#X connect 22 0 8 0;
#X connect 23 0 31 0;
#X connect 23 1 32 0;
#X connect 24 0 25 0;
#X connect 25 0 29 0;
#X connect 25 1 28 0;
#X connect 26 0 27 0;
#X connect 26 0 30 0;
#X connect 26 0 33 0;
#X connect 27 0 26 1;
#X connect 28 0 26 1;
#X connect 29 0 26 0;
#X connect 30 0 29 1;
#X connect 31 0 34 0;
#X connect 32 0 34 0;
#X connect 33 0 23 0;
#X connect 33 1 34 1;
#X restore 451 222 pd make-table;
#X text 35 6 PITCH ENVELOPES;
#X text 125 24 For pitch envelopes \, unlike amplitude envelopes \,
discontinuities are allowed and sometimes you would rather the envelope
generator actually jump to zero when it's triggered. The "adsr" object
does this for you if you send a negative trigger instead of a positive
one:;
#X obj 280 106 r trigger2;
#X obj 280 178 tabread4~ mtof;
#X obj 280 202 osc~;
#X msg 46 299 \; pd dsp 1 \; trigger 1 \; trigger2 1;
#X text 358 297 <-- attack;
#X msg 249 293 \; pd dsp 1 \; trigger 1 \; trigger2 -1;
#X msg 472 293 \; pd dsp 1 \; trigger 0 \; trigger2 0;
#X obj 280 154 +~ 69;
#X text 358 314 restarting;
#X text 363 331 pitch env;
#X text 37 377 We have added a new table \, mtof \, for converting
audio signals from pitch to frequency. Its range is 1-127 \, so you
want to add a base pitch in before you start reading from it.;
#X text 37 443 This is an extreme use of pitch enveloping. In a real
situation you might want an envelope controlling vibrato depth or the
like instead of straight pitch.;
#X obj 48 130 adsr 100 50 200 90 1000;
#X obj 280 130 adsr 20 200 100 100 1000;
#X text 413 497 updated for Pd version 0.37;
#X obj 48 233 output~;
#X connect 0 0 20 0;
#X connect 1 0 4 0;
#X connect 4 0 23 0;
#X connect 4 0 23 1;
#X connect 8 0 21 0;
#X connect 9 0 10 0;
#X connect 10 0 4 1;
#X connect 15 0 9 0;
#X connect 20 0 1 0;
#X connect 21 0 15 0;

View file

@ -0,0 +1,148 @@
#N canvas 222 84 642 346 12;
#X floatatom 75 227 0 0 0;
#N canvas 159 26 495 266 output 0;
#X obj 338 160 t b;
#X obj 338 110 f;
#X obj 338 60 inlet;
#X text 344 29 mute;
#X obj 338 185 f;
#X msg 425 178 0;
#X msg 338 85 bang;
#X obj 338 135 moses 1;
#X obj 425 153 t b f;
#X obj 397 117 moses 1;
#X obj 83 148 dbtorms;
#X obj 397 92 r master-lvl;
#X obj 83 42 r master-lvl;
#X obj 338 210 s master-lvl;
#X obj 22 181 inlet~;
#X obj 199 41 inlet;
#X text 199 18 level;
#X obj 199 100 s master-lvl;
#X msg 96 65 set \$1;
#X obj 96 89 outlet;
#X msg 214 64 \; pd dsp 1;
#X obj 83 194 line~;
#X obj 22 212 *~;
#X obj 22 241 dac~;
#X obj 83 171 pack 0 50;
#X text 20 158 audio;
#X text 93 110 show level;
#X connect 0 0 4 0;
#X connect 1 0 7 0;
#X connect 2 0 6 0;
#X connect 4 0 13 0;
#X connect 5 0 13 0;
#X connect 6 0 1 0;
#X connect 7 0 0 0;
#X connect 7 1 8 0;
#X connect 8 0 5 0;
#X connect 9 1 4 1;
#X connect 10 0 24 0;
#X connect 11 0 1 1;
#X connect 11 0 9 0;
#X connect 12 0 10 0;
#X connect 12 0 18 0;
#X connect 14 0 22 0;
#X connect 15 0 17 0;
#X connect 15 0 20 0;
#X connect 18 0 19 0;
#X connect 21 0 22 1;
#X connect 22 0 23 0;
#X connect 22 0 23 1;
#X connect 24 0 21 0;
#X restore 46 255 pd output;
#X msg 123 227 MUTE;
#X text 166 225 <-- output amplitude;
#X obj 46 173 tabread4~ mtof;
#X obj 46 197 osc~;
#N canvas 247 30 505 439 tables 0;
#N canvas 0 0 450 300 graph1 0;
#X array dbtorms 123 float 1;
#A 0 0 0 1.25893e-05 1.41254e-05 1.58489e-05 1.77828e-05 1.99526e-05
2.23872e-05 2.51189e-05 2.81838e-05 3.16228e-05 3.54813e-05 3.98107e-05
4.46684e-05 5.01187e-05 5.62341e-05 6.30957e-05 7.07946e-05 7.94328e-05
8.91251e-05 1e-04 0.000112202 0.000125893 0.000141254 0.000158489 0.000177828
0.000199526 0.000223872 0.000251189 0.000281838 0.000316228 0.000354813
0.000398107 0.000446684 0.000501187 0.000562341 0.000630957 0.000707946
0.000794328 0.000891251 0.001 0.00112202 0.00125893 0.00141254 0.00158489
0.00177828 0.00199526 0.00223872 0.00251189 0.00281838 0.00316228 0.00354813
0.00398107 0.00446684 0.00501187 0.00562341 0.00630957 0.00707946 0.00794328
0.00891251 0.01 0.0112202 0.0125893 0.0141254 0.0158489 0.0177828 0.0199526
0.0223872 0.0251189 0.0281838 0.0316228 0.0354813 0.0398107 0.0446684
0.0501187 0.0562341 0.0630957 0.0707946 0.0794328 0.0891251 0.1 0.112202
0.125893 0.141254 0.158489 0.177828 0.199526 0.223872 0.251189 0.281838
0.316228 0.354813 0.398107 0.446684 0.501187 0.562341 0.630957 0.707946
0.794328 0.891251 1 1.12202 1.25893 1.41254 1.58489 1.77828 1.99526
2.23872 2.51189 2.81838 3.16228 3.54813 3.98107 4.46684 5.01187 5.62341
6.30957 7.07946 7.94328 8.91251 10 11.2202 12.5893;
#X coords 0 10 123 0 200 100 1;
#X restore 129 49 graph;
#X text 331 142 0;
#X text 333 42 10;
#X text 127 157 ------ 123 samples ------;
#N canvas 0 0 450 300 graph2 0;
#X array mtof 130 float 1;
#A 0 8.1758 8.66196 9.17702 9.72272 10.3009 10.9134 11.5623 12.2499
12.9783 13.75 14.5676 15.4339 16.3516 17.3239 18.354 19.4454 20.6017
21.8268 23.1247 24.4997 25.9565 27.5 29.1352 30.8677 32.7032 34.6478
36.7081 38.8909 41.2034 43.6535 46.2493 48.9994 51.9131 55 58.2705
61.7354 65.4064 69.2957 73.4162 77.7817 82.4069 87.3071 92.4986 97.9989
103.826 110 116.541 123.471 130.813 138.591 146.832 155.563 164.814
174.614 184.997 195.998 207.652 220 233.082 246.942 261.626 277.183
293.665 311.127 329.628 349.228 369.994 391.995 415.305 440 466.164
493.883 523.251 554.365 587.33 622.254 659.255 698.456 739.989 783.991
830.609 880 932.328 987.767 1046.5 1108.73 1174.66 1244.51 1318.51
1396.91 1479.98 1567.98 1661.22 1760 1864.66 1975.53 2093 2217.46 2349.32
2489.02 2637.02 2793.83 2959.96 3135.96 3322.44 3520 3729.31 3951.07
4186.01 4434.92 4698.64 4978.03 5274.04 5587.65 5919.91 6271.93 6644.88
7040 7458.62 7902.13 8372.02 8869.84 9397.27 9956.06 10548.1 11175.3
11839.8 12543.9 13289.8 14080;
#X coords 0 12000 130 0 200 100 1;
#X restore 136 226 graph;
#X text 128 336 ------ 130 samples ------;
#X text 340 318 0;
#X text 342 218 12000;
#X restore 490 225 pd tables;
#X text 35 6 PORTAMENTO;
#X obj 46 149 line~;
#X obj 46 101 r pitch;
#X msg 316 101 36;
#X msg 345 101 48;
#X msg 372 101 60;
#X msg 429 101 72;
#X msg 401 101 67;
#X msg 483 101 76;
#X msg 457 101 74;
#X obj 451 165 s pitch;
#X msg 514 101 84;
#X msg 544 101 96;
#X floatatom 143 125 0 0 0;
#X text 173 126 <-- change speed;
#X floatatom 451 139 0 0 0;
#X obj 46 125 pack 0 100;
#X obj 388 192 loadbang;
#X msg 387 214 \; pitch 72;
#X text 40 37 Portamento can be done using just line~ \, but you still
might want to sweep in pitch \, not frequency:;
#X text 363 293 updated for Pd version 0.35;
#X connect 0 0 1 1;
#X connect 1 0 0 0;
#X connect 2 0 1 2;
#X connect 4 0 5 0;
#X connect 5 0 1 0;
#X connect 8 0 4 0;
#X connect 9 0 23 0;
#X connect 10 0 22 0;
#X connect 11 0 22 0;
#X connect 12 0 22 0;
#X connect 13 0 22 0;
#X connect 14 0 22 0;
#X connect 15 0 22 0;
#X connect 16 0 22 0;
#X connect 18 0 22 0;
#X connect 19 0 22 0;
#X connect 20 0 23 1;
#X connect 22 0 17 0;
#X connect 23 0 8 0;
#X connect 24 0 25 0;

View file

@ -0,0 +1,50 @@
#N canvas 9 13 684 547 12;
#X obj 37 449 catch~ sum;
#X obj 349 274 s frequency;
#X obj 463 274 s duration;
#X floatatom 463 224 0 0 0 0 - - -;
#X obj 463 249 * 100;
#X obj 349 249 mtof;
#X floatatom 349 224 0 0 0 0 - - -;
#X text 82 7 ADDITIVE SYNTHESIS;
#X text 501 214 duration in tenths;
#X text 503 230 of a second;
#X text 387 223 pitch;
#X text 433 518 updated for Pd version 0.37;
#X obj 37 488 output~;
#X text 26 83 Partial takes as arguments an amplitude \, a relative
frequency \, a detuning frequency \, and a relative duration. You set
absolute duration and pitch using the controls below. Hit the trigger
to make sound.;
#X obj 36 164 partial 1 1 0.56 0;
#X text 27 31 This patch demonstrates using an abstraction \, "partial"
\, to make a simple additive synthesis instrument originally from Jean-Claude
Risset.;
#X obj 349 169 loadbang;
#X msg 349 192 72;
#X msg 463 194 40;
#X obj 352 322 bng 25 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
-1;
#X text 385 324 <-- click to play a note;
#X obj 352 358 s trigger;
#X obj 36 189 partial 0.67 0.9 0.56 1;
#X obj 36 214 partial 1 0.65 0.92 0;
#X obj 36 239 partial 1.8 0.55 0.92 1.7;
#X obj 36 264 partial 2.67 0.325 1.19 0;
#X obj 36 289 partial 1.67 0.35 1.7 0;
#X obj 36 314 partial 1.46 0.25 2 0;
#X obj 36 339 partial 1.33 0.2 2.74 0;
#X obj 36 364 partial 1.33 0.15 3 0;
#X obj 36 389 partial 1 0.1 3.76 0;
#X obj 36 414 partial 1.33 0.075 4.07 0;
#X connect 0 0 12 0;
#X connect 0 0 12 1;
#X connect 3 0 4 0;
#X connect 4 0 2 0;
#X connect 5 0 1 0;
#X connect 6 0 5 0;
#X connect 16 0 17 0;
#X connect 16 0 18 0;
#X connect 17 0 6 0;
#X connect 18 0 3 0;
#X connect 19 0 21 0;

View file

@ -0,0 +1,91 @@
#N canvas 251 127 807 425 12;
#N canvas 0 0 450 300 graph3 0;
#X array spectrum-tab 127 float 1;
#A 0 48.5713 48.5713 48.5713 48.2142 48.2142 48.2142 48.2142 48.2142
48.2142 48.2142 48.2142 48.2142 48.2142 48.5713 48.5713 48.9284 48.9284
48.9284 48.9284 48.9284 48.9284 48.9284 48.5713 48.5713 48.5713 48.2142
48.2142 47.4999 47.1427 46.4285 46.4285 46.0713 46.0713 46.0713 45.7142
44.9999 44.6428 43.5713 43.2142 42.8571 42.4999 41.7856 38.2143 36.7857
34.6429 31.7857 30.3572 29.6429 28.5715 27.8572 26.7858 25.3572 25.7144
23.9287 23.9287 23.5715 23.5715 23.5715 23.5715 23.2144 23.2144 23.2144
22.8573 22.8573 23.5715 23.9287 23.5715 26.0715 26.0715 48.5713 48.5713
48.5713 48.2142 47.4999 46.7856 46.7856 17.143 16.4287 16.0716 16.4287
14.643 13.5716 13.5716 40.7142 40.7142 40.7142 14.643 13.2145 12.8573
12.5002 12.5002 24.2858 29.6429 30.7143 16.4287 10.7145 11.7859 10.7145
24.2858 23.5715 17.143 13.9288 9.64309 6.78597 5.71455 5.71455 4.28599
3.92885 3.92885 3.92885 1.42887 1.42887 1.42887 1.07174 1.07174 1.07174
0.714596 0.714596 0.714596 0.714596 0.714596 1.07174 1.07174 1.07174
1.07174 0.714286 0.357143;
#X coords 0 50 126 0 300 140 1;
#X restore 496 136 graph;
#N canvas 98 16 694 474 oscbank 0;
#X obj 36 53 spectrum-partial 1;
#X obj 36 79 spectrum-partial 2;
#X obj 36 105 spectrum-partial 3;
#X obj 36 131 spectrum-partial 4;
#X obj 36 157 spectrum-partial 5;
#X obj 36 183 spectrum-partial 6;
#X obj 36 209 spectrum-partial 7;
#X obj 36 235 spectrum-partial 8;
#X obj 36 261 spectrum-partial 9;
#X obj 36 287 spectrum-partial 10;
#X obj 216 53 spectrum-partial 11;
#X obj 122 382 loadbang;
#X obj 122 407 metro 30;
#X obj 122 433 s poll-table;
#X text 107 21 This is the bank of oscillators--open one to see:;
#X text 72 345 And here we send bangs to "poll-table" needed by the
abstraction.;
#X obj 216 79 spectrum-partial 12;
#X obj 216 105 spectrum-partial 13;
#X obj 216 131 spectrum-partial 14;
#X obj 216 157 spectrum-partial 15;
#X obj 216 183 spectrum-partial 16;
#X obj 216 209 spectrum-partial 17;
#X obj 216 235 spectrum-partial 18;
#X obj 215 261 spectrum-partial 19;
#X obj 215 287 spectrum-partial 20;
#X obj 395 53 spectrum-partial 21;
#X obj 395 78 spectrum-partial 22;
#X obj 395 104 spectrum-partial 23;
#X obj 395 130 spectrum-partial 24;
#X obj 395 156 spectrum-partial 25;
#X obj 395 182 spectrum-partial 26;
#X obj 395 207 spectrum-partial 27;
#X obj 396 234 spectrum-partial 28;
#X obj 395 260 spectrum-partial 29;
#X obj 395 287 spectrum-partial 30;
#X connect 11 0 12 0;
#X connect 12 0 13 0;
#X restore 17 251 pd oscbank;
#X obj 19 321 catch~ sum-bus;
#X obj 16 153 s pitch;
#X floatatom 16 125 4 0 0 0 - - -;
#X text 43 18 DRAWABLE SPECTRA;
#X floatatom 14 183 4 0 0 0 - - -;
#X obj 14 211 s whammybar;
#N canvas 0 0 650 341 table-setup 0;
#X obj 39 227 loadbang;
#X msg 39 261 \; spectrum-tab xlabel -5 0 12 24 36 48 60 72 84 96 108
120;
#X text 82 60 comment;
#X connect 0 0 1 0;
#X restore 17 283 pd table-setup;
#X msg 596 65 \; spectrum-tab const 0;
#X text 26 42 In this array \, you can draw a spectral envelope that
will be synthesized by an oscillator bank. Each oscillator in the bank
computes its own frequency and uses it to look up amplitude from the
array.;
#X text 113 254 <-- the oscillator bank;
#X text 71 128 <-- pitch;
#X text 61 185 <-- left or right shift (normally 0);
#X text 157 318 <-- here we just collect the sum of all the partials
which are computed in "oscbank".;
#X text 662 44 CLEAR;
#X text 148 283 <-- make the number labels;
#X obj 19 358 output~;
#X text 556 389 Updated for Pd version 0.37;
#X connect 2 0 17 0;
#X connect 2 0 17 1;
#X connect 4 0 3 0;
#X connect 6 0 7 0;

View file

@ -0,0 +1,108 @@
#N canvas 124 20 599 828 12;
#X floatatom 169 520 0 0 0 0 - - -;
#X floatatom 169 446 0 0 0 0 - - -;
#X text 462 208 START;
#X floatatom 190 303 0 0 0 0 - - -;
#X obj 190 280 r incr;
#X obj 168 255 metro 50;
#X floatatom 168 373 5 0 0 0 - - -;
#X obj 168 394 s phase;
#X obj 168 350 +;
#X obj 169 469 s dropoff+;
#X obj 169 622 s interval+;
#X floatatom 169 599 0 0 0 0 - - -;
#X obj 169 543 s pitch+;
#X obj 169 423 r dropoff;
#X obj 169 497 r pitch;
#X obj 169 576 r interval;
#X obj 168 212 r metro;
#X obj 228 345 f;
#X obj 12 212 shepvoice 0;
#X floatatom 83 708 0 0 0 0 - - -;
#X obj 83 685 r rev;
#X obj 138 685 r revtime;
#X floatatom 138 708 0 0 0 0 - - -;
#X obj 228 368 mod 10000;
#X obj 168 327 f;
#X obj 73 742 rev2~;
#X obj 12 769 output~;
#X obj 168 235 tgl 15 0 empty empty empty 0 -6 0 8 -262144 -1 -1 1
1;
#X msg 446 225 \; dropoff 10 \; pitch 60 \; interval 120 \; metro 1
\; rev 84 \; revtime 87 \; incr -2 \; pd dsp 1;
#X text 27 7 SHEPARD TONE;
#X text 339 804 updated for Pd version 0.37;
#X obj 12 235 shepvoice 500;
#X obj 12 258 shepvoice 1000;
#X obj 12 281 shepvoice 1500;
#X obj 12 304 shepvoice 2000;
#X obj 12 327 shepvoice 2500;
#X obj 12 350 shepvoice 3000;
#X obj 12 373 shepvoice 3500;
#X obj 12 396 shepvoice 4000;
#X obj 12 419 shepvoice 4500;
#X obj 12 442 shepvoice 5000;
#X obj 12 465 shepvoice 5500;
#X obj 12 488 shepvoice 6000;
#X obj 12 511 shepvoice 6500;
#X obj 12 534 shepvoice 7000;
#X obj 12 557 shepvoice 7500;
#X obj 12 580 shepvoice 8000;
#X obj 12 603 shepvoice 8500;
#X obj 12 626 shepvoice 9000;
#X obj 12 649 shepvoice 9500;
#X text 25 31 This patch is a bank of 20 sinusoids \, arranged so that
their frequencies sweep upward or downward in parallel \, and their
amplitudes fade in and out so that each one is quiet when it wraps
around from one end to the other. The overall "phase" computed here
is added to each voice's relative phase (its creation argument). The
"incr" parameter controlls how fast the phase changes \, "dropoff"
the slope at which the amplitudes fall off at the ends \, "pitch" the
center pitch of the cluster \, "interval" the number of (tenths of
halftones) between successive voices \, and "rev" and "revtime" the
reverberator at bottom.;
#X connect 0 0 12 0;
#X connect 1 0 9 0;
#X connect 3 0 24 1;
#X connect 4 0 3 0;
#X connect 5 0 24 0;
#X connect 6 0 7 0;
#X connect 8 0 17 0;
#X connect 8 0 6 0;
#X connect 11 0 10 0;
#X connect 13 0 1 0;
#X connect 14 0 0 0;
#X connect 15 0 11 0;
#X connect 16 0 27 0;
#X connect 17 0 23 0;
#X connect 18 0 31 0;
#X connect 19 0 25 1;
#X connect 20 0 19 0;
#X connect 21 0 22 0;
#X connect 22 0 25 2;
#X connect 23 0 8 1;
#X connect 24 0 8 0;
#X connect 25 0 26 0;
#X connect 25 1 26 1;
#X connect 27 0 5 0;
#X connect 31 0 32 0;
#X connect 32 0 33 0;
#X connect 33 0 34 0;
#X connect 34 0 35 0;
#X connect 35 0 36 0;
#X connect 36 0 37 0;
#X connect 37 0 38 0;
#X connect 38 0 39 0;
#X connect 39 0 40 0;
#X connect 40 0 41 0;
#X connect 41 0 42 0;
#X connect 42 0 43 0;
#X connect 43 0 44 0;
#X connect 44 0 45 0;
#X connect 45 0 46 0;
#X connect 46 0 47 0;
#X connect 47 0 48 0;
#X connect 48 0 49 0;
#X connect 49 0 25 0;
#X connect 49 0 26 0;
#X connect 49 0 26 1;

View file

@ -0,0 +1,263 @@
#N canvas 12 0 1074 786 12;
#X msg 257 7 bang;
#X obj 257 35 delay 5;
#X text 497 269 end of note;
#X obj 363 35 r note;
#N canvas 459 46 678 451 samples 0;
#N canvas 0 0 450 300 graph1 0;
#X array sample1 176403 float 0;
#X coords 0 1.02 176403 -1.02 200 130 1;
#X restore 262 41 graph;
#X text 264 376 ------ 4 seconds ------;
#N canvas 0 0 450 300 graph1 0;
#X array sample2 176403 float 0;
#X coords 0 1.02 176403 -1.02 200 130 1;
#X restore 262 226 graph;
#X restore 33 277 pd samples;
#N canvas 21 287 947 410 recorder 0;
#X obj 318 43 inlet;
#X obj 272 196 adc~ 1;
#X obj 272 224 hip~ 5;
#X obj 341 254 line~;
#X obj 272 253 *~;
#X msg 341 226 1;
#X obj 400 191 del 3990;
#X msg 377 226 0 10;
#X obj 272 304 tabwrite~ sample1;
#X obj 124 110 makefilename sample%1;
#X msg 124 139 set \$1 \, bang;
#X msg 446 162 stop;
#X msg 400 162 bang;
#X obj 557 182 loadbang;
#X obj 660 137 openpanel;
#X msg 660 109 bang;
#X text 702 108 <-- browse for samples;
#X text 628 233 v-- re-read original samples;
#X obj 318 72 route record stop reload browse;
#X obj 557 319 soundfiler;
#X msg 557 261 read ../sound/bell.aiff sample1 \, read ../sound/voice2.wav
sample2;
#X msg 660 164 read \$1 sample1;
#X obj 660 191 soundfiler;
#X connect 0 0 18 0;
#X connect 1 0 2 0;
#X connect 2 0 4 0;
#X connect 3 0 4 1;
#X connect 4 0 8 0;
#X connect 5 0 3 0;
#X connect 6 0 7 0;
#X connect 7 0 3 0;
#X connect 9 0 10 0;
#X connect 10 0 8 0;
#X connect 11 0 6 0;
#X connect 12 0 6 0;
#X connect 13 0 20 0;
#X connect 14 0 21 0;
#X connect 15 0 14 0;
#X connect 18 0 9 0;
#X connect 18 0 12 0;
#X connect 18 0 5 0;
#X connect 18 1 7 0;
#X connect 18 1 11 0;
#X connect 18 2 20 0;
#X connect 18 3 15 0;
#X connect 20 0 19 0;
#X connect 21 0 22 0;
#X restore 33 443 pd recorder;
#X msg 33 305 record 1;
#X msg 33 360 stop;
#N canvas 359 226 666 626 playback 0;
#X obj 20 45 line~;
#X obj 39 237 line~;
#X obj 20 268 *~;
#X obj 39 208 r cutoff;
#X obj 20 16 r phase;
#X obj 20 592 outlet~;
#X obj 20 564 hip~ 5;
#X obj 32 79 r sample-number;
#X obj 32 108 makefilename sample%d;
#X msg 32 136 set \$1;
#X obj 20 177 tabread4~ sample1;
#X obj 38 304 r envelope;
#X obj 38 362 dbtorms;
#X obj 38 333 unpack;
#X obj 38 391 sqrt;
#X obj 38 420 sqrt;
#X obj 38 448 line~;
#X obj 20 535 *~;
#X obj 38 477 *~;
#X obj 38 506 *~;
#X text 90 17 messages to the phase generating line~;
#X text 171 80 setting the sample number.;
#X text 221 109 compute the name;
#X text 93 137 and send a "set" message to the tabread4~.;
#X text 99 236 line~ for de-clicking;
#X text 139 307 The envelope generator. Rather than sending our message
straight to the line~ we unpack it in order to fool with the amplitude
field.;
#X text 109 363 convert amplitude to linear units.;
#X text 104 392 take the fourth root. This because we want to raies
the line~'s output to the 4th power afterward. This is an inexpensive
way to give the rise and decay a more natural sounding evolution than
just a straight line.;
#X text 77 480 square the output twice to get the fourth power.;
#X connect 0 0 10 0;
#X connect 1 0 2 1;
#X connect 2 0 17 0;
#X connect 3 0 1 0;
#X connect 4 0 0 0;
#X connect 6 0 5 0;
#X connect 7 0 8 0;
#X connect 8 0 9 0;
#X connect 9 0 10 0;
#X connect 10 0 2 0;
#X connect 11 0 13 0;
#X connect 12 0 14 0;
#X connect 13 0 12 0;
#X connect 13 1 16 1;
#X connect 14 0 15 0;
#X connect 15 0 16 0;
#X connect 16 0 18 0;
#X connect 16 0 18 1;
#X connect 17 0 6 0;
#X connect 18 0 19 0;
#X connect 18 0 19 1;
#X connect 19 0 17 1;
#X restore 33 480 pd playback;
#X msg 33 332 record 2;
#X text 645 25 ARGUMENTS FOR NOTES:;
#X text 666 53 pitch in halftones;
#X text 666 77 amplitude (dB);
#X text 666 125 sample number;
#X text 666 101 duration (msec);
#X text 666 149 start location (msec);
#X text 666 173 rise time (msec);
#X text 666 197 decay time (msec);
#X obj 363 62 unpack 0 0 0 0 0 0 0;
#X text 50 6 CHOCOLATE SAMPLER;
#X obj 521 168 f;
#X obj 456 142 f;
#X obj 387 142 f;
#X obj 350 142 f;
#X obj 318 142 f;
#X obj 224 142 f;
#X obj 224 169 mtof;
#X obj 224 197 / 261.62;
#X obj 224 224 * 4.41e+08;
#X obj 224 252 +;
#X obj 489 142 delay;
#X obj 318 312 pack 0 0 0 0 0;
#X obj 257 62 t b b b;
#X text 498 346 This starts the note \, sending to "receives" in the
playback subptach. The new receive "envelope" is an amplitude control
in parallel with the cutoff control. The "sample-number" switches the
tabread4~ between tables.;
#X msg 156 44 \; pd dsp 1 \; cutoff 0 5;
#X obj 387 197 + 1;
#X msg 556 467 60 100 10000 1 0 0 0;
#X obj 556 737 s note;
#X msg 521 196 \; envelope 0 \$1;
#X msg 675 691 62;
#X msg 710 691 64;
#X msg 641 691 60;
#X msg 612 691 55;
#X msg 743 691 72;
#X msg 580 691 48;
#X msg 642 734 60.5;
#X msg 556 494 60 90 10000 1 0 0 0;
#X msg 556 522 60 100 10000 2 0 0 0;
#X msg 556 550 60 100 10000 1 3000 0 0;
#X obj 387 169 * 44.1;
#X msg 556 605 60 100 100 1 0 0 0;
#X msg 556 632 60 100 100 1 0 0 1000;
#X msg 556 577 60 100 10000 1 0 1000 0;
#X msg 318 340 \; envelope 0 \, \$1 \$2 \; phase \$3 \, \$4 1e+07 \;
sample-number \$5 \; cutoff 1 5 \;;
#X text 117 305 <-- record;
#X msg 33 388 reload;
#X msg 33 415 browse;
#X text 7 109 transposition works;
#X text 7 133 by altering the phase;
#X text 7 181 The mtof and / 261;
#X text 7 205 calculate speed change;
#X text 7 229 considering 60 as unity.;
#X text 24 43 as before we;
#X text 15 64 mute and wait;
#X text 7 157 target ($4 below right.);
#X text 450 303 combine amplitude \, rise time \, start phase \, end
phase \, and sample number in one message;
#X text 764 467 straight playback;
#X text 764 493 change amplitude;
#X text 767 521 change sample number;
#X text 769 550 change start location;
#X text 768 576 change rise time;
#X text 768 609 change duration;
#X text 769 633 ... and decay time;
#X text 692 736 microtones OK too.;
#X text 580 667 If you omit values they stay unchanged;
#X text 552 426 Here are buttons to demonstrate the effect of varying
the parameters one by one.;
#X obj 34 511 output~;
#X text 13 596 This patch take the same principle as the earlier "one-shot
sampler" \, but allows you to parametrize sample playback. Since we
must wait 5 msec before starting the playback \, we store all the parameters
in "f" objects \, and recall them to construct the new note. Transposition
is done by altering the amount to play back in the (artificial) ten
thousand seconds (1e+07). The playback segment can be altered to start
in the middle of the sample instead of the beginning \, and you can
change the duration and rise and decay times.;
#X text 823 763 updated for Pd version 0.37;
#X connect 0 0 1 0;
#X connect 0 0 34 0;
#X connect 1 0 32 0;
#X connect 3 0 18 0;
#X connect 6 0 5 0;
#X connect 7 0 5 0;
#X connect 8 0 76 0;
#X connect 8 0 76 1;
#X connect 9 0 5 0;
#X connect 18 0 25 1;
#X connect 18 0 0 0;
#X connect 18 1 24 1;
#X connect 18 2 30 1;
#X connect 18 3 23 1;
#X connect 18 4 22 1;
#X connect 18 5 21 1;
#X connect 18 6 20 1;
#X connect 20 0 38 0;
#X connect 21 0 31 1;
#X connect 22 0 49 0;
#X connect 23 0 31 4;
#X connect 24 0 31 0;
#X connect 25 0 26 0;
#X connect 26 0 27 0;
#X connect 27 0 28 0;
#X connect 28 0 29 0;
#X connect 29 0 31 3;
#X connect 30 0 20 0;
#X connect 31 0 53 0;
#X connect 32 0 24 0;
#X connect 32 1 25 0;
#X connect 32 2 21 0;
#X connect 32 2 22 0;
#X connect 32 2 23 0;
#X connect 32 2 30 0;
#X connect 35 0 31 2;
#X connect 35 0 29 1;
#X connect 36 0 37 0;
#X connect 39 0 37 0;
#X connect 40 0 37 0;
#X connect 41 0 37 0;
#X connect 42 0 37 0;
#X connect 43 0 37 0;
#X connect 44 0 37 0;
#X connect 45 0 37 0;
#X connect 46 0 37 0;
#X connect 47 0 37 0;
#X connect 48 0 37 0;
#X connect 49 0 35 0;
#X connect 50 0 37 0;
#X connect 51 0 37 0;
#X connect 52 0 37 0;
#X connect 55 0 5 0;
#X connect 56 0 5 0;

View file

@ -0,0 +1,175 @@
#N canvas 91 72 1119 674 12;
#N canvas 0 0 600 392 samples 0;
#N canvas 0 0 450 300 graph1 0;
#X array sample1 176403 float 0;
#X coords 0 1.02 176403 -1.02 200 130 1;
#X restore 262 41 graph;
#X text 282 385 ------ 4 seconds ------;
#N canvas 0 0 450 300 graph1 0;
#X array sample2 176403 float 0;
#X coords 0 1.02 176403 -1.02 200 130 1;
#X restore 262 226 graph;
#X restore 931 97 pd samples;
#N canvas 52 219 967 340 recorder 0;
#X obj 220 21 inlet;
#X obj 174 174 adc~ 1;
#X obj 174 202 hip~ 5;
#X obj 243 232 line~;
#X obj 174 231 *~;
#X msg 243 204 1;
#X obj 302 169 del 3990;
#X msg 279 204 0 10;
#X obj 174 282 tabwrite~ sample1;
#X msg 26 117 set \$1 \, bang;
#X msg 348 140 stop;
#X msg 302 140 bang;
#X obj 220 50 route record stop reload browse;
#X obj 411 158 loadbang;
#X obj 514 113 openpanel;
#X msg 514 85 bang;
#X text 556 84 <-- browse for samples;
#X text 482 209 v-- re-read original samples;
#X obj 411 295 soundfiler;
#X msg 411 237 read ../sound/bell.aiff sample1 \, read ../sound/voice2.wav
sample2;
#X msg 514 140 read \$1 sample1;
#X obj 514 167 soundfiler;
#X obj 26 88 makefilename sample%d;
#X connect 0 0 12 0;
#X connect 1 0 2 0;
#X connect 2 0 4 0;
#X connect 3 0 4 1;
#X connect 4 0 8 0;
#X connect 5 0 3 0;
#X connect 6 0 7 0;
#X connect 7 0 3 0;
#X connect 9 0 8 0;
#X connect 10 0 6 0;
#X connect 11 0 6 0;
#X connect 12 0 11 0;
#X connect 12 0 5 0;
#X connect 12 0 22 0;
#X connect 12 1 7 0;
#X connect 12 1 10 0;
#X connect 12 2 19 0;
#X connect 12 3 15 0;
#X connect 13 0 19 0;
#X connect 14 0 20 0;
#X connect 15 0 14 0;
#X connect 19 0 18 0;
#X connect 20 0 21 0;
#X connect 22 0 9 0;
#X restore 931 284 pd recorder;
#X msg 931 146 record 1;
#X msg 931 202 stop;
#X msg 931 174 record 2;
#X text 19 49 ARGUMENTS FOR NOTES:;
#X text 19 71 pitch in halftones;
#X text 19 95 amplitude (dB);
#X text 19 143 sample number;
#X text 19 119 duration (msec);
#X text 19 167 start location (msec);
#X text 19 191 rise time (msec);
#X text 19 215 decay time (msec);
#X msg 931 229 reload;
#X msg 931 257 browse;
#X text 47 10 POLYPHONIC SAMPLER;
#X obj 547 329 sampvoice;
#X obj 631 17 r note;
#X obj 631 44 unpack 0 0 0 0 0 0 0;
#X obj 604 76 t b f;
#X obj 544 109 f;
#X obj 580 109 + 1;
#X obj 552 146 mod 1e+06;
#X obj 544 175 makenote 64;
#X obj 544 203 poly 8 1;
#X obj 544 230 stripnote;
#X obj 617 272 pack 0 0 0 0 0 0 0 0;
#X obj 617 300 route 1 2 3 4 5 6 7 8;
#X text 929 124 record \, etc.;
#X text 335 203 allocate sampler voice;
#X text 361 228 drop note off again;
#X obj 704 516 qlist;
#X obj 870 520 r comment;
#X text 732 445 sailors to untie him...;
#X text 735 395 Lashed to the mast of his boat \, Ulysses;
#X text 735 420 hears beautiful singing. He begs his;
#X text 7 263 Here we take the previous patch and make it polyphonic
\, with 8 voices. The single voice which we had before has been made
into an abstraction \, "sampvoice.pd" \, which we instantiate in 8
copies. Earlier we used sends and receives to pass messages to "cutoff"
\, etc \, but here if we did that the copies of sampvoice would be
sending messages to each other \, so we combine the control and the
audio computation in the sampvoice abstraction without using send and
receive. Click on one to see how.;
#X text 8 413 The "poly" object essentially repeats pitch and velocity
pairs to its output \, but also sending a voice number from its left
outlet. To use it \, we unpack the 7 parameters \, calculate the voice
number \, repack the message as 8 parameters with voice number first
\, and use "route" to send it to one of the 8 voices.;
#X text 8 515 There's some bother because poly expects to track note
on and note off messages separately as they would come from a MIDI
keyboard. So we assign each note a unique fake "pitch" \, use makenote
to generate the note-off messages \, and run poly on the resulting
stream. We then discard both pitch and velocity (using the velocity
only to strip note-offs) and rebuild the original message adding the
voice number we just scored.;
#X text 854 639 updated for Pd version 0.33;
#X msg 704 486 read qlist-sampler.txt \, rewind \, tempo 1 \, bang
;
#X obj 548 551 output~;
#X text 249 108 increment mod 1e+06 to make tag;
#X text 276 127 (acts like a MIDI pitch to;
#X text 277 146 identify the note to "poly");
#X text 258 175 supply delayed note-off message;
#X obj 547 522 sampvoice;
#X obj 547 494 sampvoice;
#X obj 547 467 sampvoice;
#X obj 547 439 sampvoice;
#X obj 547 412 sampvoice;
#X obj 547 384 sampvoice;
#X obj 547 356 sampvoice;
#X connect 2 0 1 0;
#X connect 3 0 1 0;
#X connect 4 0 1 0;
#X connect 13 0 1 0;
#X connect 14 0 1 0;
#X connect 16 0 52 0;
#X connect 17 0 18 0;
#X connect 18 0 19 0;
#X connect 18 1 26 2;
#X connect 18 2 23 2;
#X connect 18 2 26 3;
#X connect 18 3 26 4;
#X connect 18 4 26 5;
#X connect 18 5 26 6;
#X connect 18 6 26 7;
#X connect 19 0 20 0;
#X connect 19 1 26 1;
#X connect 20 0 21 0;
#X connect 20 0 23 0;
#X connect 21 0 22 0;
#X connect 22 0 20 1;
#X connect 23 0 24 0;
#X connect 23 1 24 1;
#X connect 24 0 25 0;
#X connect 24 2 25 1;
#X connect 25 0 26 0;
#X connect 26 0 27 0;
#X connect 27 0 16 1;
#X connect 27 1 52 1;
#X connect 27 2 51 1;
#X connect 27 3 50 1;
#X connect 27 4 49 1;
#X connect 27 5 48 1;
#X connect 27 6 47 1;
#X connect 27 7 46 1;
#X connect 40 0 31 0;
#X connect 46 0 41 0;
#X connect 46 0 41 1;
#X connect 47 0 46 0;
#X connect 48 0 47 0;
#X connect 49 0 48 0;
#X connect 50 0 49 0;
#X connect 51 0 50 0;
#X connect 52 0 51 0;

View file

@ -0,0 +1,203 @@
#N canvas 104 78 1119 674 12;
#N canvas 0 0 600 392 samples 0;
#N canvas 0 0 450 300 graph1 0;
#X array sample1 176403 float 0;
#X coords 0 1.02 176403 -1.02 200 130 1;
#X restore 262 41 graph;
#X text 282 385 ------ 4 seconds ------;
#N canvas 0 0 450 300 graph1 0;
#X array sample2 176403 float 0;
#X coords 0 1.02 176403 -1.02 200 130 1;
#X restore 262 226 graph;
#X restore 785 563 pd samples;
#N canvas 52 219 971 512 recorder 0;
#X obj 174 304 adc~ 1;
#X obj 174 332 hip~ 5;
#X obj 243 362 line~;
#X obj 174 361 *~;
#X msg 243 334 1;
#X obj 302 299 del 3990;
#X msg 279 334 0 10;
#X obj 174 412 tabwrite~ sample1;
#X msg 26 247 set \$1 \, bang;
#X msg 348 270 stop;
#X msg 302 270 bang;
#X obj 220 180 route record stop reload browse;
#X obj 411 288 loadbang;
#X obj 514 243 openpanel;
#X msg 514 215 bang;
#X text 556 214 <-- browse for samples;
#X text 482 339 v-- re-read original samples;
#X obj 411 425 soundfiler;
#X msg 411 367 read ../sound/bell.aiff sample1 \, read ../sound/voice2.wav
sample2;
#X msg 514 270 read \$1 sample1;
#X obj 514 297 soundfiler;
#X msg 220 41 record 1;
#X msg 220 97 stop;
#X msg 220 69 record 2;
#X msg 220 124 reload;
#X msg 220 152 browse;
#X text 218 19 record \, etc.;
#X obj 26 218 makefilename sample%d;
#X connect 0 0 1 0;
#X connect 1 0 3 0;
#X connect 2 0 3 1;
#X connect 3 0 7 0;
#X connect 4 0 2 0;
#X connect 5 0 6 0;
#X connect 6 0 2 0;
#X connect 8 0 7 0;
#X connect 9 0 5 0;
#X connect 10 0 5 0;
#X connect 11 0 10 0;
#X connect 11 0 4 0;
#X connect 11 0 27 0;
#X connect 11 1 6 0;
#X connect 11 1 9 0;
#X connect 11 2 18 0;
#X connect 11 3 14 0;
#X connect 12 0 18 0;
#X connect 13 0 19 0;
#X connect 14 0 13 0;
#X connect 18 0 17 0;
#X connect 19 0 20 0;
#X connect 21 0 11 0;
#X connect 22 0 11 0;
#X connect 23 0 11 0;
#X connect 24 0 11 0;
#X connect 25 0 11 0;
#X connect 27 0 8 0;
#X restore 785 586 pd recorder;
#X text 782 458 sample number;
#X obj 619 96 unpack 0 0 0 0 0 0 0;
#X obj 563 124 poly 8 1;
#X obj 654 270 route 1 2 3 4 5 6 7 8;
#X obj 558 487 output~;
#X obj 563 149 swap;
#X obj 563 196 route 0;
#X obj 563 173 pack;
#X obj 605 221 unpack;
#X obj 557 289 sampvoice2;
#X obj 563 221 pack;
#X text 933 411 amplitude;
#X text 932 435 pitch;
#X text 851 344 ARGUMENTS FOR:;
#X text 784 386 pitch;
#X text 784 410 amplitude;
#X text 784 434 duration;
#X text 13 4 POLY SAMPLER \, VERSION 2 FOR SEPARATE NOTE-ON/OFF MESSAGES
;
#X obj 619 71 r onoff;
#X text 932 368 ON/OFF TRANSITIONS:;
#X text 785 367 ENTIRE NOTES:;
#X text 932 390 tag;
#X text 782 485 sample onset;
#X text 782 511 rise time;
#X text 783 535 decay time;
#X text 929 460 (same other 4);
#X obj 836 159 f;
#X obj 872 159 + 1;
#X obj 836 185 mod 1e+06;
#X obj 654 245 pack 0 0 0 0 0 0 0;
#X obj 918 74 r note;
#X obj 918 100 unpack 0 0 0 0 0 0 0;
#X text 860 641 updated for Pd version 0.37;
#X obj 895 127 t b f;
#X obj 936 237 pack 0 0 0 0 0 0 0;
#X obj 889 285 s onoff;
#X obj 870 230 pipe;
#X obj 870 253 pack;
#X msg 103 528 \; onoff 1 90 60 1 0 0 100;
#X msg 323 528 \; onoff 1 0;
#X msg 104 570 \; onoff 2 90 48 1 0 0 100;
#X msg 324 570 \; onoff 2 0;
#X msg 104 627 \; note 51 90 1000 1 0 0 100;
#X obj 557 312 sampvoice2;
#X obj 557 336 sampvoice2;
#X obj 557 360 sampvoice2;
#X obj 557 383 sampvoice2;
#X obj 557 407 sampvoice2;
#X obj 557 430 sampvoice2;
#X obj 557 454 sampvoice2;
#X text 14 35 Here is a variation on the polyphonic sampler \, which
can take separate messages to start and stop notes (so that you can
attach it to a MIDI keyboard \, for example.) "Note" messages act as
before \, but in an intermediate step they are split onto note-on and
note-off messages \, sent to "onoff". You can alternatively send messages
straight to onoff if you don't know the duration in advance.;
#X text 12 150 Messages to "onoff" require a tag \, which is a number
shared between the note-on and note-off message so that we can track
down the voice to turn it off. If you're using MIDI input \, you can
just re-use the pitch as a tag.;
#X text 102 508 separate messages for not on and off:;
#X text 101 608 single messages to do both as before:;
#X text 10 221 Messages to "onoff" whose amplitude is zero are note-off
messages (the other parameters of note-off messages are ignored). The
"sampvoice2" abstraction is a modification of "sampvoice" which looks
at the amplitude field to decide whether to begin or end a note.;
#X text 10 301 To convert "note" messages to pairs of "onoff" messages
\, first a counter generates a tag. The the "pipe" object delays a
copy of the tag \, which the following "pack" object converts into
a note-off message (a pair of numbers \, the tag and a zero.);
#X text 9 382 Under "r onoff" \, the poly object allocates a voice
number \, putting it out paired with velocity. After swapping the two
and packing them into a single message \, the amplitude is checked
against zero by the "route 0" object \; if zero \, the "pack" confects
a 2-argument message (voice number and zero). Otherwise \, the "unpack"
retrieves the nonzero amplitude for a note-on message \, to which we
add all the other parameters and route to the appropriate voice.;
#X connect 3 0 4 0;
#X connect 3 1 31 1;
#X connect 3 1 4 1;
#X connect 3 2 31 2;
#X connect 3 3 31 3;
#X connect 3 4 31 4;
#X connect 3 5 31 5;
#X connect 3 6 31 6;
#X connect 4 0 7 0;
#X connect 4 2 7 1;
#X connect 5 0 11 1;
#X connect 5 1 45 1;
#X connect 5 2 46 1;
#X connect 5 3 47 1;
#X connect 5 4 48 1;
#X connect 5 5 49 1;
#X connect 5 6 50 1;
#X connect 5 7 51 1;
#X connect 7 0 9 0;
#X connect 7 1 9 1;
#X connect 8 0 12 0;
#X connect 8 1 10 0;
#X connect 9 0 8 0;
#X connect 10 1 31 0;
#X connect 11 0 45 0;
#X connect 12 0 5 0;
#X connect 20 0 3 0;
#X connect 28 0 29 0;
#X connect 29 0 30 0;
#X connect 30 0 28 1;
#X connect 30 0 38 0;
#X connect 30 0 36 0;
#X connect 31 0 5 0;
#X connect 32 0 33 0;
#X connect 33 0 35 0;
#X connect 33 1 36 1;
#X connect 33 2 38 1;
#X connect 33 3 36 3;
#X connect 33 4 36 4;
#X connect 33 5 36 5;
#X connect 33 6 36 6;
#X connect 35 0 28 0;
#X connect 35 1 36 2;
#X connect 36 0 37 0;
#X connect 38 0 39 0;
#X connect 39 0 37 0;
#X connect 45 0 46 0;
#X connect 46 0 47 0;
#X connect 47 0 48 0;
#X connect 48 0 49 0;
#X connect 49 0 50 0;
#X connect 50 0 51 0;
#X connect 51 0 6 0;
#X connect 51 0 6 1;

View file

@ -0,0 +1,47 @@
#N canvas 233 179 667 449 12;
#X obj 16 182 osc-voice amp1 pit1;
#X obj 16 206 osc-voice amp2 pit2;
#X obj 16 230 osc-voice amp3 pit3;
#X obj 16 254 osc-voice amp4 pit4;
#X obj 16 278 osc-voice amp5 pit5;
#X obj 16 302 osc-voice amp6 pit6;
#X obj 16 326 osc-voice amp7 pit7;
#X obj 16 350 osc-voice amp8 pit8;
#X obj 464 343 qlist;
#X msg 394 185 stop;
#X msg 524 300 read qlist.txt;
#X obj 524 255 loadbang;
#X text 258 164 start;
#X text 395 161 stop;
#X text 534 279 reread file;
#X msg 467 199 rewind;
#X msg 535 199 next;
#X msg 251 212 tempo 100 \, bang;
#X msg 250 188 tempo 1 \, bang;
#X text 82 11 USING QLIST TO SEQUENCE AN OSCILLATOR BANK;
#X text 479 178 single step;
#X obj 532 392 r #;
#X text 28 49 Here is an eight voice additive synthesis patch controlled
by a qlist. Open a text editor on the file \, "qlist.txt" \, to see
how the oscillators' amplitudes and frequencies are specified. The
abstraction \, "osc-voice" \, shows an effective way to make patches
react to qlists but also to mousing.;
#X text 234 391 this is where qlist comments go:;
#X obj 16 380 output~;
#X text 394 423 updatged for Pd version 0.39;
#X connect 0 0 1 0;
#X connect 1 0 2 0;
#X connect 2 0 3 0;
#X connect 3 0 4 0;
#X connect 4 0 5 0;
#X connect 5 0 6 0;
#X connect 6 0 7 0;
#X connect 7 0 24 0;
#X connect 7 0 24 1;
#X connect 9 0 8 0;
#X connect 10 0 8 0;
#X connect 11 0 10 0;
#X connect 15 0 8 0;
#X connect 16 0 8 0;
#X connect 17 0 8 0;
#X connect 18 0 8 0;

View file

@ -0,0 +1,104 @@
#N canvas 80 10 709 653 12;
#X obj 28 258 r trigger;
#X obj 28 454 *~;
#X obj 28 482 *~;
#X floatatom 63 304 3 0 100 0 - - -;
#X msg 460 493 \; trigger 0;
#X obj 28 281 unpack;
#X floatatom 28 304 1 0 100 0 - - -;
#X obj 27 533 +~ 0.3;
#X obj 27 559 cos~;
#X obj 27 507 osc~;
#X obj 63 323 mtof;
#X obj 63 345 sqrt;
#X obj 63 367 sqrt;
#X text 572 461 <-- octave up;
#X msg 460 416 \; trigger 1 60;
#X msg 460 453 \; trigger 1 72;
#X text 550 494 <-- release;
#X text 556 512 is optional;
#X obj 28 424 *~;
#X obj 237 404 +~ 1;
#N canvas 0 0 450 300 graph1 0;
#X array array62 131 float 1;
#A 0 0.970031 1 0.970031 0.881921 0.740952 0.555571 0.336891 0.0980184
-0.146729 -0.382682 -0.595698 -0.773009 -0.88 -0.9 -0.92 -0.92 -0.85773
-0.707109 -0.514106 -0.290288 -0.0490716 0.195086 0.427551 0.63439
0.803205 0.86 0.88 0.88 0.88 0.84 0.82 0.471402 0.242986 6.63397e-06
-0.242974 -0.471391 -0.671554 -0.831465 -0.941541 -0.995184 -0.989178
-0.923883 -0.803213 -0.68 -0.42 -0.24 0.1 0.4 0.6 0.7071 0.857723 0.956937
0.998795 0.980787 0.903994 0.773018 0.595708 0.382694 0.146742 -0.0980052
-0.336878 -0.55556 -0.7 -0.8 -0.88 -0.88 -0.88 -0.84 -0.82 -0.555582
-0.336903 -0.0980316 0.146716 0.38267 0.595687 0.773001 0.903983 0.980782
0.998796 0.956945 0.857737 0.707119 0.514117 0.290301 0.0490849 -0.195073
-0.427539 -0.63438 -0.803197 -0.923873 -0.989174 -0.995187 -0.94155
-0.83148 -0.671573 -0.471414 -0.242999 -1.99019e-05 0.242961 0.471379
0.671544 0.831458 0.88 0.9 0.9 0.88 0.803221 0.63441 0.08 -0.14 -0.28
-0.48 -0.64 -0.72 -0.857717 -0.956933 -0.998794 -0.98079 -0.904 -0.773026
-0.595719 -0.382706 -0.146755 0.097992 0.336866 0.555549 0.740934 0.881909
0.970025 1 0.970038;
#X coords 0 1 130 -1 200 100 1;
#X restore 246 508 graph;
#X obj 237 356 tabosc4~ array62;
#X floatatom 237 312 3 0 0 0 - - -;
#X obj 237 333 / 6;
#X obj 237 380 *~;
#X floatatom 391 333 3 0 0 0 - - -;
#X text 236 438 since we'll multiply \,;
#X text 235 453 vibrato output should;
#X text 235 470 be centered at 1 \, not 0;
#X text 273 384 multiply by vib depth;
#X obj 391 361 / 6923;
#X text 62 425 apply vibrato;
#X text 66 453 fourth;
#X text 69 469 power;
#X text 97 537 waveform;
#X text 96 517 simple;
#X text 457 354 4/(exp(log(2)/1200)-1);
#X text 461 335 conversion factor is;
#X text 384 295 vibrato depth;
#X text 383 312 in cents;
#X text 228 274 vibrato speed;
#X text 227 291 in Hertz;
#X obj 28 392 adsr 0 100 200 100 300;
#X obj 26 587 output~;
#X text 88 9 USING ADSRS FOR PORTAMENTO AND ADDING VIBRATO TOO;
#X text 43 30 Portamento can be treated as a special case of an ADSR
envelope \, with 100 percent sustain. Vibrato is properly computed
in units of pitch \, but it's also possible to do the job without having
to convert from pitch to frequency units at the audio rate. To do this
we just raise the "pitch" to the fourth power \, so that it acts pseudo-exponentially.
Rather than add vibrato to the ADSR output \, we multiply a signal
which controls relative frequency. The relative frequency change is
one plus an oscillator.;
#X text 439 626 updated for Pd version 0.39;
#X text 45 185 The table below holds 6 cycles of vibrato with small
variations to get a not-exactly-repeating vibrato. We thus have to
divide vibrato frequency by six. You can just use a sine or triangle
wave if you prefer.;
#X text 573 426 <-- middle C;
#X connect 0 0 5 0;
#X connect 1 0 2 0;
#X connect 1 0 2 1;
#X connect 2 0 9 0;
#X connect 3 0 10 0;
#X connect 5 0 6 0;
#X connect 5 1 3 0;
#X connect 6 0 42 0;
#X connect 7 0 8 0;
#X connect 8 0 43 0;
#X connect 8 0 43 1;
#X connect 9 0 7 0;
#X connect 10 0 11 0;
#X connect 11 0 12 0;
#X connect 12 0 42 1;
#X connect 18 0 1 0;
#X connect 18 0 1 1;
#X connect 19 0 18 1;
#X connect 21 0 24 0;
#X connect 22 0 23 0;
#X connect 23 0 21 0;
#X connect 24 0 19 0;
#X connect 25 0 30 0;
#X connect 30 0 24 1;
#X connect 42 0 18 0;

View file

@ -0,0 +1,179 @@
#N canvas 190 29 773 821 12;
#N canvas 0 0 450 300 graph1 0;
#X array E01-signal 882 float 0;
#X coords 0 5 882 -5 200 130 1;
#X restore 531 41 graph;
#X obj 40 304 hip~ 5;
#N canvas 0 0 450 300 graph1 0;
#X array E01-spectrum 128 float 0;
#X coords 0 4300 127 -40 257 130 1;
#X restore 485 226 graph;
#X text 134 243 <-- click to graph;
#N canvas 45 83 558 569 fft 0;
#X obj 19 62 inlet~;
#X obj 85 214 inlet;
#X obj 19 92 rfft~;
#X obj 19 125 *~;
#X obj 50 125 *~;
#X obj 19 155 sqrt~;
#X obj 85 248 tabwrite~ E01-spectrum;
#X obj 332 109 block~ 4096 1;
#X obj 19 181 biquad~ 0 0 0 0 1;
#X text 83 93 Fourier series;
#X text 88 146 magnitude;
#X text 86 131 calculate;
#X text 21 3 This subpatch computes the spectrum of the incoming signal
with a (rectangular windowed) FFT. FFTs aren't properly introduced
until much later.;
#X text 83 62 signal to analyze;
#X text 182 166 delay two samples;
#X text 181 182 for better graphing;
#X obj 90 425 samplerate~;
#X obj 90 402 bng 18 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
-1;
#X floatatom 90 472 5 0 0 0 - - -;
#X obj 90 448 / 256;
#X obj 90 378 loadbang;
#X floatatom 90 541 5 0 0 0 - - -;
#X obj 98 494 s fundamental;
#X obj 90 517 ftom;
#X text 146 540 <-just out of curiosity \, here's the pitch;
#X text 14 319 At load time \, calculate a good choice of fundamental
frequency for showing spectra: the 16th bin in a 4096-point spectrum
\, so SR*16/4096 or SR/256.;
#X text 135 216 "bang" into this inlet to graph it;
#X connect 0 0 2 0;
#X connect 1 0 6 0;
#X connect 2 0 3 0;
#X connect 2 0 3 1;
#X connect 2 1 4 0;
#X connect 2 1 4 1;
#X connect 3 0 5 0;
#X connect 4 0 5 0;
#X connect 5 0 8 0;
#X connect 8 0 6 0;
#X connect 16 0 19 0;
#X connect 17 0 16 0;
#X connect 18 0 22 0;
#X connect 18 0 23 0;
#X connect 19 0 18 0;
#X connect 20 0 17 0;
#X connect 23 0 21 0;
#X restore 51 279 pd fft;
#X text 531 173 ---- 0.02 seconds ----;
#X obj 111 244 bng 18 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
-1;
#X obj 40 332 output~;
#X obj 111 279 tabwrite~ E01-signal;
#X text 523 800 updated for Pd version 0.37;
#X text 516 359 1;
#X text 550 359 2;
#X text 582 359 3;
#X text 614 359 4;
#X text 647 359 5;
#X text 677 359 6;
#X text 708 359 7;
#X text 484 359 0;
#X text 520 378 -- partial number --;
#X text 733 97 0;
#X obj 42 42 r fundamental;
#X obj 42 111 osc~;
#X obj 63 136 tgl 18 0 empty empty empty 0 -6 0 8 -262144 -1 -1 0 1
;
#X obj 41 161 *~;
#X obj 85 111 osc~;
#X obj 106 136 tgl 18 0 empty empty empty 0 -6 0 8 -262144 -1 -1 0
1;
#X obj 84 161 *~;
#X obj 128 111 osc~;
#X obj 149 136 tgl 18 0 empty empty empty 0 -6 0 8 -262144 -1 -1 0
1;
#X obj 127 161 *~;
#X obj 128 88 * 2;
#X obj 171 111 osc~;
#X obj 192 136 tgl 18 0 empty empty empty 0 -6 0 8 -262144 -1 -1 0
1;
#X obj 170 161 *~;
#X obj 214 111 osc~;
#X obj 235 136 tgl 18 0 empty empty empty 0 -6 0 8 -262144 -1 -1 0
1;
#X obj 213 161 *~;
#X obj 257 111 osc~;
#X obj 278 136 tgl 18 0 empty empty empty 0 -6 0 8 -262144 -1 -1 0
1;
#X obj 256 161 *~;
#X obj 42 88 * 0;
#X obj 85 88 * 1;
#X obj 171 88 * 3;
#X obj 214 88 * 4;
#X obj 257 88 * 5;
#X text 303 136 <-- On/Off;
#X text 337 152 for each;
#X text 339 168 partial;
#X text 595 11 WAVEFORM;
#X text 578 204 SPECTRUM;
#X text 25 415 The next series of patches demonstrates various kinds
of modulation: AM \, waveshaping \, and FM. We will need a tool for
graphing spectra which is introduced here. In this patch the signal
to be analyzed is a simple sum of up to six partials of a fundamental
frequency (which is 172 Hz \, close to F below middle C \, if your
sample rate happens to be 44100 Hz. The fundamental is chosen to agree
with the analysis patch ("pd FFT") and is computed within it).;
#X text 25 546 The partials are numbered 0 through 5 \, where 0 means
DC \, or zero frequency \, 1 is the fundamental \, and so on. The toggle
switches allow you to turn them on and off separately. You have to
press the "click to graph" button to update the two graphs.;
#X text 745 344 0;
#X text 743 223 1;
#X text 744 282 0.5;
#X text 26 631 The upper graph is just the (time domain) waveform \,
about four periods long. The lower graph is the magnitude spectrum.
Its peaks are the magnitudes of the partials. Note that a DC signal
of amplitude one is considered a partial of magnitude 1 \, but the
other partials \, which have peak amplitudes of 1 (and RMS 0.707) \,
have peak magnitudes of only 0.5 in the spectrum.;
#X obj 41 222 *~ 1;
#X text 733 37 5;
#X text 734 157 -5;
#X text 81 221 sum;
#X text 96 5 GRAPHING SPECTRA OF AUDIO SIGNALS;
#X text 24 742 Here we're introducing a new feature: multiple signals
connected to a signal inlet (as in the "*~ 1") are added. This is the
most convenient way to sum the six partials.;
#X connect 1 0 7 0;
#X connect 1 0 7 1;
#X connect 6 0 4 1;
#X connect 6 0 8 0;
#X connect 20 0 40 0;
#X connect 20 0 41 0;
#X connect 20 0 30 0;
#X connect 20 0 42 0;
#X connect 20 0 43 0;
#X connect 20 0 44 0;
#X connect 21 0 23 0;
#X connect 22 0 23 1;
#X connect 23 0 56 0;
#X connect 24 0 26 0;
#X connect 25 0 26 1;
#X connect 26 0 56 0;
#X connect 27 0 29 0;
#X connect 28 0 29 1;
#X connect 29 0 56 0;
#X connect 30 0 27 0;
#X connect 31 0 33 0;
#X connect 32 0 33 1;
#X connect 33 0 56 0;
#X connect 34 0 36 0;
#X connect 35 0 36 1;
#X connect 36 0 56 0;
#X connect 37 0 39 0;
#X connect 38 0 39 1;
#X connect 39 0 56 0;
#X connect 40 0 21 0;
#X connect 41 0 24 0;
#X connect 42 0 31 0;
#X connect 43 0 34 0;
#X connect 44 0 37 0;
#X connect 56 0 4 0;
#X connect 56 0 1 0;
#X connect 56 0 8 0;

View file

@ -0,0 +1,197 @@
#N canvas 269 43 755 746 12;
#N canvas 0 0 450 300 graph1 0;
#X array E02-signal 882 float 0;
#X coords 0 5 882 -5 200 130 1;
#X restore 501 66 graph;
#X obj 15 370 hip~ 5;
#N canvas 0 0 450 300 graph1 0;
#X array E02-spectrum 128 float 0;
#X coords 0 4300 127 -40 257 130 1;
#X restore 455 251 graph;
#N canvas 45 83 558 569 fft 0;
#X obj 19 61 inlet~;
#X obj 95 214 inlet;
#X obj 29 92 rfft~;
#X obj 29 125 *~;
#X obj 60 125 *~;
#X obj 29 155 sqrt~;
#X obj 332 109 block~ 4096 1;
#X obj 29 181 biquad~ 0 0 0 0 1;
#X text 93 93 Fourier series;
#X text 98 146 magnitude;
#X text 96 131 calculate;
#X text 21 3 This subpatch computes the spectrum of the incoming signal
with a (rectangular windowed) FFT. FFTs aren't properly introduced
until much later.;
#X text 83 61 signal to analyze;
#X text 192 166 delay two samples;
#X text 191 182 for better graphing;
#X obj 16 425 samplerate~;
#X obj 16 402 bng 18 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
-1;
#X floatatom 16 472 5 0 0 0 - - -;
#X obj 16 448 / 256;
#X obj 16 378 loadbang;
#X floatatom 16 541 5 0 0 0 - - -;
#X obj 24 494 s fundamental;
#X obj 16 517 ftom;
#X text 14 319 At load time \, calculate a good choice of fundamental
frequency for showing spectra: the 16th bin in a 4096-point spectrum
\, so SR*16/4096 or SR/256.;
#X text 145 216 "bang" into this inlet to graph it;
#X floatatom 191 480 5 0 0 0 - - -;
#X obj 191 456 / 4096;
#X text 187 425 One bin is SR/4096:;
#X text 72 540 <-just out of curiosity \, here's the fundamental pitch
;
#X obj 191 502 s freq-step;
#X obj 95 248 tabwrite~ E02-spectrum;
#X obj 20 281 tabwrite~ E02-signal;
#X connect 0 0 2 0;
#X connect 0 0 31 0;
#X connect 1 0 30 0;
#X connect 1 0 31 0;
#X connect 2 0 3 0;
#X connect 2 0 3 1;
#X connect 2 1 4 0;
#X connect 2 1 4 1;
#X connect 3 0 5 0;
#X connect 4 0 5 0;
#X connect 5 0 7 0;
#X connect 7 0 30 0;
#X connect 15 0 18 0;
#X connect 15 0 26 0;
#X connect 16 0 15 0;
#X connect 17 0 21 0;
#X connect 17 0 22 0;
#X connect 18 0 17 0;
#X connect 19 0 16 0;
#X connect 22 0 20 0;
#X connect 25 0 29 0;
#X connect 26 0 25 0;
#X restore 23 343 pd fft;
#X text 501 198 ---- 0.02 seconds ----;
#X obj 84 344 bng 18 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
-1;
#X obj 15 398 output~;
#X text 501 720 updated for Pd version 0.37;
#X text 486 384 1;
#X text 520 384 2;
#X text 552 384 3;
#X text 584 384 4;
#X text 617 384 5;
#X text 647 384 6;
#X text 678 384 7;
#X text 454 384 0;
#X text 490 403 -- partial number --;
#X text 703 120 0;
#X obj 18 32 r fundamental;
#X obj 18 94 osc~;
#X obj 39 119 tgl 18 0 empty empty empty 0 -6 0 8 -262144 -1 -1 1 1
;
#X obj 17 144 *~;
#X obj 61 94 osc~;
#X obj 82 119 tgl 18 0 empty empty empty 0 -6 0 8 -262144 -1 -1 1 1
;
#X obj 60 144 *~;
#X obj 104 94 osc~;
#X obj 125 119 tgl 18 0 empty empty empty 0 -6 0 8 -262144 -1 -1 1
1;
#X obj 103 144 *~;
#X obj 104 71 * 2;
#X obj 147 94 osc~;
#X obj 168 119 tgl 18 0 empty empty empty 0 -6 0 8 -262144 -1 -1 0
1;
#X obj 146 144 *~;
#X obj 190 94 osc~;
#X obj 211 119 tgl 18 0 empty empty empty 0 -6 0 8 -262144 -1 -1 0
1;
#X obj 189 144 *~;
#X obj 233 94 osc~;
#X obj 254 119 tgl 18 0 empty empty empty 0 -6 0 8 -262144 -1 -1 0
1;
#X obj 232 144 *~;
#X obj 18 71 * 0;
#X obj 61 71 * 1;
#X obj 147 71 * 3;
#X obj 190 71 * 4;
#X obj 233 71 * 5;
#X text 282 118 <-- On/Off;
#X text 565 46 WAVEFORM;
#X text 548 229 SPECTRUM;
#X text 715 367 0;
#X text 713 246 1;
#X text 714 305 0.5;
#X text 703 60 5;
#X text 704 180 -5;
#X obj 16 239 *~;
#X text 300 102 partials;
#X obj 154 270 osc~;
#X floatatom 154 210 3 0 200 0 - - -;
#X obj 154 239 *;
#X obj 187 239 r freq-step;
#X text 226 177 modulation;
#X text 222 192 frequency in;
#X text 185 209 <-- "steps" of f/16;
#X text 97 -1 RING MODULATION: multiplying a complex tone by a sinusoid
;
#X obj 84 299 tgl 18 0 empty empty empty 0 -6 0 8 -262144 -1 -1 0 1
;
#X text 107 343 <-- graph once;
#X obj 84 321 metro 500;
#X text 107 298 <-- graph repeatedly;
#X text 35 463 Now we ring modulate the signal by multiplying it by
another sinusoid. The modulation frequency is controlled in steps of
f/16 where "f" is the fundamental frequency \, giving roughly 11 Hz.
per step. Note that if the modulation frequency is set to zero we can't
predict the overall amplitude because it depends on what phase the
modulation oscillator happened to have at that moment.;
#X text 32 579 If you choose a multiple of the fundamental as a modulation
frequency (16 \, 32 \, 48 \, 64 \, ... "steps") the result is again
periodic at the original frequency. If you select a half-integer times
the fundamental (8 \, 24 \, 40 \, ... steps) the pitch drops by an
octave and you get only odd partials. For most other settings you'll
get an inharmonic complex of tones. These are sometimes heard as separate
pitches and other times they seem to fuse into a single timbre with
indeterminate pitch.;
#X connect 1 0 6 0;
#X connect 1 0 6 1;
#X connect 5 0 3 1;
#X connect 18 0 38 0;
#X connect 18 0 39 0;
#X connect 18 0 28 0;
#X connect 18 0 40 0;
#X connect 18 0 41 0;
#X connect 18 0 42 0;
#X connect 19 0 21 0;
#X connect 20 0 21 1;
#X connect 21 0 51 0;
#X connect 22 0 24 0;
#X connect 23 0 24 1;
#X connect 24 0 51 0;
#X connect 25 0 27 0;
#X connect 26 0 27 1;
#X connect 27 0 51 0;
#X connect 28 0 25 0;
#X connect 29 0 31 0;
#X connect 30 0 31 1;
#X connect 31 0 51 0;
#X connect 32 0 34 0;
#X connect 33 0 34 1;
#X connect 34 0 51 0;
#X connect 35 0 37 0;
#X connect 36 0 37 1;
#X connect 37 0 51 0;
#X connect 38 0 19 0;
#X connect 39 0 22 0;
#X connect 40 0 29 0;
#X connect 41 0 32 0;
#X connect 42 0 35 0;
#X connect 51 0 3 0;
#X connect 51 0 1 0;
#X connect 53 0 51 1;
#X connect 54 0 55 0;
#X connect 55 0 53 0;
#X connect 56 0 55 1;
#X connect 61 0 63 0;
#X connect 63 0 5 0;

View file

@ -0,0 +1,140 @@
#N canvas 51 52 793 665 12;
#X obj 477 135 loadbang;
#X obj 31 289 hip~ 5;
#X obj 477 53 adc~ 1;
#X obj 477 190 soundfiler;
#X obj 32 322 output~;
#X text 544 646 updated for Pd version 0.37;
#X obj 478 100 tabwrite~ E03-table;
#X msg 477 162 read ../sound/voice.wav E03-table;
#X obj 117 64 fiddle~ 2048;
#X obj 118 95 unpack;
#X obj 111 199 osc~;
#X obj 118 119 moses 1;
#X obj 77 199 *~;
#X obj 145 147 mtof;
#X obj 145 170 *;
#X msg 194 125 0.5;
#X floatatom 194 154 3 0 0 0 - - -;
#X msg 232 125 15;
#N canvas 0 0 446 202 (subpatch) 0;
#X obj 261 30 tgl 15 0 empty empty empty 0 -6 0 8 -262144 -1 -1 1 1
;
#X obj 100 20 inlet~;
#X obj 99 87 *~;
#X obj 98 159 outlet~;
#X text 381 181 corner;
#X connect 0 0 2 1;
#X connect 1 0 2 0;
#X connect 2 0 3 0;
#X coords 0 0 100 100 40 18 1;
#X restore 78 248 pd;
#N canvas 0 0 446 202 (subpatch) 0;
#X obj 261 30 tgl 15 0 empty empty empty 0 -6 0 8 -262144 -1 -1 1 1
;
#X obj 100 20 inlet~;
#X obj 99 87 *~;
#X obj 98 159 outlet~;
#X text 381 181 corner;
#X connect 0 0 2 1;
#X connect 1 0 2 0;
#X connect 2 0 3 0;
#X coords 0 0 100 100 40 18 1;
#X restore 32 248 pd;
#X obj 78 222 *~ 2;
#X obj 194 100 loadbang;
#N canvas 414 195 613 302 looper 0;
#N canvas 0 0 450 300 (subpatch) 0;
#X array E03-table 44103 float 0;
#X coords 0 1.02 44103 -1.02 200 130 1;
#X restore 349 22 graph;
#X text 347 161 ---- 44103 samples ----;
#X obj 35 77 +~ 1;
#X obj 35 25 phasor~ 1;
#X obj 35 50 *~ 44100;
#X obj 35 106 tabread4~ E03-table;
#X obj 35 132 outlet~;
#X text 46 238 one-second sample reader loop. You can replace this
with an adc~ if you want to go live.;
#X connect 2 0 5 0;
#X connect 3 0 4 0;
#X connect 4 0 2 0;
#X connect 5 0 6 0;
#X restore 118 18 pd looper;
#X text 561 141 re-read original sample;
#X obj 489 77 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
-1;
#N canvas 300 203 758 306 delay 0;
#X obj 15 222 outlet~;
#X obj 14 21 inlet~;
#X obj 15 102 loadbang;
#X obj 14 49 delwrite~ E03-del 40;
#X obj 15 195 delread~ E03-del;
#X obj 15 152 expr 1000*1024/$f1;
#X obj 15 128 samplerate~;
#X text 208 47 write to delay line which has enough memory to hold
40 msec;
#X text 125 128 get sample rate at load time;
#X text 185 152 divide 1024 by sample rate to give time in seconds
\; multiply by 1000 to convert to milliseconds.;
#X text 168 197 read from the delay line at the calculater delay;
#X text 317 268 1024-sample delay;
#X connect 1 0 3 0;
#X connect 2 0 6 0;
#X connect 4 0 0 0;
#X connect 5 0 4 0;
#X connect 6 0 5 0;
#X restore 31 71 pd delay;
#X text 242 4 OCTAVE DIVIDING VIA RING MODULATION;
#X text 508 75 <-- record a sample;
#X text 265 125 <-- choose an effect;
#X text 157 231 on/off for original;
#X text 128 247 <--and processed sounds;
#X text 196 274 This patch demonstrates using ring modulation to alias
a sound down one octave. The ring modulation itself ("osc~" and multiplier)
is easy. (We step it up by a factor of 2 to balance the original better.)
;
#X text 198 340 Harder is getting the fundamental frequency of the
original sound. We do this with the complicated "fiddle~" object \,
which puts out a stream of analysis data for an incoming signal. The
"2048" argument specifies the analysis window size. The analysis is
most closely aligned with what the sound was doing at the middle of
the window \, i.e. \, 1024 samples ago. The "pd delay" window delays
the signal itself 1024 samples so it will be as tightly synchronized
with the analysis data as possible. (If you're doing this on a real-time
input \, you might drop the delay and settle for less perfect synchronization.)
;
#X text 198 512 About fiddle~ \, suffice it to say that the third outlet
contains (pitch \, amplitude) pairs. We unpack the pitch and strip
out any zeros (when fiddle~ fails to find a pitch it outputs zero but
we'd rather stick with the most recent good one). This is converted
from MIDI to Hertz \, and multiplied by 1/2 to control the modulation
oscillator. (You can also try large-ish integers which leave the pitch
intact but introduce funny formants.);
#X msg 406 237 read ../../saucisse.wav E03-table;
#X obj 25 16 adc~ 1;
#X connect 0 0 7 0;
#X connect 1 0 4 0;
#X connect 1 0 4 1;
#X connect 2 0 6 0;
#X connect 7 0 3 0;
#X connect 8 2 9 0;
#X connect 9 0 11 0;
#X connect 10 0 12 1;
#X connect 11 1 13 0;
#X connect 12 0 20 0;
#X connect 13 0 14 0;
#X connect 14 0 10 0;
#X connect 15 0 16 0;
#X connect 16 0 14 1;
#X connect 17 0 16 0;
#X connect 18 0 1 0;
#X connect 19 0 1 0;
#X connect 20 0 18 0;
#X connect 21 0 15 0;
#X connect 22 0 25 0;
#X connect 22 0 8 0;
#X connect 24 0 6 0;
#X connect 25 0 19 0;
#X connect 25 0 12 0;
#X connect 34 0 3 0;

View file

@ -0,0 +1,45 @@
#N canvas 263 112 637 523 12;
#X obj 19 128 +~;
#X obj 18 209 output~;
#X text 141 3 NONLINEAR DISTORTION AND DIFFERENCE TONES;
#X obj 154 171 / 100;
#X floatatom 154 151 5 0 500 0 - - -;
#X obj 18 181 clip~ -1 1;
#X floatatom 42 81 5 0 0 0 - - -;
#X obj 18 155 *~;
#X obj 42 35 loadbang;
#X msg 154 127 50;
#X obj 154 103 loadbang;
#X text 385 494 updated for Pd version 0.37;
#X text 94 80 <-- frequency of second tone;
#X text 209 151 <-- before clipping;
#X text 234 134 amplitude of sum;
#X obj 18 9 osc~ 300;
#X msg 42 58 225;
#X text 99 226 This patch demonstrates how nonlinear distortion (also
known as "waveshaping") can create difference tones from a pair of
sinusoids. The sinusoids are initially tuned to 225 and 300 Hz \, a
musical fourth \, and have amplitude of 50 percent (0.5) so that the
sum is always less than 1 in absolute value. At these settings the
"clip~" object passes its input through unchanged.;
#X text 100 344 If the amplitude rises above 50 percent \, the clip~
object starts altering the signal nonlinearly \, and the result is
no longer as if the two sinusoids had been processed separately. Instead
\, they "intermodulate" \, finding a common subharmonic if one exists.
At 300 and 225 Hz \, the subharmonic is at 75 \, two octaves below
the upper tone and a twelveth below the lower one. Change the frequency
of the second tone and you will hear a variety of effects.;
#X obj 42 103 osc~;
#X connect 0 0 7 0;
#X connect 3 0 7 1;
#X connect 4 0 3 0;
#X connect 5 0 1 0;
#X connect 5 0 1 1;
#X connect 6 0 19 0;
#X connect 7 0 5 0;
#X connect 8 0 16 0;
#X connect 9 0 4 0;
#X connect 10 0 9 0;
#X connect 15 0 0 0;
#X connect 16 0 6 0;
#X connect 19 0 0 1;

View file

@ -0,0 +1,257 @@
#N canvas 224 60 657 571 12;
#X obj 23 269 output~;
#X obj 45 74 / 100;
#X floatatom 45 54 5 0 100 0 - - -;
#X obj 23 144 *~;
#X text 403 539 updated for Pd version 0.37;
#X obj 22 29 osc~ 220;
#X obj 45 97 pack 0 50;
#X obj 45 121 line~;
#X text 97 54 <-- index in;
#X text 117 68 hundredths;
#X obj 23 169 *~ 128;
#X obj 23 217 tabread4~ E05-tab;
#N canvas 0 0 450 300 graph1 0;
#X array E05-tab 259 float 1;
#A 0 -1.20148 -1 -0.810724 -0.63326 -0.467216 -0.31221 -0.167866 -0.0338144
0.0903053 0.204849 0.310166 0.406597 0.494477 0.574137 0.645895 0.71007
0.766969 0.816895 0.860145 0.897008 0.927771 0.952708 0.972093 0.98619
0.995261 0.999557 0.999329 0.994816 0.986257 0.97388 0.957912 0.938572
0.916074 0.890625 0.86243 0.831684 0.798582 0.76331 0.726049 0.686977
0.646266 0.60408 0.560583 0.515931 0.470276 0.423765 0.37654 0.328738
0.280493 0.231934 0.183183 0.13436 0.0855808 0.0369554 -0.01141 -0.0594134
-0.106956 -0.153946 -0.200292 -0.245909 -0.290715 -0.334633 -0.377589
-0.419512 -0.460337 -0.5 -0.538443 -0.57561 -0.611449 -0.645912 -0.678953
-0.710532 -0.740609 -0.76915 -0.796122 -0.821497 -0.845248 -0.867354
-0.887794 -0.906551 -0.923612 -0.938965 -0.952601 -0.964516 -0.974704
-0.983167 -0.989906 -0.994925 -0.99823 -0.999832 -0.999741 -0.997972
-0.994539 -0.98946 -0.982757 -0.97445 -0.964564 -0.953125 -0.94016
-0.925699 -0.909772 -0.892414 -0.873658 -0.85354 -0.832098 -0.809372
-0.785401 -0.760228 -0.733895 -0.706446 -0.677928 -0.648387 -0.61787
-0.586426 -0.554105 -0.520957 -0.487033 -0.452386 -0.417069 -0.381135
-0.344638 -0.307632 -0.270174 -0.232319 -0.194122 -0.15564 -0.11693
-0.0780487 -0.039053 0 0.039053 0.0780487 0.11693 0.15564 0.194122
0.232319 0.270174 0.307632 0.344638 0.381135 0.417069 0.452386 0.487033
0.520957 0.554105 0.586426 0.61787 0.648387 0.677928 0.706446 0.733895
0.760228 0.785401 0.809372 0.832098 0.85354 0.873658 0.892414 0.909772
0.925699 0.94016 0.953125 0.964564 0.97445 0.982757 0.98946 0.994539
0.997972 0.999741 0.999832 0.99823 0.994925 0.989906 0.983167 0.974704
0.964516 0.952601 0.938965 0.923612 0.906551 0.887794 0.867354 0.845248
0.821497 0.796122 0.76915 0.740609 0.710532 0.678953 0.645912 0.611449
0.57561 0.538443 0.5 0.460337 0.419512 0.377589 0.334633 0.290715 0.245909
0.200292 0.153946 0.106956 0.0594134 0.01141 -0.0369554 -0.0855808
-0.13436 -0.183183 -0.231934 -0.280493 -0.328738 -0.37654 -0.423765
-0.470276 -0.515931 -0.560583 -0.60408 -0.646266 -0.686977 -0.726049
-0.76331 -0.798582 -0.831684 -0.86243 -0.890625 -0.916074 -0.938572
-0.957912 -0.97388 -0.986257 -0.994816 -0.999329 -0.999557 -0.995261
-0.98619 -0.972093 -0.952708 -0.927771 -0.897008 -0.860145 -0.816895
-0.766969 -0.71007 -0.645895 -0.574137 -0.494477 -0.406597 -0.310166
-0.204849 -0.0903053 0.0338144 0.167866 0.31221 0.467216 0.63326 0.810724
1 1.20148;
#X coords 0 1 258 -1 200 140 1;
#X restore 262 46 graph;
#X text 497 28 subpatch to;
#N canvas 113 0 849 700 make-table 0;
#X obj 141 304 t b b;
#X obj 213 329 f;
#X obj 251 329 + 1;
#X msg 235 306 0;
#X obj 141 327 until;
#X obj 213 359 t f f;
#X obj 114 436 tabwrite E05-tab;
#X obj 140 355 sel 258;
#X text 203 172 normalize from -1 to 1;
#X obj 141 285 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
-1;
#X obj 88 386 expr ($f1-129)/128;
#X obj 141 262 inlet;
#X obj 171 534 t b b;
#X obj 243 559 f;
#X obj 281 559 + 1;
#X msg 265 536 0;
#X obj 171 557 until;
#X obj 243 589 t f f;
#X obj 144 666 tabwrite E05-tab;
#X obj 170 585 sel 258;
#X obj 171 515 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
-1;
#X obj 118 616 expr ($f1-129)/128;
#X obj 171 492 inlet;
#X obj 444 228 t b b;
#X obj 516 253 f;
#X obj 554 253 + 1;
#X msg 538 230 0;
#X obj 444 251 until;
#X obj 516 283 t f f;
#X obj 417 360 tabwrite E05-tab;
#X obj 443 279 sel 258;
#X obj 391 334 expr 16*$f1*$f1*$f1*$f1*$f1-20*$f1*$f1*$f1+5*$f1;
#X obj 444 209 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
-1;
#X obj 391 310 expr ($f1-129)/128;
#X obj 444 186 inlet;
#X obj 504 476 t b b;
#X obj 576 501 f;
#X obj 614 501 + 1;
#X msg 598 478 0;
#X obj 504 499 until;
#X obj 576 531 t f f;
#X obj 477 624 tabwrite E05-tab;
#X obj 503 527 sel 258;
#X obj 504 457 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
-1;
#X obj 448 558 expr ($f1-129)/128;
#X obj 504 434 inlet;
#X obj 88 410 expr 4*$f1*$f1*$f1-3*$f1;
#X obj 118 640 expr 8*$f1*$f1*$f1*$f1-8*$f1*$f1+1;
#X obj 448 582 expr 32*$f1*$f1*$f1*$f1*$f1*$f1 -48*$f1*$f1*$f1*$f1+18*$f1*$f1-1
;
#X text 641 622 6th C.P. and basta.;
#X obj 83 92 t b b;
#X obj 155 117 f;
#X obj 193 117 + 1;
#X msg 177 94 0;
#X obj 83 115 until;
#X obj 155 147 t f f;
#X obj 56 224 tabwrite E05-tab;
#X obj 82 143 sel 258;
#X obj 83 73 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
-1;
#X obj 30 174 expr ($f1-129)/128;
#X obj 83 50 inlet;
#X obj 30 198 expr 2*$f1*$f1-1;
#X text 203 198 2nd C.P.;
#X text 309 410 3rd C.P.;
#X text 331 660 4th C.P.;
#X text 613 357 5th C.P.;
#X text 259 51 This patch computes Chebychev polynomials and stores
them in a wavetable for use later.;
#X connect 0 0 4 0;
#X connect 0 1 3 0;
#X connect 1 0 2 0;
#X connect 1 0 5 0;
#X connect 1 0 7 0;
#X connect 2 0 1 1;
#X connect 3 0 1 1;
#X connect 4 0 1 0;
#X connect 5 0 10 0;
#X connect 5 1 6 1;
#X connect 7 0 4 1;
#X connect 9 0 0 0;
#X connect 10 0 46 0;
#X connect 11 0 9 0;
#X connect 12 0 16 0;
#X connect 12 1 15 0;
#X connect 13 0 14 0;
#X connect 13 0 17 0;
#X connect 13 0 19 0;
#X connect 14 0 13 1;
#X connect 15 0 13 1;
#X connect 16 0 13 0;
#X connect 17 0 21 0;
#X connect 17 1 18 1;
#X connect 19 0 16 1;
#X connect 20 0 12 0;
#X connect 21 0 47 0;
#X connect 22 0 20 0;
#X connect 23 0 27 0;
#X connect 23 1 26 0;
#X connect 24 0 25 0;
#X connect 24 0 28 0;
#X connect 24 0 30 0;
#X connect 25 0 24 1;
#X connect 26 0 24 1;
#X connect 27 0 24 0;
#X connect 28 0 33 0;
#X connect 28 1 29 1;
#X connect 30 0 27 1;
#X connect 31 0 29 0;
#X connect 32 0 23 0;
#X connect 33 0 31 0;
#X connect 34 0 32 0;
#X connect 35 0 39 0;
#X connect 35 1 38 0;
#X connect 36 0 37 0;
#X connect 36 0 40 0;
#X connect 36 0 42 0;
#X connect 37 0 36 1;
#X connect 38 0 36 1;
#X connect 39 0 36 0;
#X connect 40 0 44 0;
#X connect 40 1 41 1;
#X connect 42 0 39 1;
#X connect 43 0 35 0;
#X connect 44 0 48 0;
#X connect 45 0 43 0;
#X connect 46 0 6 0;
#X connect 47 0 18 0;
#X connect 48 0 41 0;
#X connect 50 0 54 0;
#X connect 50 1 53 0;
#X connect 51 0 52 0;
#X connect 51 0 55 0;
#X connect 51 0 57 0;
#X connect 52 0 51 1;
#X connect 53 0 51 1;
#X connect 54 0 51 0;
#X connect 55 0 59 0;
#X connect 55 1 56 1;
#X connect 57 0 54 1;
#X connect 58 0 50 0;
#X connect 59 0 61 0;
#X connect 60 0 58 0;
#X connect 61 0 56 0;
#X restore 489 146 pd make-table;
#X obj 489 126 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
-1;
#X obj 517 126 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
-1;
#X obj 545 126 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
-1;
#X obj 573 126 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
-1;
#X obj 600 126 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
-1;
#X text 497 45 calculate;
#X text 495 64 Chebychev;
#X text 496 83 polynomials;
#X text 490 107 2;
#X text 517 107 3;
#X text 546 107 4;
#X text 572 108 5;
#X text 601 107 6;
#X text 134 2 waveshaping with Chebychev polynomials;
#X obj 23 193 +~ 129;
#X obj 23 242 hip~ 5;
#X text 107 256 This patch demonstrates using Chebychev polynomials
(of the first kind) to generate pure harmonics using waveshaping. The
pure harmonic only comes out when the index is one (top of the scale).
Smaller indices will give various mixes of harmonics. The table initially
holds the fifth Chebychev polynomial \, so you can get the fifth harmonic.
;
#X text 106 355 There is an audible "rolling" sound as the index changes
for the higher degree polynomials \, because the amplitudes of the
lower partials can rise and fall several times apiece as the index
rises from zero to one.;
#X text 105 422 Indices greater than one will try to read values outside
the table (which would be clipped appropriately). Anyway \, the polynomials
increase rapidly in value outside the interval from -1 to 1 that we
are using here.;
#X text 106 491 When you get tired of Chebychef polynomials you can
draw your own functions by hand and/or try other formulas.;
#X connect 1 0 6 0;
#X connect 2 0 1 0;
#X connect 3 0 10 0;
#X connect 5 0 3 0;
#X connect 6 0 7 0;
#X connect 7 0 3 1;
#X connect 10 0 29 0;
#X connect 11 0 30 0;
#X connect 15 0 14 0;
#X connect 16 0 14 1;
#X connect 17 0 14 2;
#X connect 18 0 14 3;
#X connect 19 0 14 4;
#X connect 29 0 11 0;
#X connect 30 0 0 0;
#X connect 30 0 0 1;

View file

@ -0,0 +1,335 @@
#N canvas 85 89 754 729 12;
#N canvas 0 0 450 300 (subpatch) 0;
#X array E06-signal 882 float 0;
#X coords 0 1.02 882 -1.02 200 130 1;
#X restore 509 46 graph;
#X obj 14 265 hip~ 5;
#N canvas 0 0 450 300 (subpatch) 0;
#X array E06-spectrum 128 float 0;
#X coords 0 4300 127 -40 257 130 1;
#X restore 463 222 graph;
#N canvas 45 83 558 569 fft 0;
#X obj 19 61 inlet~;
#X obj 208 212 inlet;
#X obj 29 92 rfft~;
#X obj 29 125 *~;
#X obj 60 125 *~;
#X obj 29 155 sqrt~;
#X obj 332 109 block~ 4096 1;
#X obj 29 181 biquad~ 0 0 0 0 1;
#X text 93 93 Fourier series;
#X text 98 146 magnitude;
#X text 96 131 calculate;
#X text 21 3 This subpatch computes the spectrum of the incoming signal
with a (rectangular windowed) FFT. FFTs aren't properly introduced
until much later.;
#X text 83 61 signal to analyze;
#X text 193 164 delay two samples;
#X text 191 182 for better graphing;
#X obj 16 425 samplerate~;
#X obj 16 402 bng 18 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
-1;
#X floatatom 16 472 5 0 0 0 - - -;
#X obj 16 448 / 256;
#X obj 16 378 loadbang;
#X floatatom 16 541 5 0 0 0 - - -;
#X obj 24 494 s fundamental;
#X obj 16 517 ftom;
#X text 14 319 At load time \, calculate a good choice of fundamental
frequency for showing spectra: the 16th bin in a 4096-point spectrum
\, so SR*16/4096 or SR/256.;
#X floatatom 191 480 5 0 0 0 - - -;
#X obj 191 456 / 4096;
#X text 187 425 One bin is SR/4096:;
#X obj 191 502 s freq-step;
#X obj 208 295 tabwrite~ E06-spectrum;
#X obj 19 295 tabwrite~ E06-signal;
#X text 71 540 <-fundamental pitch;
#X obj 220 257 metro 500;
#X obj 220 234 inlet;
#X text 273 232 toggle to graph repeatedly;
#X text 262 212 bang to graph once;
#X connect 0 0 2 0;
#X connect 0 0 29 0;
#X connect 1 0 28 0;
#X connect 1 0 29 0;
#X connect 2 0 3 0;
#X connect 2 0 3 1;
#X connect 2 1 4 0;
#X connect 2 1 4 1;
#X connect 3 0 5 0;
#X connect 4 0 5 0;
#X connect 5 0 7 0;
#X connect 7 0 28 0;
#X connect 15 0 18 0;
#X connect 15 0 25 0;
#X connect 16 0 15 0;
#X connect 17 0 21 0;
#X connect 17 0 22 0;
#X connect 18 0 17 0;
#X connect 19 0 16 0;
#X connect 22 0 20 0;
#X connect 24 0 27 0;
#X connect 25 0 24 0;
#X connect 31 0 28 0;
#X connect 31 0 29 0;
#X connect 32 0 31 0;
#X restore 22 238 pd fft;
#X text 509 178 ---- 0.02 seconds ----;
#X obj 82 217 bng 18 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
-1;
#X obj 14 293 output~;
#X text 499 708 updated for Pd version 0.37;
#X text 494 355 1;
#X text 528 355 2;
#X text 560 355 3;
#X text 592 355 4;
#X text 625 355 5;
#X text 655 355 6;
#X text 686 355 7;
#X text 462 355 0;
#X text 496 372 -- partial number --;
#X text 711 100 0;
#X obj 12 30 r fundamental;
#X obj 12 57 osc~;
#X text 573 26 WAVEFORM;
#X text 557 204 SPECTRUM;
#X text 723 338 0;
#X text 721 217 1;
#X text 722 276 0.5;
#X obj 82 238 tgl 18 0 empty empty empty 0 -6 0 8 -262144 -1 -1 0 1
;
#N canvas 0 0 450 300 (subpatch) 0;
#X array E06-tab 1003 float 1;
#A 0 1.01005 1 0.99005 0.980199 0.970446 0.960789 0.951229 0.941765
0.932394 0.923116 0.913931 0.904837 0.895834 0.88692 0.878095 0.869358
0.860708 0.852144 0.843665 0.83527 0.826959 0.818731 0.810584 0.802519
0.794534 0.786628 0.778801 0.771052 0.76338 0.755784 0.748264 0.740818
0.733447 0.726149 0.718924 0.71177 0.704688 0.697676 0.690734 0.683861
0.677057 0.67032 0.66365 0.657047 0.650509 0.644036 0.637628 0.631284
0.625002 0.618783 0.612626 0.606531 0.600496 0.594521 0.588605 0.582748
0.57695 0.571209 0.565525 0.559898 0.554327 0.548812 0.543351 0.537944
0.532592 0.527292 0.522046 0.516851 0.511709 0.506617 0.501576 0.496585
0.491644 0.486752 0.481909 0.477114 0.472367 0.467666 0.463013 0.458406
0.453845 0.449329 0.444858 0.440432 0.436049 0.431711 0.427415 0.423162
0.418952 0.414783 0.410656 0.40657 0.402524 0.398519 0.394554 0.390628
0.386741 0.382893 0.379083 0.375311 0.371577 0.367879 0.364219 0.360595
0.357007 0.353455 0.349938 0.346456 0.343008 0.339595 0.336216 0.332871
0.329559 0.32628 0.323033 0.319819 0.316637 0.313486 0.310367 0.307279
0.304221 0.301194 0.298197 0.29523 0.292293 0.289384 0.286505 0.283654
0.280832 0.278037 0.275271 0.272532 0.26982 0.267135 0.264477 0.261846
0.25924 0.256661 0.254107 0.251579 0.249075 0.246597 0.244143 0.241714
0.239309 0.236928 0.23457 0.232236 0.229925 0.227638 0.225373 0.22313
0.22091 0.218712 0.216536 0.214381 0.212248 0.210136 0.208045 0.205975
0.203926 0.201897 0.199888 0.197899 0.19593 0.19398 0.19205 0.190139
0.188247 0.186374 0.18452 0.182684 0.180866 0.179066 0.177284 0.17552
0.173774 0.172045 0.170333 0.168638 0.16696 0.165299 0.163654 0.162026
0.160414 0.158817 0.157237 0.155673 0.154124 0.15259 0.151072 0.149569
0.14808 0.146607 0.145148 0.143704 0.142274 0.140858 0.139457 0.138069
0.136695 0.135335 0.133989 0.132655 0.131336 0.130029 0.128735 0.127454
0.126186 0.12493 0.123687 0.122456 0.121238 0.120032 0.118837 0.117655
0.116484 0.115325 0.114178 0.113042 0.111917 0.110803 0.109701 0.108609
0.107528 0.106459 0.105399 0.10435 0.103312 0.102284 0.101266 0.100259
0.0992613 0.0982736 0.0972958 0.0963276 0.0953692 0.0944202 0.0934807
0.0925506 0.0916297 0.0907179 0.0898153 0.0889216 0.0880368 0.0871608
0.0862936 0.085435 0.0845849 0.0837432 0.08291 0.082085 0.0812682 0.0804596
0.079659 0.0788664 0.0780817 0.0773047 0.0765356 0.075774 0.07502 0.0742736
0.0735345 0.0728029 0.0720785 0.0713613 0.0706512 0.0699482 0.0692522
0.0685631 0.0678809 0.0672055 0.0665368 0.0658748 0.0652193 0.0645703
0.0639279 0.0632918 0.062662 0.0620385 0.0614212 0.0608101 0.060205
0.0596059 0.0590129 0.0584257 0.0578443 0.0572688 0.0566989 0.0561348
0.0555762 0.0550232 0.0544757 0.0539337 0.053397 0.0528657 0.0523397
0.0518189 0.0513033 0.0507928 0.0502874 0.0497871 0.0492917 0.0488012
0.0483156 0.0478349 0.0473589 0.0468877 0.0464212 0.0459593 0.045502
0.0450492 0.044601 0.0441572 0.0437178 0.0432828 0.0428521 0.0424257
0.0420036 0.0415857 0.0411719 0.0407622 0.0403566 0.0399551 0.0395575
0.0391639 0.0387742 0.0383884 0.0380064 0.0376283 0.0372538 0.0368832
0.0365162 0.0361528 0.0357931 0.035437 0.0350844 0.0347353 0.0343896
0.0340475 0.0337087 0.0333733 0.0330412 0.0327124 0.0323869 0.0320647
0.0317456 0.0314298 0.031117 0.0308074 0.0305009 0.0301974 0.0298969
0.0295994 0.0293049 0.0290133 0.0287246 0.0284388 0.0281559 0.0278757
0.0275983 0.0273237 0.0270518 0.0267827 0.0265162 0.0262523 0.0259911
0.0257325 0.0254765 0.025223 0.024972 0.0247235 0.0244775 0.024234
0.0239928 0.0237541 0.0235177 0.0232837 0.0230521 0.0228227 0.0225956
0.0223708 0.0221482 0.0219278 0.0217096 0.0214936 0.0212797 0.021068
0.0208584 0.0206508 0.0204453 0.0202419 0.0200405 0.0198411 0.0196437
0.0194482 0.0192547 0.0190631 0.0188734 0.0186856 0.0184997 0.0183156
0.0181334 0.017953 0.0177743 0.0175975 0.0174224 0.017249 0.0170774
0.0169075 0.0167392 0.0165727 0.0164078 0.0162445 0.0160829 0.0159229
0.0157644 0.0156076 0.0154523 0.0152985 0.0151463 0.0149956 0.0148464
0.0146986 0.0145524 0.0144076 0.0142642 0.0141223 0.0139818 0.0138427
0.0137049 0.0135686 0.0134336 0.0132999 0.0131675 0.0130365 0.0129068
0.0127784 0.0126512 0.0125254 0.0124007 0.0122773 0.0121552 0.0120342
0.0119145 0.0117959 0.0116786 0.0115624 0.0114473 0.0113334 0.0112206
0.011109 0.0109985 0.010889 0.0107807 0.0106734 0.0105672 0.0104621
0.010358 0.0102549 0.0101529 0.0100518 0.00995182 0.0098528 0.00975476
0.0096577 0.0095616 0.00946646 0.00937227 0.00927902 0.00918669 0.00909528
0.00900478 0.00891518 0.00882647 0.00873865 0.0086517 0.00856561 0.00848038
0.008396 0.00831246 0.00822975 0.00814786 0.00806679 0.00798652 0.00790705
0.00782838 0.00775048 0.00767337 0.00759701 0.00752142 0.00744658 0.00737249
0.00729913 0.0072265 0.0071546 0.00708341 0.00701293 0.00694315 0.00687406
0.00680567 0.00673795 0.0066709 0.00660453 0.00653881 0.00647375 0.00640933
0.00634556 0.00628242 0.00621991 0.00615802 0.00609675 0.00603608 0.00597602
0.00591656 0.00585769 0.0057994 0.0057417 0.00568457 0.00562801 0.00557201
0.00551657 0.00546167 0.00540733 0.00535353 0.00530026 0.00524752 0.0051953
0.00514361 0.00509243 0.00504176 0.00499159 0.00494193 0.00489275 0.00484407
0.00479587 0.00474815 0.00470091 0.00465413 0.00460782 0.00456197 0.00451658
0.00447164 0.00442715 0.0043831 0.00433948 0.00429631 0.00425356 0.00421123
0.00416933 0.00412785 0.00408677 0.00404611 0.00400585 0.00396599 0.00392653
0.00388746 0.00384878 0.00381048 0.00377257 0.00373503 0.00369786 0.00366107
0.00362464 0.00358857 0.00355287 0.00351752 0.00348252 0.00344786 0.00341356
0.00337959 0.00334597 0.00331267 0.00327971 0.00324708 0.00321477 0.00318278
0.00315111 0.00311976 0.00308871 0.00305798 0.00302755 0.00299743 0.0029676
0.00293808 0.00290884 0.0028799 0.00285124 0.00282287 0.00279478 0.00276698
0.00273944 0.00271219 0.0026852 0.00265848 0.00263203 0.00260584 0.00257991
0.00255424 0.00252883 0.00250366 0.00247875 0.00245409 0.00242967 0.00240549
0.00238156 0.00235786 0.0023344 0.00231117 0.00228818 0.00226541 0.00224287
0.00222055 0.00219846 0.00217658 0.00215492 0.00213348 0.00211225 0.00209124
0.00207043 0.00204983 0.00202943 0.00200924 0.00198925 0.00196945 0.00194986
0.00193045 0.00191125 0.00189223 0.0018734 0.00185476 0.0018363 0.00181803
0.00179994 0.00178203 0.0017643 0.00174675 0.00172937 0.00171216 0.00169512
0.00167826 0.00166156 0.00164502 0.00162866 0.00161245 0.00159641 0.00158052
0.0015648 0.00154923 0.00153381 0.00151855 0.00150344 0.00148848 0.00147367
0.00145901 0.00144449 0.00143012 0.00141589 0.0014018 0.00138785 0.00137404
0.00136037 0.00134683 0.00133343 0.00132016 0.00130703 0.00129402 0.00128115
0.0012684 0.00125578 0.00124328 0.00123091 0.00121866 0.00120654 0.00119453
0.00118265 0.00117088 0.00115923 0.00114769 0.00113627 0.00112497 0.00111377
0.00110269 0.00109172 0.00108086 0.0010701 0.00105946 0.00104891 0.00103848
0.00102814 0.00101791 0.00100779 0.000997758 0.00098783 0.000978001
0.00096827 0.000958635 0.000949097 0.000939653 0.000930303 0.000921047
0.000911882 0.000902808 0.000893825 0.000884932 0.000876127 0.000867409
0.000858778 0.000850233 0.000841773 0.000833397 0.000825105 0.000816895
0.000808767 0.000800719 0.000792752 0.000784864 0.000777055 0.000769323
0.000761668 0.000754089 0.000746586 0.000739157 0.000731803 0.000724521
0.000717312 0.000710174 0.000703108 0.000696112 0.000689185 0.000682328
0.000675539 0.000668817 0.000662162 0.000655574 0.00064905 0.000642592
0.000636198 0.000629868 0.000623601 0.000617396 0.000611253 0.000605171
0.000599149 0.000593188 0.000587285 0.000581442 0.000575656 0.000569928
0.000564257 0.000558643 0.000553084 0.000547581 0.000542133 0.000536738
0.000531398 0.00052611 0.000520875 0.000515692 0.000510561 0.000505481
0.000500451 0.000495472 0.000490542 0.000485661 0.000480829 0.000476044
0.000471307 0.000466618 0.000461975 0.000457378 0.000452827 0.000448321
0.000443861 0.000439444 0.000435072 0.000430743 0.000426456 0.000422213
0.000418012 0.000413853 0.000409735 0.000405658 0.000401622 0.000397626
0.000393669 0.000389752 0.000385874 0.000382034 0.000378233 0.00037447
0.000370744 0.000367055 0.000363402 0.000359786 0.000356206 0.000352662
0.000349153 0.000345679 0.000342239 0.000338834 0.000335463 0.000332125
0.00032882 0.000325548 0.000322309 0.000319102 0.000315927 0.000312783
0.000309671 0.00030659 0.000303539 0.000300519 0.000297529 0.000294568
0.000291637 0.000288735 0.000285862 0.000283018 0.000280202 0.000277414
0.000274654 0.000271921 0.000269215 0.000266536 0.000263884 0.000261259
0.000258659 0.000256085 0.000253537 0.000251014 0.000248517 0.000246044
0.000243596 0.000241172 0.000238772 0.000236396 0.000234044 0.000231716
0.00022941 0.000227127 0.000224867 0.00022263 0.000220415 0.000218221
0.00021605 0.0002139 0.000211772 0.000209665 0.000207579 0.000205513
0.000203468 0.000201444 0.000199439 0.000197455 0.00019549 0.000193545
0.000191619 0.000189713 0.000187825 0.000185956 0.000184106 0.000182274
0.00018046 0.000178665 0.000176887 0.000175127 0.000173384 0.000171659
0.000169951 0.00016826 0.000166586 0.000164928 0.000163287 0.000161663
0.000160054 0.000158461 0.000156885 0.000155324 0.000153778 0.000152248
0.000150733 0.000149233 0.000147748 0.000146278 0.000144823 0.000143382
0.000141955 0.000140543 0.000139144 0.00013776 0.000136389 0.000135032
0.000133688 0.000132358 0.000131041 0.000129737 0.000128446 0.000127168
0.000125903 0.00012465 0.00012341 0.000122182 0.000120966 0.000119763
0.000118571 0.000117391 0.000116223 0.000115067 0.000113922 0.000112788
0.000111666 0.000110555 0.000109455 0.000108366 0.000107287 0.00010622
0.000105163 0.000104117 0.00010308 0.000102055 0.000101039 0.000100034
9.90387e-05 9.80533e-05 9.70776e-05 9.61117e-05 9.51553e-05 9.42085e-05
9.32711e-05 9.23431e-05 9.14242e-05 9.05145e-05 8.96139e-05 8.87222e-05
8.78394e-05 8.69654e-05 8.61001e-05 8.52434e-05 8.43952e-05 8.35554e-05
8.27241e-05 8.1901e-05 8.1086e-05 8.02792e-05 7.94804e-05 7.86896e-05
7.79066e-05 7.71314e-05 7.6364e-05 7.56041e-05 7.48518e-05 7.4107e-05
7.33696e-05 7.26396e-05 7.19169e-05 7.12012e-05 7.04928e-05 6.97914e-05
6.9097e-05 6.84094e-05 6.77287e-05 6.70548e-05 6.63876e-05 6.5727e-05
6.5073e-05 6.44256e-05 6.37845e-05 6.31498e-05 6.25215e-05 6.18994e-05
6.12835e-05 6.06737e-05 6.007e-05 5.94723e-05 5.88805e-05 5.82947e-05
5.77146e-05 5.71403e-05 5.65718e-05 5.60089e-05 5.54516e-05 5.48998e-05
5.43536e-05 5.38128e-05 5.32773e-05 5.27472e-05 5.22224e-05 5.17027e-05
5.11883e-05 5.06789e-05 5.01747e-05 4.96754e-05 4.91812e-05 4.86918e-05
4.82073e-05 4.77276e-05 4.72527e-05 4.67826e-05 4.63171e-05;
#A 1000 0 0 0;
#X coords 0 1 1002 0 180 100 1;
#X restore 254 118 graph;
#N canvas 140 79 589 249 make-table 0;
#X obj 164 81 t b b;
#X obj 236 106 f;
#X obj 274 106 + 1;
#X msg 258 83 0;
#X obj 164 104 until;
#X obj 236 136 t f f;
#X obj 164 62 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
-1;
#X obj 104 164 expr exp(-($f1-1)/100);
#X obj 163 132 sel 999;
#X text 35 10 This patch computes a decaying exponential function \,
100 points per unit.;
#X obj 137 196 tabwrite E06-tab;
#X connect 0 0 4 0;
#X connect 0 1 3 0;
#X connect 1 0 2 0;
#X connect 1 0 5 0;
#X connect 1 0 8 0;
#X connect 2 0 1 1;
#X connect 3 0 1 1;
#X connect 4 0 1 0;
#X connect 5 0 7 0;
#X connect 5 1 10 1;
#X connect 6 0 0 0;
#X connect 7 0 10 0;
#X connect 8 0 4 1;
#X restore 302 258 pd make-table;
#X text 252 85 waveshaping function;
#X text 438 210 0;
#X text 437 114 1;
#X obj 12 168 +~ 1;
#X obj 12 146 *~ 100;
#X obj 12 83 +~ 1;
#X floatatom 68 53 5 0 200 0 - - -;
#X obj 68 96 pack 0 50;
#X obj 68 120 line~;
#X text 157 69 tenths;
#X obj 68 73 / 10;
#X obj 12 124 *~;
#X obj 13 190 tabread4~ E06-tab;
#X text 711 40 1;
#X text 712 160 -1;
#X text 103 237 <-- repeatedly;
#X text 104 217 <-- graph once;
#X text 121 0 Waveshaping using an exponential function;
#X text 120 53 <--index in;
#X text 250 218 0;
#X text 417 220 10;
#X text 14 652 When the index of modulation exceeds 5 we scan past
the right hand border of the table (the thousandth point \, corresponding
to exp(-10). This isn't a problem because the values are all close
to zero there.;
#X text 14 555 Table lookup is prepared as follows. First add one to
the sinusoid and adjust its amplitude according to index \; it ranges
from 0 to 2*index. Then adjust for the table's input scale (100 points
per unit \, so multiply by 100) and add one to skip the interpolation
point at the beginning of the table.;
#X text 13 398 Here we use an exponential function as a waveshaping
transfer function. The theory is shown in detail in the accompanying
book \, but in short \, we adjust the sinusoid so that \, as the index
increases \, we scan starting from the left of the transfer function
(previously the reading location grew from the center). The table contains
exp(-x) with x varying from 0 to 10 When the index is zero \, the output
is the constant 1 and the spectrum holds only DC. As the index grows
\, the output is a sequence of steadily narrower pulses \, whose spectrum
gets progressively fatter.;
#X connect 1 0 6 0;
#X connect 1 0 6 1;
#X connect 5 0 3 1;
#X connect 18 0 19 0;
#X connect 19 0 33 0;
#X connect 25 0 3 2;
#X connect 31 0 40 0;
#X connect 32 0 31 0;
#X connect 33 0 39 0;
#X connect 34 0 38 0;
#X connect 35 0 36 0;
#X connect 36 0 39 1;
#X connect 38 0 35 0;
#X connect 39 0 32 0;
#X connect 40 0 3 0;
#X connect 40 0 1 0;

View file

@ -0,0 +1,109 @@
#N canvas 184 126 784 591 12;
#X obj 230 101 f;
#X obj 264 77 + 1;
#X obj 264 101 mod 11;
#N canvas 0 0 450 300 (subpatch) 0;
#X array E07 11 float 2;
#X coords 0 96 11 36 100 160 1;
#X restore 528 15 graph;
#X floatatom 320 53 0 10 999 0 - - -;
#X obj 230 173 mtof;
#X msg 26 92 1;
#X obj 27 217 *~;
#X obj 27 267 cos~;
#X obj 27 292 hip~ 5;
#X obj 27 244 +~ 0.1;
#X floatatom 61 144 0 0 0 0 - - -;
#X floatatom 166 145 0 0 200 0 - - -;
#X floatatom 96 144 0 0 999 0 - - -;
#X floatatom 131 144 0 0 999 0 - - -;
#X msg 112 267 0;
#X msg 112 245 0.1;
#X msg 112 289 0.25;
#X text 68 108 ADSR controls;
#X text 106 125 A;
#X text 141 125 D;
#X text 176 125 S;
#X floatatom 320 77 0 1 11 0 - - -;
#X text 354 79 <--increment;
#X text 355 56 <--msec;
#X obj 26 193 *~ 0.01;
#X obj 230 29 tgl 15 0 empty empty empty 0 -6 0 8 -262144 -1 -1 1 1
;
#X obj 27 321 output~;
#X text 527 562 updated for Pd version 0.37;
#X obj 26 170 adsr 70 10 90 50 500;
#X obj 230 150 +;
#X floatatom 265 150 0 -48 120 0 - - -;
#X text 299 152 <--transpose;
#N canvas 61 76 538 208 make-table 0;
#X obj 38 71 loadbang;
#X text 16 11 This patch loads a sequence of pitches into E07. The
values are floating-point \, so we could use microtones (60.5 \, for
example) if we wish.;
#X msg 38 99 \; E07 0 54 55 57 63 61 67 71 57 70 61 63 \; E07 yticks
36 12 1 \; E07 ylabel 12 36 48 60 72 84 96;
#X connect 0 0 2 0;
#X restore 527 195 pd make-table;
#X obj 176 50 sel 0;
#X msg 26 69 0;
#X text 48 125 level;
#X obj 230 53 metro 130;
#X obj 60 217 osc~;
#X text 111 225 symmetry;
#X text 157 265 even;
#X text 165 288 odd;
#X text 147 244 mixed;
#X obj 230 126 tabread E07;
#X text 253 26 <--ON/OFF;
#X text 238 232 This patch uses a stepping sequencer to control a waveshaping
instrument. A metronome (metro 130) drives a counter (f \, +1 \, and
mod 11) which counts repeatedly through 11 values which are read from
the stored table (tabread E07). The values may be read in sequence
\, by twos or threes \, etc. \, according to the "increment" parameter.
;
#X text 239 328 The metronome also triggers an ADSR envelope \, whose
parameters may also be changed using the "level" \, "A" \, "D" \, and
"S" controls.;
#X text 142 5 SEQUENCED WAVESHAPING SYNTHESIZER;
#X text 240 380 The synthesis (osc~ \, *~ \, +~ 0.1 \, cos~) is a very
simple application of the waveshaping technique. The oscillator (whose
amplitude depends on the ADSR generator) is used as an index into the
"cos~" wavetable. An additional offset ("symmetry") controls how the
oscillator's waveform is centered on the wavetable. If the offset is
zero \, the oscillator reads into the (even) cosine function (producing
only even harmonics). If the offset is 0.25 \, we read 1/4 wave into
the cosine function: the result is an odd function and we get odd harmonics.
Between the two we get mixtures of even and odd.;
#X connect 0 0 1 0;
#X connect 0 0 43 0;
#X connect 1 0 2 0;
#X connect 2 0 0 1;
#X connect 4 0 37 1;
#X connect 5 0 38 0;
#X connect 6 0 29 0;
#X connect 7 0 10 0;
#X connect 8 0 9 0;
#X connect 9 0 27 0;
#X connect 9 0 27 1;
#X connect 10 0 8 0;
#X connect 11 0 29 1;
#X connect 12 0 29 4;
#X connect 13 0 29 2;
#X connect 14 0 29 3;
#X connect 15 0 10 1;
#X connect 16 0 10 1;
#X connect 17 0 10 1;
#X connect 22 0 1 1;
#X connect 25 0 7 0;
#X connect 26 0 34 0;
#X connect 26 0 37 0;
#X connect 29 0 25 0;
#X connect 30 0 5 0;
#X connect 31 0 30 1;
#X connect 34 0 35 0;
#X connect 35 0 29 0;
#X connect 37 0 0 0;
#X connect 37 0 6 0;
#X connect 38 0 7 1;
#X connect 43 0 30 0;

View file

@ -0,0 +1,196 @@
#N canvas 36 68 722 738 12;
#X obj 224 164 *~;
#X floatatom 224 107 0 0 0 0 - - -;
#X obj 312 144 line~;
#X floatatom 128 121 0 0 0 0 - - -;
#X obj 128 235 cos~;
#X obj 128 191 +~;
#X obj 224 132 osc~ 0;
#X obj 312 118 pack 0 50;
#X floatatom 312 65 0 0 0 0 - - -;
#X obj 312 92 / 100;
#X text 286 27 modulation index;
#X text 286 42 in hundredths;
#X text 125 78 carrier;
#X text 124 96 frequency;
#X text 209 83 frequency;
#X text 210 66 modulation;
#X text 33 132 carrier;
#X text 33 147 phase -->;
#X text 6 175 phase;
#X text 5 190 modulation-->;
#X text 12 217 output;
#X text 11 234 waveform -->;
#X text 129 1 PHASE MODULATION;
#X text 16 378 Most implementations of "FM" actually use phase \, not
frequency \, modulation \, because it extends in a more natural way
to "multi-operator FM" with three or more oscillators.;
#X text 16 434 To do phase modulation \, we split the "carrier oscillator"
into its phase calculation (phasor~) and its waveform lookup (cos~).
These together would be equivalent to an osc~ object \, but the "+~"
between them adds the modulating oscillator's output to the phase.
;
#X text 20 652 We also have to use a line~ to smooth changes in the
modulation index \, which wasn't necessary in the previous patch.;
#X obj 128 148 phasor~;
#X obj 117 557 cos~;
#X obj 117 529 phasor~;
#X text 60 539 this:;
#X text 219 532 is the same;
#X text 220 551 as this:;
#X obj 335 544 osc~;
#N canvas 0 0 450 300 graph2 0;
#X array phase-out 441 float 1;
#A 0 0.43245 0.433463 0.434452 0.435418 0.43636 0.43728 0.438178 0.439056
0.439912 0.440749 0.441567 0.442366 0.443148 0.443912 0.444659 0.445391
0.446107 0.446809 0.447497 0.448172 0.448834 0.449484 0.450122 0.450751
0.451369 0.451978 0.452579 0.453172 0.453758 0.454338 0.454911 0.45548
0.456045 0.456606 0.457164 0.457719 0.458274 0.458827 0.45938 0.459934
0.460489 0.461046 0.461605 0.462168 0.462735 0.463306 0.463883 0.464466
0.465056 0.465654 0.466259 0.466873 0.467497 0.468131 0.468776 0.469433
0.470102 0.470783 0.471479 0.472188 0.472913 0.473653 0.474409 0.475182
0.475973 0.476782 0.477611 0.478459 0.479327 0.480216 0.481127 0.48206
0.483015 0.483994 0.484997 0.486024 0.487077 0.488156 0.48926 0.490392
0.491552 0.49274 0.493957 0.495203 0.496479 0.497785 0.499123 0.500493
0.501896 0.503332 0.504801 0.506304 0.507842 0.509415 0.511023 0.512667
0.514348 0.516066 0.517821 0.519615 0.521447 0.523318 0.525228 0.527179
0.52917 0.531202 0.533275 0.53539 0.537547 0.539747 0.541992 0.54428
0.546613 0.548989 0.551411 0.553877 0.556389 0.558947 0.561551 0.564202
0.5669 0.569645 0.572437 0.575278 0.578166 0.581104 0.58409 0.587125
0.59021 0.593345 0.596529 0.599764 0.603051 0.606389 0.609778 0.613219
0.61671 0.620254 0.62385 0.627497 0.631197 0.634949 0.638754 0.642612
0.646522 0.650486 0.654503 0.658573 0.662696 0.666873 0.671104 -0.324611
-0.320273 -0.315881 -0.311434 -0.306931 -0.302375 -0.297764 -0.2931
-0.288381 -0.283608 -0.278781 -0.2739 -0.268964 -0.263975 -0.258931
-0.253833 -0.248682 -0.243476 -0.238217 -0.232904 -0.227537 -0.222116
-0.216642 -0.211115 -0.205534 -0.1999 -0.194211 -0.18847 -0.182675
-0.176829 -0.170929 -0.164978 -0.158975 -0.152919 -0.146813 -0.140655
-0.134446 -0.128186 -0.121875 -0.115514 -0.109103 -0.102642 -0.0961313
-0.0895714 -0.0829625 -0.0763049 -0.0695988 -0.0628447 -0.056041 -0.0491896
-0.0422913 -0.0353461 -0.0283546 -0.0213171 -0.0142339 -0.00710538
6.80089e-05 0.00728586 0.0145478 0.0218535 0.0292025 0.0365944 0.0440286
0.0515049 0.0590228 0.0665818 0.0741815 0.0818213 0.0895009 0.0972198
0.104978 0.112776 0.120611 0.128484 0.136393 0.144339 0.15232 0.160337
0.168388 0.176473 0.184592 0.192744 0.200929 0.209146 0.217393 0.225672
0.233981 0.24232 0.250688 0.259084 0.267509 0.27596 0.284439 0.292944
0.301475 0.310031 0.318611 0.327215 0.335842 0.344491 0.353162 0.361854
0.370566 0.379298 0.38805 0.39682 0.405608 0.414413 0.423234 0.432072
0.440924 0.449792 0.458673 0.467567 0.476474 0.485394 0.494324 0.503265
0.512216 0.521176 0.530145 0.539121 0.548104 0.557094 0.566089 0.575089
0.584094 0.593102 0.602113 0.611126 0.620141 0.629157 0.638173 0.647189
0.656203 0.665215 0.674225 0.683232 0.692234 0.701231 0.710224 0.71921
0.728189 0.737161 0.746124 0.755079 0.764024 0.772959 0.781884 0.790796
0.799697 0.808584 0.817458 0.826318 0.835162 0.843992 0.852804 0.861601
0.870379 0.879139 0.887879 0.8966 0.905301 0.913981 0.92264 0.931276
0.93989 0.94848 0.957046 0.965588 0.974105 0.982595 0.99106 0.999497
1.00791 1.01629 1.02464 1.03296 1.04126 1.04952 1.05775 1.06595 1.07412
1.08225 1.09035 1.09841 1.10645 1.11444 1.1224 1.13033 1.13822 1.14607
1.15388 1.16166 1.1694 1.17709 1.18475 1.19237 1.19995 1.20749 1.21498
1.22244 1.22985 1.23722 1.24454 1.25182 1.25906 1.26625 1.2734 0.280502
0.287559 0.29457 0.301536 0.308454 0.315325 0.32215 0.328926 0.335655
0.342335 0.348967 0.35555 0.362084 0.368568 0.375003 0.381388 0.387722
0.394004 0.400235 0.406415 0.412544 0.418621 0.424647 0.430621 0.436542
0.442412 0.448228 0.453993 0.459704 0.465363 0.470969 0.476521 0.48202
0.487466 0.492858 0.498196 0.503481 0.508712 0.513889 0.519011 0.524077
0.52909 0.534049 0.538953 0.543804 0.5486 0.553342 0.55803 0.562664
0.567243 0.571769 0.57624 0.580658 0.585021 0.589331 0.593587 0.597789
0.601938 0.606033 0.610075 0.614064 0.617999 0.621879 0.625706 0.629481
0.633203 0.636873 0.640491 0.644057 0.647571 0.651033 0.654445 0.657805
0.661114 0.664372 0.66758 0.670739 0.673847 0.676905 0.679914 0.682875
;
#X array cos-out 441 float 1;
#A 0 -0.911256 -0.913872 -0.916365 -0.918789 -0.921097 -0.923342 -0.925486
-0.927564 -0.92956 -0.931483 -0.93335 -0.935129 -0.936867 -0.938528
-0.940137 -0.941707 -0.943197 -0.944657 -0.946072 -0.947426 -0.948755
-0.95004 -0.951276 -0.952491 -0.953672 -0.954806 -0.955924 -0.957024
-0.958071 -0.959106 -0.960132 -0.961119 -0.962086 -0.963047 -0.963993
-0.964903 -0.965811 -0.966718 -0.967595 -0.968461 -0.969329 -0.970192
-0.971025 -0.971863 -0.972707 -0.973527 -0.974343 -0.975168 -0.975986
-0.976786 -0.977597 -0.978414 -0.979202 -0.980003 -0.980816 -0.981596
-0.982391 -0.983194 -0.983968 -0.984757 -0.985543 -0.98631 -0.987093
-0.987851 -0.98861 -0.98937 -0.990102 -0.990852 -0.991557 -0.992275
-0.99296 -0.993642 -0.994295 -0.994935 -0.995544 -0.996137 -0.996687
-0.997227 -0.997705 -0.998173 -0.998575 -0.998944 -0.999273 -0.999527
-0.999743 -0.999894 -0.999966 -0.999981 -0.999927 -0.999765 -0.999526
-0.999202 -0.998785 -0.99824 -0.997586 -0.996816 -0.995923 -0.994897
-0.99373 -0.992413 -0.990934 -0.989283 -0.987458 -0.985449 -0.983247
-0.980843 -0.978222 -0.975372 -0.972288 -0.968961 -0.965377 -0.96153
-0.95741 -0.952995 -0.948265 -0.943231 -0.937881 -0.932182 -0.926128
-0.919728 -0.912938 -0.905762 -0.898197 -0.890198 -0.881799 -0.87293
-0.863637 -0.853855 -0.843612 -0.832873 -0.821629 -0.809886 -0.797593
-0.784764 -0.771394 -0.757466 -0.742953 -0.727864 -0.712189 -0.695918
-0.679041 -0.661549 -0.643437 -0.624697 -0.605324 -0.585314 -0.564664
-0.543374 -0.521441 -0.498869 -0.475658 -0.451811 -0.427334 -0.402219
-0.376482 -0.350131 -0.323174 -0.295626 -0.267508 -0.238824 -0.2096
-0.179853 -0.149603 -0.118875 -0.0876953 -0.0560885 -0.0240874 0.00827867
0.040974 0.0739643 0.107208 0.140666 0.174297 0.208056 0.241893 0.275757
0.309603 0.343385 0.377036 0.410498 0.443712 0.476616 0.509148 0.541242
0.572835 0.603858 0.634244 0.66391 0.692797 0.720837 0.747961 0.774084
0.799131 0.823051 0.845758 0.867169 0.887248 0.90588 0.923037 0.938628
0.952605 0.964885 0.975433 0.984153 0.991037 0.995988 0.998986 0.999997
0.998938 0.995807 0.990576 0.983211 0.973668 0.961961 0.948075 0.932007
0.913757 0.893328 0.87073 0.845995 0.81915 0.790227 0.759268 0.726324
0.691452 0.654714 0.616181 0.57593 0.534037 0.490599 0.445716 0.399491
0.352033 0.303459 0.253886 0.203441 0.152259 0.100478 0.0482368 -0.00432081
-0.057045 -0.109786 -0.162386 -0.214696 -0.266564 -0.317814 -0.368301
-0.417864 -0.466337 -0.513584 -0.559424 -0.603732 -0.646344 -0.687125
-0.725934 -0.762631 -0.797101 -0.829205 -0.858847 -0.8859 -0.91028
-0.931885 -0.950636 -0.966466 -0.97929 -0.989092 -0.995773 -0.999358
-0.999773 -0.997042 -0.991152 -0.982099 -0.969941 -0.954655 -0.936332
-0.915008 -0.890737 -0.863625 -0.833713 -0.801132 -0.765979 -0.728348
-0.688394 -0.646219 -0.601975 -0.555817 -0.507869 -0.45832 -0.407319
-0.355036 -0.301652 -0.247328 -0.192258 -0.136617 -0.0805873 -0.0243537
0.0319027 0.0879985 0.143752 0.198986 0.253526 0.307194 0.359834 0.411262
0.461345 0.509907 0.556823 0.601935 0.645131 0.686266 0.725245 0.761935
0.796272 0.828125 0.857461 0.884158 0.9082 0.929508 0.948044 0.9638
0.976698 0.986778 0.99402 0.998404 0.999981 0.998763 0.994751 0.988022
0.978621 0.966582 0.95197 0.93487 0.915357 0.893512 0.869405 0.843139
0.814817 0.784538 0.752408 0.718535 0.68303 0.646007 0.607581 0.567872
0.526996 0.485074 0.442227 0.398573 0.354231 0.30932 0.263957 0.218256
0.172326 0.126282 0.0802317 0.0342922 -0.0114471 -0.0568861 -0.101931
-0.146492 -0.190474 -0.233802 -0.276394 -0.318171 -0.359072 -0.399015
-0.437958 -0.475821 -0.512573 -0.548149 -0.582512 -0.615632 -0.647446
-0.677951 -0.707119 -0.734897 -0.761296 -0.786293 -0.80988 -0.83204
-0.852773 -0.872085 -0.88998 -0.906462 -0.921542 -0.935229 -0.94754
-0.95849 -0.968102 -0.976397 -0.9834 -0.989136 -0.993613 -0.996882
-0.998976 -0.99993 -0.999748 -0.998484 -0.996188 -0.99286 -0.988563
-0.983336 -0.977186 -0.970195 -0.962347 -0.953732 -0.944344 -0.934249
-0.923482 -0.912051 -0.900028 -0.887441 -0.874296 -0.860659 -0.846562
-0.832035 -0.817101 -0.801792 -0.786149 -0.770201 -0.753977 -0.737507
-0.720826 -0.703952 -0.686912 -0.669731 -0.652436 -0.635043 -0.617572
-0.600055 -0.582513 -0.564966 -0.547418 -0.529898 -0.512429 -0.495016
-0.477676 -0.460438 -0.443287 -0.426265 -0.409364;
#X coords 0 1 440 -1 200 140 1;
#X restore 509 190 graph;
#X obj 213 246 tabwrite~ phase-out;
#X obj 213 273 tabwrite~ cos-out;
#X msg 213 221 bang;
#X text 260 220 <-- graph them;
#X obj 126 296 output~;
#X obj 127 270 hip~;
#X text 408 98 ramped to avoid;
#X text 407 114 clicks.);
#X text 407 82 (the index is;
#X text 435 704 updated for Pd version 0.37;
#X text 21 588 The "modulation" index \, which in true FM is in units
of Hertz \, is dimensionless for phase moduation. "Good" values tend
to be between 0 and 1... in this patch the index is in hundredths.
;
#X connect 0 0 5 1;
#X connect 1 0 6 0;
#X connect 2 0 0 1;
#X connect 3 0 26 0;
#X connect 4 0 35 0;
#X connect 4 0 39 0;
#X connect 5 0 4 0;
#X connect 5 0 34 0;
#X connect 6 0 0 0;
#X connect 7 0 2 0;
#X connect 8 0 9 0;
#X connect 9 0 7 0;
#X connect 26 0 5 0;
#X connect 28 0 27 0;
#X connect 36 0 34 0;
#X connect 36 0 35 0;
#X connect 39 0 38 0;
#X connect 39 0 38 1;

View file

@ -0,0 +1,139 @@
#N canvas 127 136 697 536 12;
#X obj 94 188 *~;
#X obj 136 188 line~;
#X obj 18 179 cos~;
#X obj 18 154 +~;
#X obj 136 165 pack 0 50;
#X floatatom 136 117 0 0 0 0 - - -;
#X obj 136 141 / 100;
#X obj 18 129 phasor~;
#X obj 18 284 output~;
#X obj 17 253 hip~;
#X text 442 513 updated for Pd version 0.37;
#N canvas 122 211 558 609 fft 1;
#X obj 19 61 inlet~;
#X obj 208 212 inlet;
#X obj 29 92 rfft~;
#X obj 29 125 *~;
#X obj 60 125 *~;
#X obj 29 155 sqrt~;
#X obj 332 109 block~ 4096 1;
#X obj 29 181 biquad~ 0 0 0 0 1;
#X text 93 93 Fourier series;
#X text 98 146 magnitude;
#X text 96 131 calculate;
#X text 21 3 This subpatch computes the spectrum of the incoming signal
with a (rectangular windowed) FFT. FFTs aren't properly introduced
until much later.;
#X text 83 61 signal to analyze;
#X text 193 164 delay two samples;
#X text 191 182 for better graphing;
#X obj 19 459 samplerate~;
#X obj 19 436 bng 18 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
-1;
#X floatatom 19 506 5 0 0 0 - - -;
#X obj 19 482 / 256;
#X obj 19 412 loadbang;
#X obj 75 528 s fundamental;
#X text 17 359 At load time \, calculate a good choice of fundamental
frequency for showing spectra: the 16th bin in a 4096-point spectrum
\, so SR*16/4096 or SR/256.;
#X obj 231 259 metro 500;
#X obj 231 236 inlet;
#X text 284 234 toggle to graph repeatedly;
#X text 262 212 bang to graph once;
#X obj 19 295 tabwrite~ E09-signal;
#X obj 231 298 tabwrite~ E09-spectrum;
#X obj 19 528 t b f;
#X msg 19 551 \; cm 6;
#X text 25 585 set carrier multiplier after fundamental;
#X obj 29 205 /~ 4096;
#X msg 209 322 \; pd dsp 1;
#X connect 0 0 2 0;
#X connect 0 0 26 0;
#X connect 1 0 26 0;
#X connect 1 0 27 0;
#X connect 1 0 32 0;
#X connect 2 0 3 0;
#X connect 2 0 3 1;
#X connect 2 1 4 0;
#X connect 2 1 4 1;
#X connect 3 0 5 0;
#X connect 4 0 5 0;
#X connect 5 0 7 0;
#X connect 7 0 31 0;
#X connect 15 0 18 0;
#X connect 16 0 15 0;
#X connect 17 0 28 0;
#X connect 18 0 17 0;
#X connect 19 0 16 0;
#X connect 22 0 26 0;
#X connect 22 0 27 0;
#X connect 23 0 22 0;
#X connect 23 0 32 0;
#X connect 28 0 29 0;
#X connect 28 1 20 0;
#X connect 31 0 27 0;
#X restore 62 243 pd fft;
#X obj 122 222 bng 18 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
-1;
#X obj 122 243 tgl 18 0 empty empty empty 0 -6 0 8 -262144 -1 -1 0
1;
#X text 143 242 <-- repeatedly;
#X text 144 222 <-- graph once;
#N canvas 0 0 450 300 graph1 0;
#X array E09-signal 882 float 0;
#X coords 0 1.02 882 -1.02 200 80 1;
#X restore 433 28 graph;
#N canvas 0 0 450 300 graph1 0;
#X array E09-spectrum 259 float 0;
#X coords 0 0.51 258 -0.008 259 130 1;
#X restore 403 175 graph;
#X text 442 114 ---- 0.02 seconds ----;
#X text 433 306 2;
#X text 464 306 4;
#X text 403 306 0;
#X text 441 321 -- partial number --;
#X text 497 8 WAVEFORM;
#X text 497 157 SPECTRUM;
#X text 663 291 0;
#X text 664 173 0.5;
#X obj 93 117 osc~;
#X obj 93 86 r fundamental;
#X text 171 117 index (x100);
#X text 496 306 6;
#X text 529 306 8;
#X text 557 306 10;
#X text 589 306 12;
#X text 621 306 14;
#X text 43 3 SPECTRUM OF TWO-OPERATOR PHASE MODULATION;
#X floatatom 18 58 3 0 15 0 - - -;
#X obj 18 105 *;
#X obj 18 33 r cm;
#X text 52 57 carrier harmonic #;
#X text 71 367 This patch measures the spectrum of two-operator phase
modulation. The carrier frequency is initially six times the modulation
frequency \, but you can change it with the "carrier harmonic #" control.
Changing the index changes the relative strengths of the harmonics.
Past a certain index (which depends on the carrier frequency) the lower
sidebands begin to reflect about the left edge of the spectrum \, causing
complicated interference effects.;
#X connect 0 0 3 1;
#X connect 1 0 0 1;
#X connect 2 0 9 0;
#X connect 2 0 11 0;
#X connect 3 0 2 0;
#X connect 4 0 1 0;
#X connect 5 0 6 0;
#X connect 6 0 4 0;
#X connect 7 0 3 0;
#X connect 9 0 8 0;
#X connect 9 0 8 1;
#X connect 12 0 11 1;
#X connect 13 0 11 2;
#X connect 27 0 0 0;
#X connect 28 0 27 0;
#X connect 28 0 37 1;
#X connect 36 0 37 0;
#X connect 37 0 7 0;
#X connect 38 0 36 0;

View file

@ -0,0 +1,156 @@
#N canvas 165 123 695 505 12;
#X obj 94 247 *~;
#X obj 109 223 line~;
#X obj 18 179 cos~;
#X obj 18 154 +~;
#X obj 109 200 pack 0 50;
#X floatatom 109 152 0 0 300 0 - - -;
#X obj 109 176 / 100;
#X obj 18 129 phasor~;
#X obj 20 340 output~;
#X obj 19 309 hip~;
#X text 437 472 updated for Pd version 0.37;
#N canvas 62 299 558 609 fft 0;
#X obj 19 61 inlet~;
#X obj 208 212 inlet;
#X obj 29 92 rfft~;
#X obj 29 125 *~;
#X obj 60 125 *~;
#X obj 29 155 sqrt~;
#X obj 332 109 block~ 4096 1;
#X obj 29 181 biquad~ 0 0 0 0 1;
#X text 93 93 Fourier series;
#X text 98 146 magnitude;
#X text 96 131 calculate;
#X text 21 3 This subpatch computes the spectrum of the incoming signal
with a (rectangular windowed) FFT. FFTs aren't properly introduced
until much later.;
#X text 83 61 signal to analyze;
#X text 193 164 delay two samples;
#X text 191 182 for better graphing;
#X obj 16 425 samplerate~;
#X obj 16 402 bng 18 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
-1;
#X floatatom 16 472 5 0 0 0 - - -;
#X obj 16 448 / 256;
#X obj 16 378 loadbang;
#X obj 72 494 s fundamental;
#X text 14 319 At load time \, calculate a good choice of fundamental
frequency for showing spectra: the 16th bin in a 4096-point spectrum
\, so SR*16/4096 or SR/256.;
#X obj 220 257 metro 500;
#X obj 220 234 inlet;
#X text 273 232 toggle to graph repeatedly;
#X text 262 212 bang to graph once;
#X obj 16 494 t b f;
#X obj 19 295 tabwrite~ E10-spectrum;
#X obj 208 295 tabwrite~ E10-spectrum;
#X text 72 536 set carrier multiplier and modulation multipliers after
fundamental;
#X msg 16 516 \; cm 8 \; m1 2 \; m2 3;
#X connect 0 0 2 0;
#X connect 0 0 27 0;
#X connect 1 0 27 0;
#X connect 1 0 28 0;
#X connect 2 0 3 0;
#X connect 2 0 3 1;
#X connect 2 1 4 0;
#X connect 2 1 4 1;
#X connect 3 0 5 0;
#X connect 4 0 5 0;
#X connect 5 0 7 0;
#X connect 7 0 28 0;
#X connect 15 0 18 0;
#X connect 16 0 15 0;
#X connect 17 0 26 0;
#X connect 18 0 17 0;
#X connect 19 0 16 0;
#X connect 22 0 27 0;
#X connect 22 0 28 0;
#X connect 23 0 22 0;
#X connect 26 0 30 0;
#X connect 26 1 20 0;
#X restore 65 311 pd fft;
#X obj 125 290 bng 18 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
-1;
#X obj 125 311 tgl 18 0 empty empty empty 0 -6 0 8 -262144 -1 -1 1
1;
#X text 146 310 <-- repeatedly;
#X text 147 290 <-- graph once;
#N canvas 0 0 450 300 graph1 0;
#X array E10-spectrum 259 float 0;
#X coords 0 2100 258 -20 259 130 1;
#X restore 396 122 graph;
#X text 426 253 2;
#X text 457 253 4;
#X text 396 253 0;
#X text 434 268 -- partial number --;
#X text 490 104 SPECTRUM;
#X text 656 238 0;
#X text 657 120 0.5;
#X obj 93 128 osc~;
#X obj 267 79 r fundamental;
#X text 489 253 6;
#X text 522 253 8;
#X text 550 253 10;
#X text 582 253 12;
#X text 614 253 14;
#X floatatom 18 58 3 0 15 0 - - -;
#X obj 18 105 *;
#X obj 18 33 r cm;
#X text 43 3 SPECTRUM OF COMPLEX PHASE MODULATION;
#X text 23 73 carrier;
#X obj 93 107 *;
#X floatatom 93 60 3 0 15 0 - - -;
#X text 99 74 mod 1;
#X obj 93 35 r m1;
#X text 138 154 index1;
#X obj 197 249 *~;
#X obj 212 225 line~;
#X obj 212 202 pack 0 50;
#X floatatom 212 154 0 0 300 0 - - -;
#X obj 212 178 / 100;
#X obj 196 130 osc~;
#X obj 196 109 *;
#X floatatom 196 62 3 0 15 0 - - -;
#X text 202 76 mod 2;
#X text 246 154 index2;
#X obj 196 37 r m2;
#X text 126 349 Now we introduce a second modulator oscillator. The
carrier is on the 8th harmonic and the two modulators are at 2 and
3 times the fundamental. When either index of modulation is zero \,
changing the other index gives the familiar 2-operator FM result. But
if index2 is nonzero (try around 10 \, for example) then sliding index1
upward from 0 introduces sidebands around each of the sidebands.;
#X connect 0 0 3 1;
#X connect 1 0 0 1;
#X connect 2 0 9 0;
#X connect 2 0 11 0;
#X connect 3 0 2 0;
#X connect 4 0 1 0;
#X connect 5 0 6 0;
#X connect 6 0 4 0;
#X connect 7 0 3 0;
#X connect 9 0 8 0;
#X connect 9 0 8 1;
#X connect 12 0 11 1;
#X connect 13 0 11 2;
#X connect 24 0 0 0;
#X connect 25 0 32 1;
#X connect 25 0 36 1;
#X connect 25 0 47 1;
#X connect 31 0 32 0;
#X connect 32 0 7 0;
#X connect 33 0 31 0;
#X connect 36 0 24 0;
#X connect 37 0 36 0;
#X connect 39 0 37 0;
#X connect 41 0 3 1;
#X connect 42 0 41 1;
#X connect 43 0 42 0;
#X connect 44 0 45 0;
#X connect 45 0 43 0;
#X connect 46 0 41 0;
#X connect 47 0 46 0;
#X connect 48 0 47 0;
#X connect 51 0 48 0;

View file

@ -0,0 +1,82 @@
#N canvas 15 126 835 625 12;
#X obj 272 163 line~;
#X floatatom 53 64 0 0 0 0 - - -;
#X obj 30 315 cos~;
#N canvas 0 0 450 300 graph1 0;
#X array pulse-output 882 float 0;
#X coords 0 1.02 882 -1.02 200 130 1;
#X restore 583 409 graph;
#X obj 53 91 phasor~ 0;
#X obj 272 139 pack 0 50;
#X floatatom 272 90 0 0 100 0 - - -;
#X text 50 43 frequency;
#X obj 53 115 -~ 0.5;
#X obj 53 207 *~;
#X obj 272 114 / 10;
#X obj 30 265 clip~ -0.5 0.5;
#X obj 30 418 hip~ 5;
#N canvas 0 0 450 300 graph1 0;
#X array phase-output 882 float 0;
#X coords 0 1.02 882 -1.02 200 60 1;
#X restore 583 150 graph;
#N canvas 0 0 450 300 graph1 0;
#X array clip-output 882 float 0;
#X coords 0 1.02 882 -1.02 200 130 1;
#X restore 583 272 graph;
#X text 113 114 phase -1/2 to 1/2;
#X text 139 91 phase 0 to 1;
#X text 119 5 PULSE GENERATOR;
#X obj 19 234 tabwrite~ phase-output;
#X obj 19 393 tabwrite~ pulse-output;
#X text 103 419 high pass filter to cut DC;
#X text 319 115 fix range;
#X text 326 164 smooth it;
#X text 314 187 add 1;
#X text 41 148 <-- click to graph;
#X text 83 209 increase amplitude;
#X text 164 264 clip back to range -1/2 to 1/2;
#X text 90 316 cosine wave lookup (-1/2 and 1/2 give -1);
#X obj 272 188 +~ 1;
#X obj 19 292 tabwrite~ clip-output;
#X text 585 539 ---- 0.02 seconds ----;
#X obj 19 148 bng 20 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
-1;
#X obj 30 446 output~;
#X obj 30 338 +~ 1;
#X obj 30 361 *~ 0.5;
#X text 574 589 updated for Pd version 0.37;
#X text 88 337 add one (range now from 0 to 2);
#X text 96 360 ...and now from 0 to 1;
#X text 20 531 This patch computes a pulse train \, with an "index"
control that essentually squeezes the pulses. If "bandwidth" is zero
you get a pure cosine wave \, and for larger values of the bandwidth
\, the cosine wave is squeezed to fill smaller portions of the waveform.
;
#X text 269 71 index;
#X text 790 142 0.5;
#X text 787 198 -0.5;
#X text 785 264 1;
#X text 787 390 -1;
#X text 785 405 1;
#X text 786 528 -1;
#X connect 0 0 28 0;
#X connect 1 0 4 0;
#X connect 2 0 33 0;
#X connect 4 0 8 0;
#X connect 5 0 0 0;
#X connect 6 0 10 0;
#X connect 8 0 9 0;
#X connect 9 0 11 0;
#X connect 9 0 18 0;
#X connect 10 0 5 0;
#X connect 11 0 2 0;
#X connect 11 0 29 0;
#X connect 12 0 32 0;
#X connect 12 0 32 1;
#X connect 28 0 9 1;
#X connect 31 0 18 0;
#X connect 31 0 29 0;
#X connect 31 0 19 0;
#X connect 33 0 34 0;
#X connect 34 0 19 0;
#X connect 34 0 12 0;

View file

@ -0,0 +1,152 @@
#N canvas 32 67 900 421 12;
#X obj 39 247 cos~;
#X graph graph1 0 -1.02 44100 1.02 452 206 652 76;
#X array env-output 44100 float 0;
#X pop;
#X floatatom 71 305 0 0 0;
#N canvas 159 26 495 266 output 0;
#X obj 338 160 t b;
#X obj 338 110 f;
#X obj 338 60 inlet;
#X text 344 29 mute;
#X obj 338 185 f;
#X msg 425 178 0;
#X msg 338 85 bang;
#X obj 338 135 moses 1;
#X obj 425 153 t b f;
#X obj 397 117 moses 1;
#X obj 83 148 dbtorms;
#X obj 397 92 r master-lvl;
#X obj 83 42 r master-lvl;
#X obj 338 210 s master-lvl;
#X obj 22 181 inlet~;
#X obj 199 41 inlet;
#X text 199 18 level;
#X obj 199 100 s master-lvl;
#X msg 96 65 set \$1;
#X obj 96 89 outlet;
#X msg 214 64 \; pd dsp 1;
#X obj 83 194 line~;
#X obj 22 212 *~;
#X obj 22 241 dac~;
#X obj 83 171 pack 0 50;
#X text 20 158 audio;
#X text 93 110 show level;
#X connect 0 0 4 0;
#X connect 1 0 7 0;
#X connect 2 0 6 0;
#X connect 4 0 13 0;
#X connect 5 0 13 0;
#X connect 6 0 1 0;
#X connect 7 0 0 0;
#X connect 7 1 8 0;
#X connect 8 0 5 0;
#X connect 9 1 4 1;
#X connect 10 0 24 0;
#X connect 11 0 1 1;
#X connect 11 0 9 0;
#X connect 12 0 10 0;
#X connect 12 0 18 0;
#X connect 14 0 22 0;
#X connect 15 0 17 0;
#X connect 15 0 20 0;
#X connect 18 0 19 0;
#X connect 21 0 22 1;
#X connect 22 0 23 0;
#X connect 22 0 23 1;
#X connect 24 0 21 0;
#X restore 39 333 pd output;
#X msg 115 306 MUTE;
#X msg 162 93 bang;
#X text 203 93 <-- click to graph;
#X obj 39 168 -~ 0.5;
#X obj 39 192 *~;
#X obj 39 219 clip~ -0.5 0.5;
#X obj 39 274 hip~ 5;
#X obj 126 60 *~;
#X floatatom 205 142 0 0 0;
#X floatatom 205 168 0 0 0;
#X obj 126 27 phasor~ -4;
#X obj 126 191 +~ 0.5;
#X obj 162 117 tabwrite~ env-output;
#X text 451 211 --------- 1 second ---------;
#X floatatom 205 194 0 0 0;
#X obj 126 142 lop~ 130;
#N canvas 168 232 351 420 freq 0;
#X obj 180 176 t f f;
#X obj 181 202 *;
#X obj 60 320 line 0 30;
#X obj 90 132 t b b;
#X obj 90 107 metro 100;
#X obj 61 287 pack;
#X obj 60 376 outlet;
#X floatatom 89 82 0 0 0;
#X floatatom 54 243 0 0 0;
#X floatatom 94 248 0 0 0;
#X obj 60 348 pack 0 30;
#X obj 55 202 + 150;
#X obj 88 34 loadbang;
#X msg 89 58 1;
#X obj 56 175 random 300;
#X obj 181 226 + 100;
#X obj 179 152 random 35;
#X connect 0 0 1 0;
#X connect 0 1 1 1;
#X connect 1 0 15 0;
#X connect 2 0 10 0;
#X connect 3 0 14 0;
#X connect 3 1 16 0;
#X connect 4 0 3 0;
#X connect 5 0 2 0;
#X connect 7 0 4 0;
#X connect 8 0 5 0;
#X connect 9 0 5 1;
#X connect 10 0 6 0;
#X connect 11 0 8 0;
#X connect 12 0 13 0;
#X connect 13 0 7 0;
#X connect 14 0 11 0;
#X connect 15 0 4 1;
#X connect 15 0 9 0;
#X connect 16 0 0 0;
#X restore 38 94 pd freq;
#X obj 39 119 line~;
#X obj 39 144 phasor~;
#X text 225 19 negative frequency;
#X text 226 35 makes falling sawtooth;
#X text 155 59 square it to make a curve;
#X text 245 152 you can;
#X text 243 170 adjust these;
#X text 247 189 values;
#X text 334 250 We interrupt this series of patches to bring you an
important message from Nancy Reagan. If \, anywhere \, at any time
\, someone offers you an illicit drug \, just say one word in reply...
;
#X text 334 313 Now that I'm sure you've heard this important message
\, we can return to the essentially frivolous occupation of making
turn-of-the-millenium western art music.;
#X obj 126 165 *~ 6;
#X text 561 384 updated for Pd version 0.34;
#X text 156 305 <-- output;
#X connect 0 0 10 0;
#X connect 2 0 3 1;
#X connect 3 0 2 0;
#X connect 4 0 3 2;
#X connect 5 0 16 0;
#X connect 7 0 8 0;
#X connect 8 0 9 0;
#X connect 9 0 0 0;
#X connect 10 0 3 0;
#X connect 11 0 16 0;
#X connect 11 0 19 0;
#X connect 12 0 19 1;
#X connect 13 0 31 1;
#X connect 14 0 11 0;
#X connect 14 0 11 1;
#X connect 15 0 8 1;
#X connect 18 0 15 1;
#X connect 19 0 31 0;
#X connect 20 0 21 0;
#X connect 21 0 22 0;
#X connect 22 0 7 0;
#X connect 31 0 15 0;

View file

@ -0,0 +1,126 @@
#N canvas 227 143 860 515 12;
#X obj 189 166 line~;
#X obj 42 187 cos~;
#X obj 189 142 pack 0 50;
#X floatatom 189 41 0 0 100 0 - - -;
#X obj 43 114 -~ 0.5;
#X obj 43 140 *~;
#X obj 189 67 / 10;
#X obj 189 91 moses 0;
#X msg 189 115 0;
#X obj 42 163 clip~ -0.5 0.5;
#X text 184 23 bandwidth;
#X obj 189 191 +~ 1;
#X obj 42 211 +~ 1;
#X text 63 1 PULSE SPECTRUM MEASUREMENT;
#X text 14 357 Here is a measured amplitude spectrum for the pulse
train. Nutice that \, other than a smallish spillover \, the energy
sits in one "lobe" whose changing width justifies our calling the squeeze
factor the "bandwidth.";
#X text 16 428 The spectrum is in units of amplitude. THe sidelobes
\, although they look small \, are actually only about 34 dB down.
You can design more complicated pulse trains \, little Blackman window
functions \, which control the sidelobes much better.;
#X obj 42 293 output~;
#X obj 41 262 hip~;
#N canvas 122 211 558 609 fft 0;
#X obj 19 61 inlet~;
#X obj 208 212 inlet;
#X obj 29 92 rfft~;
#X obj 29 125 *~;
#X obj 60 125 *~;
#X obj 29 155 sqrt~;
#X obj 332 109 block~ 4096 1;
#X obj 29 181 biquad~ 0 0 0 0 1;
#X text 93 93 Fourier series;
#X text 98 146 magnitude;
#X text 96 131 calculate;
#X text 21 3 This subpatch computes the spectrum of the incoming signal
with a (rectangular windowed) FFT. FFTs aren't properly introduced
until much later.;
#X text 83 61 signal to analyze;
#X text 193 164 delay two samples;
#X text 191 182 for better graphing;
#X obj 264 434 samplerate~;
#X obj 264 457 / 256;
#X obj 238 261 metro 500;
#X obj 238 238 inlet;
#X text 291 236 toggle to graph repeatedly;
#X text 262 212 bang to graph once;
#X obj 29 205 /~ 4096;
#X obj 19 295 tabwrite~ F03-signal;
#X obj 235 299 tabwrite~ F03-spectrum;
#X obj 264 409 bang~;
#X msg 209 322 \; pd dsp 1;
#X obj 264 482 s freq;
#X connect 0 0 2 0;
#X connect 0 0 22 0;
#X connect 1 0 22 0;
#X connect 1 0 23 0;
#X connect 1 0 25 0;
#X connect 2 0 3 0;
#X connect 2 0 3 1;
#X connect 2 1 4 0;
#X connect 2 1 4 1;
#X connect 3 0 5 0;
#X connect 4 0 5 0;
#X connect 5 0 7 0;
#X connect 7 0 21 0;
#X connect 15 0 16 0;
#X connect 16 0 26 0;
#X connect 17 0 22 0;
#X connect 17 0 23 0;
#X connect 18 0 17 0;
#X connect 18 0 25 0;
#X connect 21 0 23 0;
#X connect 24 0 15 0;
#X restore 95 264 pd fft;
#X obj 155 243 bng 18 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
-1;
#X obj 155 264 tgl 18 0 empty empty empty 0 -6 0 8 -262144 -1 -1 0
1;
#X text 176 263 <-- repeatedly;
#X text 177 243 <-- graph once;
#X obj 42 235 *~ 0.5;
#X obj 43 90 phasor~;
#N canvas 0 0 450 300 graph1 0;
#X array F03-signal 882 float 0;
#X coords 0 1.02 882 -1.02 200 130 1;
#X restore 640 321 graph;
#N canvas 0 0 450 300 graph1 0;
#X array F03-spectrum 259 float 0;
#X coords 0 0.51 258 -0.008 256 130 1;
#X restore 579 99 graph;
#X text 640 454 ---- 0.02 seconds ----;
#X text 608 230 2;
#X text 639 230 4;
#X text 578 230 0;
#X text 616 245 -- partial number --;
#X text 671 230 6;
#X text 704 230 8;
#X text 732 230 10;
#X text 764 230 12;
#X text 796 230 14;
#X text 605 488 updated for Pd version 0.37;
#X obj 43 63 r freq;
#X connect 0 0 11 0;
#X connect 1 0 12 0;
#X connect 2 0 0 0;
#X connect 3 0 6 0;
#X connect 4 0 5 0;
#X connect 5 0 9 0;
#X connect 6 0 7 0;
#X connect 7 0 8 0;
#X connect 7 1 2 0;
#X connect 8 0 2 0;
#X connect 9 0 1 0;
#X connect 11 0 5 1;
#X connect 12 0 23 0;
#X connect 17 0 16 0;
#X connect 17 0 16 1;
#X connect 19 0 18 1;
#X connect 20 0 18 2;
#X connect 23 0 17 0;
#X connect 23 0 18 0;
#X connect 24 0 4 0;
#X connect 38 0 24 0;

View file

@ -0,0 +1,133 @@
#N canvas 240 229 900 586 12;
#X obj 220 171 line~;
#X obj 220 147 pack 0 50;
#X floatatom 220 46 0 0 0 0 - - -;
#X obj 70 108 *~;
#X obj 220 72 / 10;
#X obj 220 96 moses 0;
#X msg 220 120 0;
#X text 215 28 bandwidth;
#X obj 78 141 *~;
#X obj 18 141 sig~ 1;
#X obj 39 194 /~;
#X obj 54 168 +~;
#X text 111 141 X^2;
#X text 84 171 1+X^2;
#X text 71 196 1/(1+X^2);
#X text 28 4 ANOTHER PULSE WIDTH MOD ALGORITHM;
#N canvas 0 0 450 300 graph1 0;
#X array F04-signal 882 float 0;
#X coords 0 1.02 882 -1.02 200 130 1;
#X restore 646 328 graph;
#N canvas 0 0 450 300 graph1 0;
#X array F04-spectrum 259 float 0;
#X coords 0 1.01 258 -0.008 256 200 1;
#X restore 587 38 graph;
#X text 646 461 ---- 0.02 seconds ----;
#X text 614 237 2;
#X text 645 237 4;
#X text 584 237 0;
#X text 622 252 -- partial number --;
#X text 677 237 6;
#X text 710 237 8;
#X text 738 237 10;
#X text 770 237 12;
#X text 802 237 14;
#X obj 40 277 output~;
#X obj 39 246 hip~;
#N canvas 122 211 558 609 fft 0;
#X obj 19 61 inlet~;
#X obj 224 210 inlet;
#X obj 29 92 rfft~;
#X obj 29 125 *~;
#X obj 60 125 *~;
#X obj 29 155 sqrt~;
#X obj 332 109 block~ 4096 1;
#X obj 29 181 biquad~ 0 0 0 0 1;
#X text 93 93 Fourier series;
#X text 98 146 magnitude;
#X text 96 131 calculate;
#X text 21 3 This subpatch computes the spectrum of the incoming signal
with a (rectangular windowed) FFT. FFTs aren't properly introduced
until much later.;
#X text 83 61 signal to analyze;
#X text 193 164 delay two samples;
#X text 191 182 for better graphing;
#X obj 264 434 samplerate~;
#X obj 251 255 metro 500;
#X obj 251 232 inlet;
#X text 301 232 toggle to graph repeatedly;
#X text 278 210 bang to graph once;
#X obj 29 205 /~ 4096;
#X obj 264 409 bang~;
#X obj 264 457 / 512;
#X obj 19 295 tabwrite~ F04-signal;
#X obj 250 291 tabwrite~ F04-spectrum;
#X obj 264 483 s freq/2;
#X msg 224 321 \; pd dsp 1;
#X connect 0 0 2 0;
#X connect 0 0 23 0;
#X connect 1 0 23 0;
#X connect 1 0 24 0;
#X connect 1 0 26 0;
#X connect 2 0 3 0;
#X connect 2 0 3 1;
#X connect 2 1 4 0;
#X connect 2 1 4 1;
#X connect 3 0 5 0;
#X connect 4 0 5 0;
#X connect 5 0 7 0;
#X connect 7 0 20 0;
#X connect 15 0 22 0;
#X connect 16 0 23 0;
#X connect 16 0 24 0;
#X connect 17 0 16 0;
#X connect 17 0 26 0;
#X connect 20 0 24 0;
#X connect 21 0 15 0;
#X connect 22 0 25 0;
#X restore 93 248 pd fft;
#X obj 153 227 bng 18 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
-1;
#X obj 153 248 tgl 18 0 empty empty empty 0 -6 0 8 -262144 -1 -1 0
1;
#X text 174 247 <-- repeatedly;
#X text 175 227 <-- graph once;
#X obj 69 81 osc~;
#X text 632 540 updated for Pd version 0.37;
#X text 23 515 NOTE: The PAF algorithm is protected by patents belonging
to IRCAM. Noncommercial use seems to be fine with them but contact
them first if you want to sell something using this.;
#X text 24 473 This is the form of pulse train used in the original
Phase Aligned Formant (PAF) algorithm.;
#X text 23 342 Here we use waveshaping to make another form of pulse
train. This one has a neat spectrum: the partials drop off exponentially
(with the "bandwidth" controlling the rate of dropoff.) In later patches
we'll use a wavetable to do the waveshaping but for simplicity \, it's
done algebraically here. The oscillator runs at half the fundamental
frequency. The symmetry of the waveshaping doubles the frequency of
the output.;
#X text 849 222 0;
#X text 846 35 1;
#X obj 69 56 r freq/2;
#X connect 0 0 3 1;
#X connect 1 0 0 0;
#X connect 2 0 4 0;
#X connect 3 0 8 0;
#X connect 3 0 8 1;
#X connect 4 0 5 0;
#X connect 5 0 6 0;
#X connect 5 1 1 0;
#X connect 6 0 1 0;
#X connect 8 0 11 1;
#X connect 9 0 10 0;
#X connect 9 0 11 0;
#X connect 10 0 29 0;
#X connect 10 0 30 0;
#X connect 11 0 10 1;
#X connect 29 0 28 0;
#X connect 29 0 28 1;
#X connect 31 0 30 1;
#X connect 32 0 30 2;
#X connect 35 0 3 0;
#X connect 42 0 35 0;

View file

@ -0,0 +1,160 @@
#N canvas 83 89 793 595 12;
#N canvas 0 0 450 300 graph1 0;
#X array F05-signal 882 float 0;
#X coords 0 1 882 -1 200 130 1;
#X restore 554 218 graph;
#N canvas 0 0 450 300 graph1 0;
#X array F05-spectrum 256 float 0;
#X coords 0 0.51 255 -0.008 256 130 1;
#X restore 499 22 graph;
#X text 552 349 ---- 0.02 seconds ----;
#X text 507 563 updated for Pd version 0.37;
#X text 495 155 0;
#X text 534 174 -- partial number --;
#X text 761 142 0;
#X text 758 19 0.5;
#X floatatom 51 61 0 0 100 0 - - -;
#N canvas 329 22 680 421 pulse-train 0;
#X obj 184 348 line~;
#X obj 39 317 cos~;
#X obj 184 324 pack 0 50;
#X obj 39 245 -~ 0.5;
#X obj 39 269 *~;
#X obj 184 252 / 10;
#X obj 184 276 moses 0;
#X msg 184 300 0;
#X obj 39 293 clip~ -0.5 0.5;
#X obj 184 372 +~ 1;
#X obj 39 341 +~ 1;
#X obj 184 228 inlet;
#X obj 39 389 outlet~;
#X obj 39 365 *~ 0.5;
#X text 53 5 This is a modified version of the pulse train generator
from two examples back.;
#X text 107 140 We have to add 1/2 and wrap so that the center of the
pulse comes at phase zero (previously it was 1/2 cycle out of phase).
This wasn't a problem before but now we have to be in phase with the
oscillator we're multpplying with.;
#X text 276 262 otherwise it's the same as before.;
#X obj 40 85 phasor~;
#X obj 40 58 r freq;
#X connect 0 0 9 0;
#X connect 1 0 10 0;
#X connect 2 0 0 0;
#X connect 3 0 4 0;
#X connect 4 0 8 0;
#X connect 5 0 6 0;
#X connect 6 0 7 0;
#X connect 6 1 2 0;
#X connect 7 0 2 0;
#X connect 8 0 1 0;
#X connect 9 0 4 1;
#X connect 10 0 13 0;
#X connect 11 0 5 0;
#X connect 13 0 12 0;
#X connect 17 0 3 0;
#X connect 18 0 17 0;
#X restore 51 86 pd pulse-train;
#X text 83 61 <-- bandwidth;
#X obj 51 219 *~;
#X text 113 123 <-- modulation frequency as;
#X text 152 137 multiple of fundamental;
#X obj 51 277 output~;
#X obj 50 246 hip~;
#N canvas 122 211 563 534 fft 0;
#X obj 19 61 inlet~;
#X obj 208 212 inlet;
#X obj 29 92 rfft~;
#X obj 29 125 *~;
#X obj 60 125 *~;
#X obj 29 155 sqrt~;
#X obj 332 109 block~ 4096 1;
#X obj 29 181 biquad~ 0 0 0 0 1;
#X text 93 93 Fourier series;
#X text 98 146 magnitude;
#X text 96 131 calculate;
#X text 21 3 This subpatch computes the spectrum of the incoming signal
with a (rectangular windowed) FFT. FFTs aren't properly introduced
until much later.;
#X text 83 61 signal to analyze;
#X text 193 164 delay two samples;
#X text 191 182 for better graphing;
#X obj 264 434 samplerate~;
#X obj 245 262 metro 500;
#X obj 245 233 inlet;
#X text 298 231 toggle to graph repeatedly;
#X text 262 212 bang to graph once;
#X obj 29 205 /~ 4096;
#X obj 264 409 bang~;
#X obj 264 483 s freq;
#X obj 264 457 / 256;
#X obj 19 295 tabwrite~ F05-signal;
#X obj 245 294 tabwrite~ F05-spectrum;
#X msg 224 321 \; pd dsp 1;
#X connect 0 0 2 0;
#X connect 0 0 24 0;
#X connect 1 0 24 0;
#X connect 1 0 25 0;
#X connect 1 0 26 0;
#X connect 2 0 3 0;
#X connect 2 0 3 1;
#X connect 2 1 4 0;
#X connect 2 1 4 1;
#X connect 3 0 5 0;
#X connect 4 0 5 0;
#X connect 5 0 7 0;
#X connect 7 0 20 0;
#X connect 15 0 23 0;
#X connect 16 0 24 0;
#X connect 16 0 25 0;
#X connect 17 0 16 0;
#X connect 17 0 26 0;
#X connect 20 0 25 0;
#X connect 21 0 15 0;
#X connect 23 0 22 0;
#X restore 98 245 pd fft;
#X obj 158 224 bng 18 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
-1;
#X obj 158 245 tgl 18 0 empty empty empty 0 -6 0 8 -262144 -1 -1 1
1;
#X text 179 244 <-- repeatedly;
#X text 180 224 <-- graph once;
#X text 527 155 2;
#X text 559 155 4;
#X text 591 155 6;
#X text 623 155 8;
#X text 656 155 10;
#X text 688 155 12;
#X text 719 155 14;
#X text 759 213 1;
#X text 759 337 -1;
#X text 122 185 modulating oscillator;
#X text 153 6 RING MODULATED PULSE TRAINS;
#X text 23 357 Now we take a pulse train and ring modulate it \, which
effectively aliases the spectrum so that it is centered at any desired
partial number. The "bandwidth" control still affects the shape of
the peak \, independently of where it is centered. This generates a
formant centered at the given partial.;
#X floatatom 73 123 0 0 100 0 - - -;
#X obj 73 182 osc~;
#X obj 73 157 *;
#X obj 107 157 r freq;
#X text 23 457 This patch is limited to making formants centered on
harmonics. The center frequency thus can't be moved smoothly up and
down at will (try shift-clicking on modulation frequency to make fractions).
Next we'll look at two techniques for sliding a formant frequency without
losing harmonicity.;
#X text 184 85 <-- pulse train;
#X text 220 101 generator from before;
#X connect 8 0 9 0;
#X connect 9 0 11 0;
#X connect 11 0 15 0;
#X connect 11 0 16 0;
#X connect 15 0 14 0;
#X connect 15 0 14 1;
#X connect 17 0 16 1;
#X connect 18 0 16 2;
#X connect 33 0 35 0;
#X connect 34 0 11 1;
#X connect 35 0 34 0;
#X connect 36 0 35 1;

View file

@ -0,0 +1,117 @@
#N canvas 207 159 864 663 12;
#X obj 327 413 line~;
#X obj 55 456 cos~;
#N canvas 0 0 450 300 graph1 0;
#X array pulse-output 882 float 0;
#X coords 0 1 882 -1 200 130 1;
#X restore 627 339 graph;
#X obj 327 390 pack 0 50;
#X floatatom 327 344 0 0 0 0 - - -;
#X obj 55 355 -~ 0.5;
#X obj 55 410 *~;
#X obj 327 367 / 10;
#X obj 55 433 clip~ -0.5 0.5;
#X text 327 322 bandwidth;
#X obj 327 436 +~ 1;
#X obj 55 479 +~ 1;
#X obj 206 491 cos~;
#X obj 56 547 *~;
#X floatatom 228 346 4 0 0 0 - - -;
#X obj 228 366 / 10;
#X text 627 472 --- 0.02 seconds ---;
#X obj 206 465 *~;
#N canvas 129 316 777 218 graph 1;
#X obj 70 76 inlet~;
#X obj 662 76 inlet;
#X obj 67 143 tabwrite~ pulse-output;
#X obj 298 81 inlet~;
#X obj 472 74 inlet~;
#X obj 295 148 tabwrite~ window;
#X obj 477 149 tabwrite~ carrier;
#X msg 654 140 \; pd dsp 1;
#X connect 0 0 2 0;
#X connect 1 0 2 0;
#X connect 1 0 5 0;
#X connect 1 0 6 0;
#X connect 1 0 7 0;
#X connect 3 0 5 0;
#X connect 4 0 6 0;
#X restore 100 572 pd graph;
#X obj 228 412 line~;
#X obj 228 389 pack 0 50;
#N canvas 0 0 450 300 graph3 0;
#X array carrier 882 float 0;
#X coords 0 1 881 -1 200 140 1;
#X restore 627 188 graph;
#N canvas 0 0 450 300 graph4 0;
#X array window 882 float 0;
#X coords 0 1 881 -1 200 140 1;
#X restore 628 35 graph;
#X text 204 573 <-- graph;
#X floatatom 55 310 4 0 0 0 - - -;
#X obj 55 331 phasor~ 100;
#X text 31 2 WINDOWED PACKETS;
#X text 51 266 fundamental;
#X text 206 260 center;
#X text 204 279 freq. (in;
#X text 203 298 tenths of;
#X text 202 318 fundamental);
#X text 119 493 window;
#X text 241 469 magnified phase;
#X text 283 509 desired center frequency;
#X text 255 492 <--this cosine goes at the;
#X text 284 528 but its phase is reset each;
#X text 282 547 fundamental period.;
#X text 28 32 The simpler of two techniques for making slidable center
frequencies is to synthesize enveloped sinusoidal wave packets. The
packets should repeat at the fundamental frequency \, but the frequency
of the packet itself controls the center frequency of the formant.
The length of the packet varies inversely with bandwidth.;
#X obj 55 604 output~;
#X obj 55 580 hip~;
#X obj 182 573 bng 18 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
-1;
#X text 601 635 updated for Pd version 0.37;
#X obj 55 502 *~ 0.5;
#X text 831 161 -1;
#X text 833 31 1;
#X text 831 314 -1;
#X text 835 184 1;
#X text 832 458 -1;
#X text 835 333 1;
#X text 26 132 In the patch below \, the "clip~" followed by "cos~"
and "+~ 1" is the enveloping ("windowing") function \, which appears
in the top graph. The carrier \, on the other hand \, is a broken sinusoid
made by amplifying the phasor~ (the "*~" controlled by "center freq.")
and taking the cos~ of the result. The "breaks" in the sinusoid only
occur when the enveloping signal is zero.;
#X text 105 464 raised;
#X text 113 479 cosine;
#X text 51 285 frequency;
#X connect 0 0 10 0;
#X connect 1 0 11 0;
#X connect 3 0 0 0;
#X connect 4 0 7 0;
#X connect 5 0 6 0;
#X connect 5 0 17 0;
#X connect 6 0 8 0;
#X connect 7 0 3 0;
#X connect 8 0 1 0;
#X connect 10 0 6 1;
#X connect 11 0 43 0;
#X connect 12 0 13 1;
#X connect 12 0 18 2;
#X connect 13 0 18 0;
#X connect 13 0 40 0;
#X connect 14 0 15 0;
#X connect 15 0 20 0;
#X connect 17 0 12 0;
#X connect 19 0 17 1;
#X connect 20 0 19 0;
#X connect 24 0 25 0;
#X connect 25 0 5 0;
#X connect 40 0 39 0;
#X connect 40 0 39 1;
#X connect 41 0 18 3;
#X connect 43 0 13 0;
#X connect 43 0 18 1;

View file

@ -0,0 +1,147 @@
#N canvas 83 221 774 628 12;
#X obj 302 351 line~;
#X obj 34 444 cos~;
#X floatatom 71 560 0 0 0;
#N canvas 176 241 532 273 output 0;
#X obj 338 160 t b;
#X obj 338 110 f;
#X obj 338 60 inlet;
#X text 344 29 mute;
#X obj 338 185 f;
#X msg 425 178 0;
#X msg 338 85 bang;
#X obj 338 135 moses 1;
#X obj 398 111 moses 1;
#X obj 83 148 dbtorms;
#X obj 398 86 r master-lvl;
#X obj 83 42 r master-lvl;
#X obj 338 210 s master-lvl;
#X obj 17 148 inlet~;
#X obj 199 41 inlet;
#X text 199 18 level;
#X obj 199 100 s master-lvl;
#X msg 96 65 set \$1;
#X obj 96 89 outlet;
#X msg 214 64 \; pd dsp 1;
#X obj 83 194 line~;
#X obj 22 212 *~;
#X obj 22 241 dac~;
#X obj 83 171 pack 0 50;
#X text 15 125 audio;
#X text 93 110 show level;
#X obj 17 177 hip~ 1;
#X connect 0 0 4 0;
#X connect 1 0 7 0;
#X connect 2 0 6 0;
#X connect 4 0 12 0;
#X connect 5 0 12 0;
#X connect 6 0 1 0;
#X connect 7 0 0 0;
#X connect 7 1 5 0;
#X connect 8 1 4 1;
#X connect 9 0 23 0;
#X connect 10 0 1 1;
#X connect 10 0 8 0;
#X connect 11 0 9 0;
#X connect 11 0 17 0;
#X connect 13 0 26 0;
#X connect 14 0 16 0;
#X connect 14 0 19 0;
#X connect 17 0 18 0;
#X connect 20 0 21 1;
#X connect 21 0 22 0;
#X connect 21 0 22 1;
#X connect 23 0 20 0;
#X connect 26 0 21 0;
#X restore 35 587 pd output;
#X msg 111 560 MUTE;
#X obj 302 327 pack 0 50;
#X floatatom 302 255 0 0 0;
#X obj 34 356 -~ 0.5;
#X obj 34 395 *~;
#X obj 302 279 / 10;
#X obj 34 420 clip~ -0.5 0.5;
#X text 302 233 bandwidth;
#X obj 302 375 +~ 1;
#X obj 35 467 +~ 1;
#X obj 184 440 cos~;
#X obj 35 496 *~;
#X floatatom 206 269 4 0 0;
#X obj 206 293 / 10;
#X obj 184 414 *~;
#X text 204 224 center;
#X text 204 243 freq.;
#X obj 302 303 max 0;
#X obj 206 365 line~;
#X obj 206 341 pack 0 50;
#X obj 206 317 max 0;
#X floatatom 34 308 4 0 0;
#X obj 34 332 phasor~ 100;
#X text 156 559 <-- output;
#X text 30 283 freq.;
#X text 30 264 fundamental;
#X graph graph1 0 0 128 500 440 492 696 362;
#X array spectrum 128 float 0;
#X pop;
#X msg 108 498 bang;
#N canvas 204 17 358 238 fft 0;
#X obj 46 48 inlet~;
#X obj 159 181 tabwrite~ spectrum;
#X obj 159 145 inlet;
#X obj 46 78 rfft~;
#X obj 46 111 *~;
#X obj 77 111 *~;
#X obj 46 141 sqrt~;
#X obj 191 45 block~ 1024 1;
#X connect 0 0 3 0;
#X connect 2 0 1 0;
#X connect 3 0 4 0;
#X connect 3 0 4 1;
#X connect 3 1 5 0;
#X connect 3 1 5 1;
#X connect 4 0 6 0;
#X connect 5 0 6 0;
#X connect 6 0 1 0;
#X restore 59 524 pd fft;
#X text 439 502 0;
#X text 687 499 5512;
#X text 149 498 <-- graph;
#X text 31 2 WINDOWED PACKET SPECTRUM;
#X text 19 34 Here's the spectrum you get. Note that even if you put
the center frequency right on a partial \, there is significant energy
in neighboring partials (try fundamental 440 \, "center freq" 30 \,
bandwidth 0.);
#X text 18 104 The center frequency is in units of ten per partial
\, or in other words a value of "30" means "centered on the third partial".
;
#X text 505 596 updated for Pd version 0.34;
#X text 22 155 This technique only works if you're doing Hanning-window
shaped PWM--you can't combine this naturally with FM or with the waveshaping
technique we'll see later.;
#X connect 0 0 12 0;
#X connect 1 0 13 0;
#X connect 2 0 3 1;
#X connect 3 0 2 0;
#X connect 4 0 3 2;
#X connect 5 0 0 0;
#X connect 6 0 9 0;
#X connect 7 0 8 0;
#X connect 7 0 18 0;
#X connect 8 0 10 0;
#X connect 9 0 21 0;
#X connect 10 0 1 0;
#X connect 12 0 8 1;
#X connect 13 0 15 0;
#X connect 14 0 15 1;
#X connect 15 0 3 0;
#X connect 15 0 32 0;
#X connect 16 0 17 0;
#X connect 17 0 24 0;
#X connect 18 0 14 0;
#X connect 21 0 5 0;
#X connect 22 0 18 1;
#X connect 23 0 22 0;
#X connect 24 0 23 0;
#X connect 25 0 26 0;
#X connect 26 0 7 0;
#X connect 31 0 32 1;

View file

@ -0,0 +1,70 @@
#N canvas 534 115 698 613 12;
#X obj 157 408 cos~;
#X floatatom 204 198 4 0 100 0 - - -;
#X obj 204 222 / 10;
#X text 461 275 --- 0.02 seconds ---;
#X obj 157 378 *~;
#X obj 204 294 line~;
#X obj 204 246 max 0;
#N canvas 0 0 450 300 graph3 0;
#X array F08-carrier 882 float 0;
#X coords 0 2 881 -2 200 140 1;
#X restore 447 123 graph;
#X floatatom 57 295 4 0 0 0 - - -;
#X text 53 251 fundamental;
#X text 53 270 frequency;
#X obj 199 408 cos~;
#X obj 240 321 wrap~;
#X obj 204 348 -~;
#X obj 199 378 +~;
#X obj 204 445 -~;
#X obj 219 475 *~;
#X obj 197 500 +~;
#X obj 204 270 pack 0 50;
#X text 254 408 synthesize the two partials;
#X text 447 590 updated for Pd version 0.37;
#X obj 198 526 hip~;
#X obj 199 552 output~;
#X text 26 29 The other \, spiffier way is to make a sum of cosines
to interpolate between adjacent harmonics. Suppose for example we want
a center frequency of 5.3 (in units of the fundamental.) We just take
partial 5 with amplitude 0.7 and partial 6 with amplitude 0.3:;
#X obj 286 552 tabwrite~ F08-carrier;
#X text 316 528 <-graph;
#X obj 284 527 bng 18 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
-1;
#X obj 57 319 phasor~ 100;
#X text 83 149 center frequency (in;
#X text 82 169 tenths of fundamental);
#X text 125 3 MOVABLE CENTER FREQUENCY BY ADDING TWO COSINES;
#X text 295 320 the fractional part "q";
#X text 253 347 subtract to get the integer part "k";
#X text 249 380 multiply phase by k and k+1;
#X text 252 444 c2 - c1;
#X text 267 473 q * (c2 - c1);
#X text 236 500 q * c2 + (1-q) * c1;
#X connect 0 0 15 1;
#X connect 0 0 17 0;
#X connect 1 0 2 0;
#X connect 2 0 6 0;
#X connect 4 0 0 0;
#X connect 4 0 14 0;
#X connect 5 0 13 0;
#X connect 5 0 12 0;
#X connect 6 0 18 0;
#X connect 8 0 27 0;
#X connect 11 0 15 0;
#X connect 12 0 13 1;
#X connect 12 0 16 1;
#X connect 13 0 4 1;
#X connect 14 0 11 0;
#X connect 15 0 16 0;
#X connect 16 0 17 1;
#X connect 17 0 21 0;
#X connect 17 0 24 0;
#X connect 18 0 5 0;
#X connect 21 0 22 0;
#X connect 21 0 22 1;
#X connect 26 0 24 0;
#X connect 27 0 4 0;
#X connect 27 0 14 1;

View file

@ -0,0 +1,94 @@
#N canvas 10 49 579 665 12;
#X obj 130 481 cos~;
#X obj 130 451 *~;
#X obj 172 481 cos~;
#X obj 214 397 wrap~;
#X obj 177 402 -~;
#X obj 172 451 +~;
#X obj 172 516 -~;
#X obj 192 548 *~;
#X obj 170 573 +~;
#X obj 204 159 loadbang;
#X obj 204 185 metro 400;
#X obj 216 209 del 200;
#X obj 252 326 samphold~;
#N canvas 0 0 405 406 switch 0;
#X obj 15 383 outlet~;
#X obj 8 193 tgl 18 0 empty empty empty 0 -6 0 8 -262144 -1 -1 1 1
;
#X obj 329 195 tgl 18 0 empty empty empty 0 -6 0 8 -262144 -1 -1 0
1;
#X obj 18 99 loadbang;
#X obj 18 131 1;
#X obj 53 261 sel 1;
#X obj 53 287 0;
#X obj 339 259 sel 1;
#X obj 339 288 0;
#X obj 47 316 inlet~;
#X obj 15 344 *~;
#X obj 340 312 inlet~;
#X obj 308 340 *~;
#X connect 1 0 5 0;
#X connect 1 0 10 1;
#X connect 2 0 7 0;
#X connect 2 0 12 1;
#X connect 3 0 4 0;
#X connect 4 0 1 0;
#X connect 5 0 6 0;
#X connect 6 0 2 0;
#X connect 7 0 8 0;
#X connect 8 0 1 0;
#X connect 9 0 10 0;
#X connect 10 0 0 0;
#X connect 11 0 12 0;
#X connect 12 0 0 0;
#X coords 0 0 1 1 80 35 1;
#X restore 177 351 pd switch;
#X text 31 2 CHANGING THE CENTER FREQUENCY QUICKLY;
#X text 34 27 Since in the previous patch the amplitudes of the two
cosines depend on "center frequency" we can't change that discontinuously
without clicking \, as you hear in this patch. The fix is to use a
samphold~ object to keep the center frequency frozen except at phase
crossings. At the phase crossings the two weighted cosines add to one
\, so we can discontinuously change the frequencies and weights there.
;
#X text 266 365 <--toggles to select which one;
#X text 369 384 is actually used;
#X obj 171 602 output~;
#X floatatom 225 264 3 0 50 0 - - -;
#X obj 178 263 pack;
#X text 258 263 <--gliss time;
#X text 324 647 updated for Pd version 0.37;
#X obj 178 287 line~;
#X msg 216 239 13.5;
#X msg 178 239 4;
#X obj 70 287 phasor~ 80;
#X connect 0 0 6 1;
#X connect 0 0 8 0;
#X connect 1 0 0 0;
#X connect 1 0 5 0;
#X connect 2 0 6 0;
#X connect 3 0 4 1;
#X connect 3 0 7 1;
#X connect 4 0 1 1;
#X connect 5 0 2 0;
#X connect 6 0 7 0;
#X connect 7 0 8 1;
#X connect 8 0 18 0;
#X connect 8 0 18 1;
#X connect 9 0 10 0;
#X connect 10 0 25 0;
#X connect 10 0 11 0;
#X connect 11 0 24 0;
#X connect 12 0 13 1;
#X connect 13 0 4 0;
#X connect 13 0 3 0;
#X connect 19 0 20 1;
#X connect 20 0 23 0;
#X connect 23 0 13 0;
#X connect 23 0 12 0;
#X connect 24 0 20 0;
#X connect 25 0 20 0;
#X connect 26 0 1 0;
#X connect 26 0 5 1;
#X connect 26 0 12 1;

View file

@ -0,0 +1,152 @@
#N canvas 60 64 834 697 12;
#X obj 168 476 cos~;
#X obj 168 430 *~;
#X obj 211 478 cos~;
#X obj 252 379 wrap~;
#X obj 215 378 -~;
#X obj 211 455 +~;
#X obj 209 513 -~;
#X obj 230 539 *~;
#X obj 215 348 samphold~;
#X text 167 6 APPLYING TWO-COSINE CARRIER TO FM;
#X floatatom 232 228 4 0 200 0 - - -;
#X obj 232 251 / 10;
#X text 232 147 center;
#X obj 232 300 line~;
#X text 232 167 freq. (in;
#X text 232 187 tenths of;
#X text 232 207 fundamental);
#X obj 232 277 pack 0 50;
#X obj 121 283 phasor~;
#X floatatom 121 260 4 0 0 0 - - -;
#X text 106 207 fundamental;
#X text 106 227 (= mod freq);
#X text 435 254 index;
#X text 435 274 (percent);
#X floatatom 435 295 4 0 500 0 - - -;
#X obj 385 361 cos~;
#X obj 435 364 line~;
#X obj 385 384 *~;
#X obj 435 318 / 100;
#X obj 435 341 pack 0 50;
#X obj 168 453 +~;
#X text 388 410 modulating;
#X text 388 430 oscillator;
#X text 40 452 both phases-->;
#X text 9 435 add modulator to;
#X obj 233 632 output~;
#X obj 232 601 hip~;
#N canvas 122 211 558 609 fft 0;
#X obj 23 55 inlet~;
#X obj 210 303 inlet;
#X obj 27 215 rfft~;
#X obj 27 248 *~;
#X obj 58 248 *~;
#X obj 27 278 sqrt~;
#X obj 334 200 block~ 4096 1;
#X obj 27 304 biquad~ 0 0 0 0 1;
#X text 91 216 Fourier series;
#X text 96 269 magnitude;
#X text 94 254 calculate;
#X text 21 3 This subpatch computes the spectrum of the incoming signal
with a (rectangular windowed) FFT. FFTs aren't properly introduced
until much later.;
#X text 83 61 signal to analyze;
#X text 195 255 delay two samples;
#X text 193 273 for better graphing;
#X obj 292 79 samplerate~;
#X obj 240 352 metro 500;
#X obj 240 329 inlet;
#X text 293 327 toggle to graph repeatedly;
#X text 264 303 bang to graph once;
#X obj 27 328 /~ 4096;
#X obj 292 54 bang~;
#X msg 211 413 \; pd dsp 1;
#X obj 237 390 tabwrite~ F10-spectrum;
#X obj 292 102 / 4096;
#X obj 58 135 osc~;
#X obj 58 163 +~ 1;
#X obj 28 188 *~;
#X text 113 138 hanning window;
#X obj 254 79 0.5;
#X connect 0 0 27 0;
#X connect 1 0 22 0;
#X connect 1 0 23 0;
#X connect 2 0 3 0;
#X connect 2 0 3 1;
#X connect 2 1 4 0;
#X connect 2 1 4 1;
#X connect 3 0 5 0;
#X connect 4 0 5 0;
#X connect 5 0 7 0;
#X connect 7 0 20 0;
#X connect 15 0 24 0;
#X connect 16 0 23 0;
#X connect 17 0 16 0;
#X connect 17 0 22 0;
#X connect 20 0 23 0;
#X connect 21 0 15 0;
#X connect 21 0 29 0;
#X connect 24 0 25 0;
#X connect 25 0 26 0;
#X connect 26 0 27 1;
#X connect 27 0 2 0;
#X connect 29 0 25 1;
#X restore 286 601 pd fft;
#X obj 346 580 bng 18 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
-1;
#X obj 346 601 tgl 18 0 empty empty empty 0 -6 0 8 -262144 -1 -1 1
1;
#X text 367 600 <-- repeatedly;
#X text 368 580 <-- graph once;
#X text 580 663 updated for Pd version 0.37;
#N canvas 0 0 450 300 graph1 0;
#X array F10-spectrum 259 float 0;
#X coords 0 0.51 258 -0.008 256 130 1;
#X restore 560 386 graph;
#X text 552 517 0;
#X obj 207 565 +~;
#X text 31 30 We can apply the two-cosine method to FM synthesis to
get FM spectra which slide up and down: we just treat the cosines like
carrier signals in an FM instrument. This doesn't work as well as you'd
wish \, because the phases of the partials of the two FM instruments
don't line up \, so that \, for indices of modulation above about 20%
\, you get beating effects as the center frequency goes up and down.
;
#X text 614 527 -- frequency --;
#X text 792 518 2700;
#X connect 0 0 6 1;
#X connect 0 0 45 0;
#X connect 1 0 30 0;
#X connect 2 0 6 0;
#X connect 3 0 4 1;
#X connect 3 0 7 1;
#X connect 4 0 1 1;
#X connect 5 0 2 0;
#X connect 6 0 7 0;
#X connect 7 0 45 1;
#X connect 8 0 4 0;
#X connect 8 0 3 0;
#X connect 10 0 11 0;
#X connect 11 0 17 0;
#X connect 13 0 8 0;
#X connect 17 0 13 0;
#X connect 18 0 8 1;
#X connect 18 0 25 0;
#X connect 18 0 1 0;
#X connect 18 0 5 1;
#X connect 19 0 18 0;
#X connect 24 0 28 0;
#X connect 25 0 27 0;
#X connect 26 0 27 1;
#X connect 27 0 30 1;
#X connect 28 0 29 0;
#X connect 29 0 26 0;
#X connect 30 0 5 0;
#X connect 30 0 0 0;
#X connect 36 0 35 0;
#X connect 36 0 35 1;
#X connect 38 0 37 1;
#X connect 39 0 37 2;
#X connect 45 0 36 0;
#X connect 45 0 37 0;

View file

@ -0,0 +1,126 @@
#N canvas 60 64 790 527 12;
#X obj 122 381 cos~;
#X floatatom 173 184 4 0 200 0 - - -;
#X obj 173 207 / 10;
#X text 173 103 center;
#X text 173 123 freq. (in;
#X text 173 143 tenths of;
#X text 173 163 fundamental);
#X floatatom 70 192 4 0 0 0 - - -;
#X text 46 145 fundamental;
#X text 46 165 (= mod freq);
#X text 251 208 index;
#X text 251 228 (percent);
#X floatatom 251 249 4 0 500 0 - - -;
#X obj 251 318 line~;
#X obj 201 338 *~;
#X obj 251 272 / 100;
#X obj 251 295 pack 0 50;
#X obj 122 358 +~;
#X text 204 364 modulating;
#X text 209 381 oscillator;
#X obj 123 459 output~;
#X obj 122 428 hip~;
#N canvas 122 211 558 609 fft 0;
#X obj 23 55 inlet~;
#X obj 210 303 inlet;
#X obj 27 215 rfft~;
#X obj 27 248 *~;
#X obj 58 248 *~;
#X obj 27 278 sqrt~;
#X obj 334 200 block~ 4096 1;
#X obj 27 304 biquad~ 0 0 0 0 1;
#X text 91 216 Fourier series;
#X text 96 269 magnitude;
#X text 94 254 calculate;
#X text 21 3 This subpatch computes the spectrum of the incoming signal
with a (rectangular windowed) FFT. FFTs aren't properly introduced
until much later.;
#X text 83 61 signal to analyze;
#X text 195 255 delay two samples;
#X text 193 273 for better graphing;
#X obj 292 79 samplerate~;
#X obj 240 352 metro 500;
#X obj 240 329 inlet;
#X text 293 327 toggle to graph repeatedly;
#X text 264 303 bang to graph once;
#X obj 27 328 /~ 4096;
#X obj 292 54 bang~;
#X msg 211 413 \; pd dsp 1;
#X obj 292 102 / 4096;
#X obj 58 135 osc~;
#X obj 58 163 +~ 1;
#X obj 28 188 *~;
#X text 113 138 hanning window;
#X obj 254 79 0.5;
#X obj 240 390 tabwrite~ F11-spectrum;
#X connect 0 0 26 0;
#X connect 1 0 22 0;
#X connect 1 0 29 0;
#X connect 2 0 3 0;
#X connect 2 0 3 1;
#X connect 2 1 4 0;
#X connect 2 1 4 1;
#X connect 3 0 5 0;
#X connect 4 0 5 0;
#X connect 5 0 7 0;
#X connect 7 0 20 0;
#X connect 15 0 23 0;
#X connect 16 0 29 0;
#X connect 17 0 16 0;
#X connect 17 0 22 0;
#X connect 20 0 29 0;
#X connect 21 0 15 0;
#X connect 21 0 28 0;
#X connect 23 0 24 0;
#X connect 24 0 25 0;
#X connect 25 0 26 1;
#X connect 26 0 2 0;
#X connect 28 0 24 1;
#X restore 176 428 pd fft;
#X obj 236 407 bng 18 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
-1;
#X obj 236 428 tgl 18 0 empty empty empty 0 -6 0 8 -262144 -1 -1 0
1;
#X text 257 427 <-- repeatedly;
#X text 258 407 <-- graph once;
#X text 530 479 updated for Pd version 0.37;
#N canvas 0 0 450 300 graph1 0;
#X array F11-spectrum 259 float 0;
#X coords 0 0.51 258 -0.008 256 130 1;
#X restore 514 291 graph;
#X text 506 422 0;
#X text 568 432 -- frequency --;
#X text 743 427 2700;
#X obj 173 256 *;
#X obj 173 233 t b f;
#X obj 201 315 osc~;
#X obj 122 322 phasor~;
#X text 31 30 Here's what happens if you just slide the carrier frequency
around. The spectrum moves up and down all right \, but is only periodic
at the original period when the center frequency roosts on a harmonic.
;
#X text 50 308 carrier;
#X text 24 325 oscillator;
#X text 167 6 HOW NOT TO APPLY TWO-COSINE CARRIER TO FM;
#X connect 0 0 21 0;
#X connect 0 0 22 0;
#X connect 1 0 2 0;
#X connect 2 0 33 0;
#X connect 7 0 32 0;
#X connect 7 0 34 0;
#X connect 12 0 15 0;
#X connect 13 0 14 1;
#X connect 14 0 17 1;
#X connect 15 0 16 0;
#X connect 16 0 13 0;
#X connect 17 0 0 0;
#X connect 21 0 20 0;
#X connect 21 0 20 1;
#X connect 23 0 22 1;
#X connect 24 0 22 2;
#X connect 32 0 35 0;
#X connect 33 0 32 0;
#X connect 33 1 32 1;
#X connect 34 0 14 0;
#X connect 35 0 17 0;

View file

@ -0,0 +1,226 @@
#N canvas 262 0 692 819 12;
#X obj 38 593 cos~;
#X obj 38 570 *~;
#X obj 81 593 cos~;
#X obj 137 527 wrap~;
#X obj 101 527 -~;
#X obj 81 570 +~;
#X obj 74 623 -~;
#X obj 94 655 *~;
#X obj 56 655 +~;
#X obj 100 500 samphold~;
#X floatatom 159 378 4 0 500 0 - - -;
#X obj 159 401 / 10;
#X text 157 311 center;
#X obj 159 449 line~;
#X text 157 359 fundamental);
#X obj 159 426 pack 0 50;
#X obj 39 446 phasor~;
#X floatatom 39 425 4 0 0 0 - - -;
#X text 19 398 fundamental;
#X text 303 460 index;
#X text 303 477 (percent);
#X floatatom 303 498 4 0 500 0 - - -;
#X obj 303 544 line~;
#X obj 224 564 *~;
#X obj 303 521 pack 0 50;
#N canvas 0 0 450 300 graph4 0;
#X array bell-curve 200 float 1;
#A 0 1.12535e-07 1.54727e-07 2.12059e-07 2.89706e-07 3.94519e-07 5.35535e-07
7.24633e-07 9.77371e-07 1.31404e-06 1.76105e-06 2.35258e-06 3.13275e-06
4.15832e-06 5.50199e-06 7.25659e-06 9.54016e-06 1.25023e-05 1.63317e-05
2.1266e-05 2.76026e-05 3.57128e-05 4.60584e-05 5.92113e-05 7.58768e-05
9.69224e-05 0.00012341 0.000156634 0.000198167 0.000249912 0.000314163
0.000393669 0.000491721 0.000612231 0.000759842 0.000940028 0.00115923
0.00142498 0.00174605 0.00213263 0.00259648 0.00315111 0.00381201 0.00459678
0.0055254 0.0066204 0.00790705 0.0094136 0.0111714 0.013215 0.0155826
0.0183156 0.0214592 0.0250621 0.0291763 0.0338573 0.0391639 0.0451575
0.0519019 0.0594631 0.0679081 0.0773047 0.0877205 0.0992216 0.111872
0.125732 0.140858 0.1573 0.1751 0.194291 0.214896 0.236928 0.260383
0.285247 0.311486 0.339053 0.367879 0.397882 0.428956 0.46098 0.493812
0.527292 0.561244 0.595473 0.62977 0.663916 0.697676 0.730811 0.763074
0.794216 0.823987 0.852144 0.878447 0.902668 0.924595 0.944027 0.960789
0.974725 0.985703 0.99362 0.998401 1 0.998401 0.99362 0.985703 0.974725
0.960789 0.944027 0.924595 0.902668 0.878447 0.852144 0.823987 0.794216
0.763074 0.730811 0.697676 0.663916 0.62977 0.595473 0.561244 0.527292
0.493812 0.46098 0.428956 0.397882 0.367879 0.339053 0.311486 0.285247
0.260383 0.236928 0.214896 0.194291 0.1751 0.1573 0.140858 0.125732
0.111872 0.0992216 0.0877205 0.0773047 0.0679081 0.0594631 0.0519019
0.0451575 0.0391639 0.0338573 0.0291763 0.0250621 0.0214592 0.0183156
0.0155826 0.013215 0.0111714 0.0094136 0.00790705 0.0066204 0.0055254
0.00459678 0.00381201 0.00315111 0.00259648 0.00213263 0.00174605 0.00142498
0.00115923 0.000940028 0.000759842 0.000612231 0.000491721 0.000393669
0.000314163 0.000249912 0.000198167 0.000156634 0.00012341 9.69224e-05
7.58768e-05 5.92113e-05 4.60584e-05 3.57128e-05 2.76026e-05 2.1266e-05
1.63317e-05 1.25023e-05 9.54016e-06 7.25659e-06 5.50199e-06 4.15832e-06
3.13275e-06 2.35258e-06 1.76105e-06 1.31404e-06 9.77371e-07 7.24633e-07
5.35535e-07 3.94519e-07 2.89706e-07 2.12059e-07 1.54727e-07;
#X coords 0 1 199 0 200 140 1;
#X restore 443 555 graph;
#N canvas 94 264 600 388 make-table 0;
#X msg 81 44 bang;
#X obj 81 73 t b b;
#X obj 159 142 f;
#X obj 197 142 + 1;
#X msg 175 112 0;
#X obj 81 102 until;
#X obj 161 177 t f f;
#X obj 76 306 tabwrite bell-curve;
#X obj 52 270 expr exp(-$f1*$f1);
#X obj 63 168 sel 199;
#X obj 51 241 expr ($f1-100)/25;
#X connect 0 0 1 0;
#X connect 1 0 5 0;
#X connect 1 1 4 0;
#X connect 2 0 3 0;
#X connect 2 0 6 0;
#X connect 2 0 9 0;
#X connect 3 0 2 1;
#X connect 4 0 2 1;
#X connect 5 0 2 0;
#X connect 6 0 10 0;
#X connect 6 1 7 1;
#X connect 8 0 7 0;
#X connect 9 0 5 1;
#X connect 10 0 8 0;
#X restore 507 515 pd make-table;
#X obj 224 541 cos~;
#X obj 224 518 -~ 0.25;
#X obj 224 587 +~ 100;
#X obj 224 610 tabread4~ bell-curve;
#X obj 95 684 *~;
#X text 131 682 <--ring mod step;
#X text 256 635 waveshaper;
#X text 425 791 updated for Pd version 0.37;
#X text 157 326 frequency;
#X text 157 342 (tenths of;
#X text 441 698 0;
#X text 632 697 200;
#N canvas 0 0 450 300 graph1 0;
#X array F12-spectrum 259 float 0;
#X coords 0 0.51 258 -0.008 256 130 1;
#X restore 421 308 graph;
#X text 418 440 0;
#X text 475 444 -- frequency --;
#X text 644 441 2700;
#X obj 95 756 output~;
#X obj 94 725 hip~;
#N canvas 122 211 558 609 fft 0;
#X obj 23 55 inlet~;
#X obj 210 303 inlet;
#X obj 27 215 rfft~;
#X obj 27 248 *~;
#X obj 58 248 *~;
#X obj 27 278 sqrt~;
#X obj 334 200 block~ 4096 1;
#X obj 27 304 biquad~ 0 0 0 0 1;
#X text 91 216 Fourier series;
#X text 96 269 magnitude;
#X text 94 254 calculate;
#X text 21 3 This subpatch computes the spectrum of the incoming signal
with a (rectangular windowed) FFT. FFTs aren't properly introduced
until much later.;
#X text 83 61 signal to analyze;
#X text 195 255 delay two samples;
#X text 193 273 for better graphing;
#X obj 292 79 samplerate~;
#X obj 240 352 metro 500;
#X obj 240 329 inlet;
#X text 293 327 toggle to graph repeatedly;
#X text 264 303 bang to graph once;
#X obj 27 328 /~ 4096;
#X obj 292 54 bang~;
#X msg 211 413 \; pd dsp 1;
#X obj 292 102 / 4096;
#X obj 58 135 osc~;
#X obj 58 163 +~ 1;
#X obj 28 188 *~;
#X text 113 138 hanning window;
#X obj 254 79 0.5;
#X obj 240 390 tabwrite~ F12-spectrum;
#X connect 0 0 26 0;
#X connect 1 0 22 0;
#X connect 1 0 29 0;
#X connect 2 0 3 0;
#X connect 2 0 3 1;
#X connect 2 1 4 0;
#X connect 2 1 4 1;
#X connect 3 0 5 0;
#X connect 4 0 5 0;
#X connect 5 0 7 0;
#X connect 7 0 20 0;
#X connect 15 0 23 0;
#X connect 16 0 29 0;
#X connect 17 0 16 0;
#X connect 17 0 22 0;
#X connect 20 0 29 0;
#X connect 21 0 15 0;
#X connect 21 0 28 0;
#X connect 23 0 24 0;
#X connect 24 0 25 0;
#X connect 25 0 26 1;
#X connect 26 0 2 0;
#X connect 28 0 24 1;
#X restore 148 725 pd fft;
#X obj 208 704 bng 18 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
-1;
#X obj 208 725 tgl 18 0 empty empty empty 0 -6 0 8 -262144 -1 -1 1
1;
#X text 229 724 <-- repeatedly;
#X text 230 704 <-- graph once;
#X text 17 21 Instead of using the two cosines as FM carrier oscillators
\, we can use them as ring modulators for a natural or synthetic tone.
Here we use waveshaping - to wit \, a sinusoid looking up a Gaussian
bell curve. This has the nice properties that the partials are always
positive cosines in phase \, and the spectrum spreads out smoothly
as the index changes.;
#X text 98 1 PAF: TWO-COSINE RING MODULATOR FOR WAVESHAPER;
#X text 17 253 Then with ~* we do the ring modulation and we're done.
This is the PAF (phase-aligned formant) synthesis algorithm (patented
1993 by IRCAM).;
#X obj 224 492 *~ 0.5;
#X text 17 129 For phase coherency \, the waveshaper and the cosine
pair are driven from the same phasor~ object. Since the waveshaping
is done using a symmetric curve \, its output is at double the frequency
of the input. So for each cycle of the phasor we compute a half-cycle
of the sine function (by multiplying by 0.5 and subtracting 0.25 before
the cosine lookup). We center the cosine output for lookup in a 200-point
table containing a bell curve.;
#X connect 0 0 6 1;
#X connect 0 0 8 0;
#X connect 1 0 5 0;
#X connect 1 0 0 0;
#X connect 2 0 6 0;
#X connect 3 0 4 1;
#X connect 3 0 7 1;
#X connect 4 0 1 1;
#X connect 5 0 2 0;
#X connect 6 0 7 0;
#X connect 7 0 8 1;
#X connect 8 0 31 0;
#X connect 9 0 4 0;
#X connect 9 0 3 0;
#X connect 10 0 11 0;
#X connect 11 0 15 0;
#X connect 13 0 9 0;
#X connect 15 0 13 0;
#X connect 16 0 9 1;
#X connect 16 0 5 1;
#X connect 16 0 1 0;
#X connect 16 0 53 0;
#X connect 17 0 16 0;
#X connect 21 0 24 0;
#X connect 22 0 23 1;
#X connect 23 0 29 0;
#X connect 24 0 22 0;
#X connect 27 0 23 0;
#X connect 28 0 27 0;
#X connect 29 0 30 0;
#X connect 30 0 31 1;
#X connect 31 0 44 0;
#X connect 31 0 45 0;
#X connect 44 0 43 0;
#X connect 44 0 43 1;
#X connect 46 0 45 1;
#X connect 47 0 45 2;
#X connect 53 0 28 0;

View file

@ -0,0 +1,164 @@
#N canvas 89 36 756 792 12;
#X obj 127 608 cos~;
#X obj 127 585 *~;
#X obj 170 608 cos~;
#X obj 225 553 wrap~;
#X obj 189 553 -~;
#X obj 170 585 +~;
#X obj 163 638 -~;
#X obj 183 670 *~;
#X obj 145 670 +~;
#X obj 189 521 samphold~;
#X floatatom 189 321 4 0 127 0 - - -;
#X text 185 283 center;
#X obj 189 388 line~;
#X obj 189 365 pack 0 50;
#X obj 80 464 phasor~;
#X floatatom 80 370 4 0 127 0 - - -;
#X text 71 331 fundamental;
#X floatatom 387 384 4 0 127 0 - - -;
#X obj 387 455 line~;
#X obj 298 584 *~;
#X obj 387 432 pack 0 50;
#N canvas 94 264 600 388 make-table 0;
#X msg 81 44 bang;
#X obj 81 73 t b b;
#X obj 159 142 f;
#X obj 197 142 + 1;
#X msg 175 112 0;
#X obj 81 102 until;
#X obj 161 177 t f f;
#X obj 76 306 tabwrite bell-curve;
#X obj 52 270 expr exp(-$f1*$f1);
#X obj 63 168 sel 199;
#X obj 51 241 expr ($f1-100)/25;
#N canvas 0 0 450 300 graph4 0;
#X array bell-curve 200 float 1;
#A 0 1.12535e-07 1.54727e-07 2.12059e-07 2.89706e-07 3.94519e-07 5.35535e-07
7.24633e-07 9.77371e-07 1.31404e-06 1.76105e-06 2.35258e-06 3.13275e-06
4.15832e-06 5.50199e-06 7.25659e-06 9.54016e-06 1.25023e-05 1.63317e-05
2.1266e-05 2.76026e-05 3.57128e-05 4.60584e-05 5.92113e-05 7.58768e-05
9.69224e-05 0.00012341 0.000156634 0.000198167 0.000249912 0.000314163
0.000393669 0.000491721 0.000612231 0.000759842 0.000940028 0.00115923
0.00142498 0.00174605 0.00213263 0.00259648 0.00315111 0.00381201 0.00459678
0.0055254 0.0066204 0.00790705 0.0094136 0.0111714 0.013215 0.0155826
0.0183156 0.0214592 0.0250621 0.0291763 0.0338573 0.0391639 0.0451575
0.0519019 0.0594631 0.0679081 0.0773047 0.0877205 0.0992216 0.111872
0.125732 0.140858 0.1573 0.1751 0.194291 0.214896 0.236928 0.260383
0.285247 0.311486 0.339053 0.367879 0.397882 0.428956 0.46098 0.493812
0.527292 0.561244 0.595473 0.62977 0.663916 0.697676 0.730811 0.763074
0.794216 0.823987 0.852144 0.878447 0.902668 0.924595 0.944027 0.960789
0.974725 0.985703 0.99362 0.998401 1 0.998401 0.99362 0.985703 0.974725
0.960789 0.944027 0.924595 0.902668 0.878447 0.852144 0.823987 0.794216
0.763074 0.730811 0.697676 0.663916 0.62977 0.595473 0.561244 0.527292
0.493812 0.46098 0.428956 0.397882 0.367879 0.339053 0.311486 0.285247
0.260383 0.236928 0.214896 0.194291 0.1751 0.1573 0.140858 0.125732
0.111872 0.0992216 0.0877205 0.0773047 0.0679081 0.0594631 0.0519019
0.0451575 0.0391639 0.0338573 0.0291763 0.0250621 0.0214592 0.0183156
0.0155826 0.013215 0.0111714 0.0094136 0.00790705 0.0066204 0.0055254
0.00459678 0.00381201 0.00315111 0.00259648 0.00213263 0.00174605 0.00142498
0.00115923 0.000940028 0.000759842 0.000612231 0.000491721 0.000393669
0.000314163 0.000249912 0.000198167 0.000156634 0.00012341 9.69224e-05
7.58768e-05 5.92113e-05 4.60584e-05 3.57128e-05 2.76026e-05 2.1266e-05
1.63317e-05 1.25023e-05 9.54016e-06 7.25659e-06 5.50199e-06 4.15832e-06
3.13275e-06 2.35258e-06 1.76105e-06 1.31404e-06 9.77371e-07 7.24633e-07
5.35535e-07 3.94519e-07 2.89706e-07 2.12059e-07 1.54727e-07;
#X coords 0 1 199 0 200 140 1;
#X restore 342 85 graph;
#X connect 0 0 1 0;
#X connect 1 0 5 0;
#X connect 1 1 4 0;
#X connect 2 0 3 0;
#X connect 2 0 6 0;
#X connect 2 0 9 0;
#X connect 3 0 2 1;
#X connect 4 0 2 1;
#X connect 5 0 2 0;
#X connect 6 0 10 0;
#X connect 6 1 7 1;
#X connect 8 0 7 0;
#X connect 9 0 5 1;
#X connect 10 0 8 0;
#X restore 536 647 pd make-table;
#X obj 298 558 cos~;
#X obj 298 533 -~ 0.25;
#X obj 298 610 +~ 100;
#X obj 298 633 tabread4~ bell-curve;
#X obj 184 699 *~;
#X text 330 658 waveshaper;
#X text 31 2 CHANGING PAF CONTROLS TO NATURAL UNITS;
#X obj 80 394 mtof;
#X obj 211 413 expr 1/$f1;
#X obj 189 341 mtof;
#X text 184 298 freq.;
#X obj 189 437 *~;
#X text 385 357 bandwidth;
#X obj 387 406 mtof;
#X obj 387 491 *~;
#X obj 387 515 *~ 25;
#X text 18 23 The more "natural" units for describing a formant might
be center frequency and bandwidth \, so that you can change the fundamental
without having the formant shift up and down in parallel. Here all
three frequencies are expressed in MIDI units. The bandwidth and center
frequency have to be divided by the fundamental (the expr 1/$f1 takes
its reciprocal and two *~ objects finish the division.);
#X text 427 490 divide by fundamental;
#X text 445 514 range for table;
#X text 364 609 offset to middle of table;
#X text 196 459 C.F. relative;
#X text 197 475 to fundamental;
#X text 69 346 (MIDI units);
#X text 220 697 ring mod;
#X obj 184 726 output~;
#X text 483 762 updated for Pd version 0.37;
#X text 19 137 Here we take a somewhat lax approach to sampholding
the center frequency control. The frequency itself changes instantly
\, but the center/fundamental frequency ratio waits for the next period.
This gives a slight "chirp" if the fundamental is abruptly raised a
couple of octaves. There's no easy way using Pd's built-in primitives
to avoid this. Note however that there's a "paf~" extern available
which solves this problem better and \, moreover \, runs much faster.
;
#X obj 298 508 *~ 0.5;
#X connect 0 0 6 1;
#X connect 0 0 8 0;
#X connect 1 0 5 0;
#X connect 1 0 0 0;
#X connect 2 0 6 0;
#X connect 3 0 4 1;
#X connect 3 0 7 1;
#X connect 4 0 1 1;
#X connect 5 0 2 0;
#X connect 6 0 7 0;
#X connect 7 0 8 1;
#X connect 8 0 26 0;
#X connect 9 0 4 0;
#X connect 9 0 3 0;
#X connect 10 0 31 0;
#X connect 12 0 33 0;
#X connect 13 0 12 0;
#X connect 14 0 9 1;
#X connect 14 0 1 0;
#X connect 14 0 5 1;
#X connect 14 0 49 0;
#X connect 15 0 29 0;
#X connect 17 0 35 0;
#X connect 18 0 36 0;
#X connect 19 0 24 0;
#X connect 20 0 18 0;
#X connect 22 0 19 0;
#X connect 23 0 22 0;
#X connect 24 0 25 0;
#X connect 25 0 26 1;
#X connect 26 0 46 0;
#X connect 26 0 46 1;
#X connect 29 0 30 0;
#X connect 29 0 14 0;
#X connect 30 0 33 1;
#X connect 30 0 36 1;
#X connect 31 0 13 0;
#X connect 33 0 9 0;
#X connect 35 0 20 0;
#X connect 36 0 37 0;
#X connect 37 0 19 1;
#X connect 49 0 23 0;

View file

@ -0,0 +1,112 @@
#N canvas 448 73 647 779 12;
#X floatatom 272 241 4 0 127 0 - - -;
#X text 268 203 center;
#X obj 272 308 line~;
#X obj 272 285 pack 0 50;
#X floatatom 205 246 4 0 127 0 - - -;
#X text 153 204 fundamental;
#X floatatom 397 252 4 0 127 0 - - -;
#X obj 397 323 line~;
#X obj 132 586 *~;
#X obj 397 300 pack 0 50;
#X obj 132 635 cos~;
#X obj 206 310 mtof;
#X obj 294 333 expr 1/$f1;
#X obj 272 261 mtof;
#X text 267 218 freq.;
#X obj 272 357 *~;
#X text 394 231 bandwidth;
#X obj 397 274 mtof;
#X obj 396 366 *~;
#X text 437 358 divide by fundamental;
#X text 149 220 (MIDI units);
#X obj 136 720 output~;
#X text 91 2 WAVE PACKETS AS ALTERNATIVE TO PAF;
#X obj 79 421 phasor~;
#X obj 471 479 +~ 0.5;
#X obj 471 504 wrap~;
#X text 442 424 second phase signal;
#X text 443 439 out of phase from;
#X text 441 456 first one;
#X obj 132 658 +~ 1;
#X obj 78 522 -~ 0.5;
#X obj 135 692 +~;
#X obj 77 586 *~;
#X obj 77 609 cos~;
#X obj 214 556 samphold~;
#X obj 126 555 samphold~;
#X obj 76 634 *~;
#X obj 132 610 clip~ -0.5 0.5;
#X obj 372 597 *~;
#X obj 372 646 cos~;
#X obj 372 669 +~ 1;
#X obj 318 533 -~ 0.5;
#X obj 317 597 *~;
#X obj 317 620 cos~;
#X obj 454 567 samphold~;
#X obj 366 566 samphold~;
#X obj 316 645 *~;
#X obj 372 621 clip~ -0.5 0.5;
#X obj 396 390 max~ 1;
#X obj 205 285 - 12;
#X text 375 755 updated for Pd version 0.40.;
#X text 20 122 The patch is almost exactly like B13 (the overlapping
sample) except that \, instead of using tabread~ we just use cos~ \,
and that we control pulse width (for bandwidth) as well as wavetable
transposition (for center frequency).;
#X text 18 23 The stretched wavetable method is an alternative to the
PAF generator \, slightly more expensive in processing time but with
two advantages: first \, it is not patent encumbered (PAF patent runs
out in 2011) and second \, it can be generalized to use samples instead
of sinusoids to make complex spectral shapes.;
#X connect 0 0 13 0;
#X connect 2 0 15 0;
#X connect 3 0 2 0;
#X connect 4 0 49 0;
#X connect 6 0 17 0;
#X connect 7 0 18 0;
#X connect 8 0 37 0;
#X connect 9 0 7 0;
#X connect 10 0 29 0;
#X connect 11 0 12 0;
#X connect 11 0 23 0;
#X connect 12 0 15 1;
#X connect 12 0 18 1;
#X connect 13 0 3 0;
#X connect 15 0 35 0;
#X connect 15 0 45 0;
#X connect 17 0 9 0;
#X connect 18 0 48 0;
#X connect 23 0 24 0;
#X connect 23 0 30 0;
#X connect 23 0 35 1;
#X connect 23 0 34 1;
#X connect 24 0 25 0;
#X connect 25 0 41 0;
#X connect 25 0 45 1;
#X connect 25 0 44 1;
#X connect 29 0 36 1;
#X connect 30 0 8 0;
#X connect 30 0 32 0;
#X connect 31 0 21 0;
#X connect 31 0 21 1;
#X connect 32 0 33 0;
#X connect 33 0 36 0;
#X connect 34 0 8 1;
#X connect 35 0 32 1;
#X connect 36 0 31 0;
#X connect 37 0 10 0;
#X connect 38 0 47 0;
#X connect 39 0 40 0;
#X connect 40 0 46 1;
#X connect 41 0 38 0;
#X connect 41 0 42 0;
#X connect 42 0 43 0;
#X connect 43 0 46 0;
#X connect 44 0 38 1;
#X connect 45 0 42 1;
#X connect 46 0 31 1;
#X connect 47 0 39 0;
#X connect 48 0 34 0;
#X connect 48 0 44 0;
#X connect 49 0 11 0;

View file

@ -0,0 +1,48 @@
#N canvas 19 35 777 377 12;
#X text 103 7 DELAYS;
#X text 248 79 The delwrite~ object creates the delay line \; you give
it a name and a size in milliseconds. Each delwrite~ should have a
different name.;
#N canvas 0 0 548 248 sample 0;
#N canvas 0 0 450 300 graph1 0;
#X array G01-tab 61079 float 0;
#X coords 0 1 61078 -1 200 140 1;
#X restore 100 20 graph;
#X obj 61 176 loadbang;
#X obj 60 221 soundfiler;
#X msg 61 199 read -resize ../sound/voice.wav G01-tab;
#X connect 1 0 3 0;
#X connect 3 0 2 0;
#X restore 253 337 pd sample;
#X floatatom 38 196 4 0 999 0 - - -;
#X text 81 195 <-- delay time;
#X text 46 230 read from delay line;
#X obj 38 249 delread~ delay1;
#X obj 14 87 tabplay~ G01-tab;
#X obj 14 63 metro 1000;
#X obj 14 39 loadbang;
#X text 40 146 write to delay line;
#X obj 16 303 output~;
#X obj 15 275 +~;
#X obj 24 165 delwrite~ delay1 1000;
#X text 499 348 updated for Pd version 0.37-1;
#X text 248 24 You can delay a signal using the delwrite~ and delread~
objects. In this example \, a sample loops continuously and is added
to a delayed copy of itself.;
#X text 247 215 The delread~ object always delays the signal an integer
number of samples and does no interpolation.;
#X text 28 107 test signal to delay;
#X text 248 130 Delread~'s arguments are the name of a delwrite (of
which there should be exactly one) and an optional delay time in milliseconds
between 0 and the length of the delay line. Each delwrite~ may have
as many delread~s as you wish \, which can then function as multiple
delay taps.;
#X text 114 209 (msec);
#X connect 3 0 6 0;
#X connect 6 0 12 1;
#X connect 7 0 12 0;
#X connect 7 0 13 0;
#X connect 8 0 7 0;
#X connect 9 0 8 0;
#X connect 12 0 11 0;
#X connect 12 0 11 1;

View file

@ -0,0 +1,44 @@
#N canvas 130 225 601 527 12;
#X floatatom 36 197 5 -30 130 0 - - -;
#X floatatom 58 322 0 0 0 0 - - -;
#X text 88 196 <-- pitch;
#X text 88 321 <-- delay time;
#X text 287 420 write to delay line;
#X text 246 346 read from delay line;
#X text 72 393 add the original and the delayed signal;
#X obj 36 233 mtof;
#X msg 111 233 1;
#X obj 37 282 *~;
#X obj 37 394 +~;
#X obj 58 370 *~ 0.7;
#X text 116 370 feedback gain;
#X text 57 9 DELAYS WITH FEEDBACK;
#X text 33 39 You can feed the result of a delread~ module back into
its own delwrite~ \, as long as you're careful about stability. For
delays below 30 msec \, you can frequently hear the resonant pitch.
For longer delay times you get the famous old delay loop effect.;
#X obj 111 281 *~;
#X obj 111 257 adsr 1 100 1000 0 1000;
#X obj 37 463 output~;
#X text 32 118 We've added an amplitude control here so that the test
oscillator only speaks while you're dragging the pitch up and down.
Be sure to try shift-dragging on the pitch control.;
#X text 330 495 updated for Pd version 0.37-1;
#X obj 36 257 phasor~;
#X obj 58 346 delread~ G02-del 160;
#X obj 77 419 delwrite~ G02-del 2000;
#X connect 0 0 7 0;
#X connect 0 0 8 0;
#X connect 1 0 21 0;
#X connect 7 0 20 0;
#X connect 8 0 16 0;
#X connect 9 0 10 0;
#X connect 10 0 17 0;
#X connect 10 0 17 1;
#X connect 10 0 22 0;
#X connect 11 0 10 1;
#X connect 15 0 9 1;
#X connect 16 0 15 0;
#X connect 16 0 15 1;
#X connect 20 0 9 0;
#X connect 21 0 11 0;

View file

@ -0,0 +1,77 @@
#N canvas 100 17 660 504 12;
#X obj 33 305 hip~ 10;
#X floatatom 301 221 0 0 0 0 - - -;
#X obj 301 269 line~;
#X obj 301 245 pack 0 100;
#X floatatom 226 191 0 0 0 0 - - -;
#X floatatom 382 297 0 0 0 0 - - -;
#X obj 382 369 line~;
#X obj 382 345 pack 0 100;
#X obj 382 321 * 0.01;
#X floatatom 113 166 0 0 0 0 - - -;
#X obj 113 237 line~;
#X obj 113 213 pack 0 100;
#X obj 33 257 *~;
#X obj 33 281 cos~;
#X floatatom 33 134 0 0 0 0 - - -;
#X obj 33 158 mtof;
#X obj 33 182 * 0.5;
#X obj 33 329 clip~ -0.2 0.2;
#X obj 113 189 * 0.01;
#X obj 33 353 +~;
#X obj 361 395 *~;
#X obj 226 287 *~;
#X obj 226 215 / 100;
#X obj 33 377 hip~ 5;
#X obj 226 263 +~ 1;
#X obj 226 239 osc~ 0;
#X obj 226 311 +~ 1.46;
#X text 154 164 <-- timbre;
#X text 66 135 <-- pitch;
#X text 279 191 <-- cycle frequency (hundredths);
#X text 354 222 <-- cycle depth (msec);
#X text 431 298 <-- feedback (hundredths);
#X text 89 6 VARIABLE DELAYS;
#X obj 33 206 osc~ 0;
#X text 46 32 This is a fuzzed FM generator going into a delay loop
\, this time using a variable delay object (vd~). You can get several
interesting effects this way. We have taken the precaution of clipping
inside the loop to avoid instabilities. You can push the loop gain
past 1 if you want \, it will just oscillate.;
#X obj 32 409 output~;
#X obj 226 335 vd~ G03-del;
#X obj 361 443 delwrite~ G03-del 1000;
#X obj 361 419 clip~ -1 1;
#X text 387 481 updated for Pd version 0.37-1;
#X connect 0 0 17 0;
#X connect 1 0 3 0;
#X connect 2 0 21 1;
#X connect 3 0 2 0;
#X connect 4 0 22 0;
#X connect 5 0 8 0;
#X connect 6 0 20 1;
#X connect 7 0 6 0;
#X connect 8 0 7 0;
#X connect 9 0 18 0;
#X connect 10 0 12 1;
#X connect 11 0 10 0;
#X connect 12 0 13 0;
#X connect 13 0 0 0;
#X connect 14 0 15 0;
#X connect 15 0 16 0;
#X connect 16 0 33 0;
#X connect 17 0 19 0;
#X connect 18 0 11 0;
#X connect 19 0 23 0;
#X connect 20 0 38 0;
#X connect 21 0 26 0;
#X connect 22 0 25 0;
#X connect 23 0 20 0;
#X connect 23 0 35 0;
#X connect 23 0 35 1;
#X connect 24 0 21 0;
#X connect 25 0 24 0;
#X connect 26 0 36 0;
#X connect 33 0 12 0;
#X connect 36 0 19 1;
#X connect 38 0 37 0;

View file

@ -0,0 +1,79 @@
#N canvas 100 17 637 513 12;
#N canvas 195 311 647 354 delay-writer 0;
#X obj 86 220 inlet~;
#X obj 86 326 outlet~;
#X obj 392 197 block~ 1;
#X obj 164 267 *~ 0.99;
#X obj 87 272 +~;
#X obj 165 221 inlet;
#X text 80 7 Because of the feedback \, the delwrite~ has to be computed
after the delread~. So we set the blocksize to 1 to minimize the resulting
delay.;
#X text 390 219 this object sets the;
#X text 389 236 block size for audio;
#X text 388 255 computations in this;
#X obj 165 244 delread~ G04-del;
#X obj 98 302 delwrite~ G04-del 1000;
#X text 79 183 incoming;
#X text 81 198 pulses;
#X text 165 182 delay;
#X text 166 197 time;
#X text 388 273 window. Must be a;
#X text 388 292 power of two.;
#X text 77 60 The smaller the blocksize the more expensive the computations
are \, so don't reduce it lower than you have to. Also \, it's a good
idea to isolate the portion of the patch that requires the smaller
block size \, and only run that portion that way. Here \, the pulses
that excite the delay line are computed outside this window \, and
the output level control as well.;
#X connect 0 0 4 0;
#X connect 3 0 4 1;
#X connect 4 0 1 0;
#X connect 4 0 11 0;
#X connect 5 0 10 0;
#X connect 10 0 3 0;
#X restore 153 420 pd delay-writer;
#X obj 283 384 expr 1000/$f1;
#X obj 283 358 mtof;
#X msg 153 355 1;
#X msg 192 355 0;
#X obj 153 254 metro 500;
#X obj 283 304 random 60;
#X obj 153 228 loadbang;
#X obj 283 330 + 30;
#X text 86 9 CONTROLLING DELAY WITH BLOCK~;
#X text 299 420 <-- here is the delay loop;
#X text 63 43 In situations where a delay read feeds back to a delay
write \, the minimum possible delay you can achieve is one block \,
which by default is 64 samples \, or 1.45 msec at 44100 Hz. You can
shorten the minimum delay by changing the block size. Do this in a
subpatch (open it to see how).;
#X obj 153 449 output~;
#X obj 153 387 vline~;
#X text 371 487 updated for Pd version 0.37-1;
#X text 61 124 Here we use this principle to make a harpisichord-like
sound by sending pulses into a recirculating delay line (which imitates
the travel of the wave up and down the harpsichord string.) This is
related to Karplus-Strong synthesis \, but the idea is probably much
older than their paper.;
#X text 33 328 this makes;
#X text 32 346 a rectangular;
#X text 31 384 long.;
#X text 409 366 length of delay line is;
#X text 410 384 1000/(frequency);
#X obj 192 329 del 1;
#X text 32 364 pulse 1 msec;
#X connect 0 0 12 0;
#X connect 0 0 12 1;
#X connect 1 0 0 1;
#X connect 2 0 1 0;
#X connect 3 0 13 0;
#X connect 4 0 13 0;
#X connect 5 0 3 0;
#X connect 5 0 6 0;
#X connect 5 0 21 0;
#X connect 6 0 8 0;
#X connect 7 0 5 0;
#X connect 8 0 2 0;
#X connect 13 0 0 0;
#X connect 21 0 4 0;

View file

@ -0,0 +1,79 @@
#N canvas 100 17 683 605 12;
#X floatatom 424 290 0 0 100 0 - - -;
#X obj 59 404 +~;
#X text 86 9 ORDER OF EXECUTION OF DELWRITE~ AND DELREAD~/VD~;
#X text 42 29 If you're writing to and reading from a delay line \,
you have to get the write sorted before the read or else you'll never
get less than a block's delay. This patch compares a "wrong" flanger
with a "right" one:;
#X text 471 284 <-- delay in samples;
#X obj 94 490 *~;
#X obj 94 466 -~;
#N canvas 0 0 600 400 delay-writer 0;
#X obj 96 107 inlet~;
#X obj 96 180 outlet~;
#X obj 116 144 delwrite~ G05-d2 1000;
#X connect 0 0 1 0;
#X connect 0 0 2 0;
#X restore 283 403 pd delay-writer;
#N canvas 0 0 280 330 delay-reader 0;
#X obj 96 107 inlet~;
#X obj 89 267 outlet~;
#X obj 112 163 inlet~;
#X obj 89 237 +~;
#X obj 112 198 vd~ G05-d2;
#X connect 0 0 3 0;
#X connect 2 0 4 0;
#X connect 3 0 1 0;
#X connect 4 0 3 1;
#X restore 282 431 pd delay-reader;
#X obj 59 490 +~;
#X obj 424 313 / 44.1;
#X obj 59 534 output~;
#X obj 135 490 tgl 18 0 empty empty empty 0 -6 0 8 -262144 -1 -1 1
1;
#X text 159 490 <-- off to hear left-hand side \; on to hear right
hand side.;
#X text 393 575 updated for Pd version 0.37-1;
#X obj 424 337 pack 0 30;
#N canvas 0 0 450 300 pulse 0;
#X obj 64 197 outlet~;
#X obj 63 93 phasor~ 50;
#X obj 63 119 *~ 100;
#X obj 63 144 clip~ 0.75 1.25;
#X obj 64 170 cos~;
#X connect 1 0 2 0;
#X connect 2 0 3 0;
#X connect 3 0 4 0;
#X connect 4 0 0 0;
#X restore 60 302 pd pulse;
#X obj 81 354 delwrite~ G05-d1 1000;
#X obj 82 381 vd~ G05-d1;
#X obj 424 362 line~;
#X text 44 96 To get them to go off in the correct order \, put the
delread~ and vd~ objects in subpatches. The audio connections between
the subpatches force the "reader" to be sorted after the "writer".
DSP sorting in Pd follows the hierarchy of subpatches.;
#X text 43 175 To hear the difference scroll the delay time between
0 and 100 samples. The patch at left doesn't let you get below 64 samples
\, but the patch at right can go all the way down to one sample.;
#X text 45 241 You can use the same strategy to avoid picking up unwanted
64-sample delays in send~/receive~ and throw~/catch~ pairs.;
#X connect 0 0 10 0;
#X connect 1 0 6 1;
#X connect 1 0 9 0;
#X connect 5 0 9 1;
#X connect 6 0 5 0;
#X connect 7 0 8 0;
#X connect 8 0 6 0;
#X connect 9 0 11 0;
#X connect 9 0 11 1;
#X connect 10 0 15 0;
#X connect 12 0 5 1;
#X connect 15 0 19 0;
#X connect 16 0 1 0;
#X connect 16 0 7 0;
#X connect 16 0 17 0;
#X connect 18 0 1 1;
#X connect 19 0 8 1;
#X connect 19 0 18 0;

View file

@ -0,0 +1,114 @@
#N canvas 110 17 775 614 12;
#X obj 463 303 loadbang;
#X obj 553 222 adc~ 1;
#X obj 463 358 soundfiler;
#X obj 31 394 output~;
#X obj 554 269 tabwrite~ E03-table;
#X msg 463 330 read ../sound/voice.wav E03-table;
#X obj 58 83 fiddle~ 2048;
#X obj 126 106 unpack;
#X obj 126 130 moses 1;
#X obj 199 108 mtof;
#N canvas 0 0 446 202 /SUBPATCH/ 0;
#X obj 261 30 tgl 15 0 empty empty empty 0 -6 0 8 -262144 -1 -1 1 1
;
#X obj 100 20 inlet~;
#X obj 99 87 *~;
#X obj 98 159 outlet~;
#X text 381 181 corner;
#X connect 0 0 2 1;
#X connect 1 0 2 0;
#X connect 2 0 3 0;
#X coords 0 0 100 100 40 18 1;
#X restore 77 329 pd;
#N canvas 0 0 446 202 /SUBPATCH/ 0;
#X obj 261 30 tgl 15 0 empty empty empty 0 -6 0 8 -262144 -1 -1 0 1
;
#X obj 100 20 inlet~;
#X obj 99 87 *~;
#X obj 98 159 outlet~;
#X text 381 181 corner;
#X connect 0 0 2 1;
#X connect 1 0 2 0;
#X connect 2 0 3 0;
#X coords 0 0 100 100 40 18 1;
#X restore 31 329 pd;
#N canvas 414 195 613 302 looper 0;
#N canvas 0 0 450 300 graph1 0;
#X array E03-table 44103 float 0;
#X coords 0 1.02 44103 -1.02 200 130 1;
#X restore 349 22 graph;
#X text 347 161 ---- 44103 samples ----;
#X obj 35 77 +~ 1;
#X obj 35 25 phasor~ 1;
#X obj 35 50 *~ 44100;
#X obj 35 106 tabread4~ E03-table;
#X obj 35 132 outlet~;
#X text 46 238 one-second sample reader loop. You can replace this
with an adc~ if you want to go live.;
#X connect 2 0 5 0;
#X connect 3 0 4 0;
#X connect 4 0 2 0;
#X connect 5 0 6 0;
#X restore 31 30 pd looper;
#X text 547 309 re-read original sample;
#X obj 565 246 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
-1;
#X text 584 244 <-- record a sample;
#X text 152 314 on/off for original;
#X text 123 330 <--and processed sounds;
#X text 240 3 OCTAVE DOUBLING VIA VARIABLE COMB FILTER;
#X obj 31 367 +~;
#X obj 252 157 samplerate~;
#X obj 199 156 t f b;
#X obj 59 58 delwrite~ G06-del 100;
#X obj 79 234 delread~ G06-del;
#X obj 101 282 vd~ G06-del;
#X obj 78 306 +~;
#X obj 230 210 +;
#X obj 199 131 expr 500/$f1;
#X obj 230 262 line~;
#X obj 230 239 pack 0 20;
#X text 243 108 fundamental frequency;
#X text 311 131 1/2 period \, in msec;
#X text 286 201 estimate fiddle~ delay;
#X text 491 592 updated for Pd version 0.37-1;
#X text 159 401 We already saw how to use ring modulation to alias
a pitched sound down one octave. Here we do the reverse: filter out
all odd harmonics using a variable-delay comb filter tuned one octave
above the incoming sound. We use two taps into the delay line. The
fixed one (delread~) adjusts for the delayed output of fiddle~. The
variable one (vd~) adds to this an additional delay equal to 1/2 the
measured period of the incoming sound. THese two are added. Odd harmonics
are 180 degrees out of phase at the two taps and cancel. Even harmonics
get through - so the sound goes up an octave \, without denaturing
the timbre as a speed-up would.;
#X obj 252 183 expr 2048000/$f1;
#X text 288 216 as one window (in msec);
#X connect 0 0 5 0;
#X connect 1 0 4 0;
#X connect 5 0 2 0;
#X connect 6 2 7 0;
#X connect 7 0 8 0;
#X connect 8 1 9 0;
#X connect 9 0 27 0;
#X connect 10 0 19 1;
#X connect 11 0 19 0;
#X connect 12 0 6 0;
#X connect 12 0 11 0;
#X connect 12 0 22 0;
#X connect 14 0 4 0;
#X connect 19 0 3 0;
#X connect 19 0 3 1;
#X connect 20 0 35 0;
#X connect 21 0 26 0;
#X connect 21 1 20 0;
#X connect 23 0 25 0;
#X connect 24 0 25 1;
#X connect 25 0 10 0;
#X connect 26 0 29 0;
#X connect 27 0 21 0;
#X connect 28 0 24 0;
#X connect 29 0 28 0;
#X connect 35 0 26 1;
#X connect 35 0 23 0;

View file

@ -0,0 +1,80 @@
#N canvas 159 89 808 531 12;
#X obj 21 438 output~;
#X obj 21 411 +~;
#X obj 33 192 delwrite~ G07-del 30;
#X obj 99 391 line~;
#X obj 63 391 *~;
#X obj 93 335 line~;
#X obj 57 335 *~;
#X obj 80 281 line~;
#X obj 44 281 *~;
#X obj 58 221 line~;
#X obj 22 221 *~;
#X text 51 8 THE "SHAKER";
#X obj 279 86 + 1;
#X obj 279 109 mod 4;
#X obj 244 83 f;
#X obj 284 160 random 1000;
#X obj 244 135 t f b;
#X obj 244 37 tgl 15 0 empty empty empty 0 -6 0 8 -262144 -1 -1 1 1
;
#X floatatom 347 34 5 10 1000 0 - - -;
#X obj 244 242 route 0 1 2 3;
#X obj 44 255 delread~ G07-del 30;
#X obj 23 165 phasor~ 80;
#X obj 57 309 delread~ G07-del 17;
#X obj 63 365 delread~ G07-del 11;
#X obj 347 59 * 4;
#X obj 284 187 expr 2 * $f1/1000 - 0.7;
#X floatatom 23 142 5 30 1000 0 - - -;
#X obj 244 58 metro 50;
#X obj 244 218 pack 0 0 200;
#X text 23 118 frequency;
#X text 225 17 on/off;
#X text 344 13 time constant (msec);
#X text 536 511 updated for Pd version 0.37-1;
#X text 266 306 This is a time-varying comb filter \, combining four
delayed copies of the input signal. The amplitude of each delayed copy
varies randomly between -0.7 and +1.3. Each time the metronome goes
off \, one of the four delay's gains is changed in sequence. The change
occurs over the next four ticks of the metronome (so \, if the metronome
ticks every 50 msec \, each message to a line~ has a second argument
of 200.);
#X text 268 424 Any collection of four gains for the four delayed copies
of the signal (including the original) defines some sort of irregular
comb filter. The peaks and valleys of the comb filter shift constantly
as the gains change to new \, random values.;
#X connect 1 0 0 0;
#X connect 1 0 0 1;
#X connect 3 0 4 1;
#X connect 4 0 1 1;
#X connect 5 0 6 1;
#X connect 6 0 1 1;
#X connect 7 0 8 1;
#X connect 8 0 1 1;
#X connect 9 0 10 1;
#X connect 10 0 1 0;
#X connect 12 0 13 0;
#X connect 13 0 14 1;
#X connect 14 0 12 0;
#X connect 14 0 16 0;
#X connect 15 0 25 0;
#X connect 16 0 28 0;
#X connect 16 1 15 0;
#X connect 17 0 27 0;
#X connect 18 0 24 0;
#X connect 18 0 27 1;
#X connect 19 0 9 0;
#X connect 19 1 7 0;
#X connect 19 2 5 0;
#X connect 19 3 3 0;
#X connect 20 0 8 0;
#X connect 21 0 2 0;
#X connect 21 0 10 0;
#X connect 22 0 6 0;
#X connect 23 0 4 0;
#X connect 24 0 28 2;
#X connect 25 0 28 1;
#X connect 26 0 21 0;
#X connect 27 0 14 0;
#X connect 28 0 19 0;

View file

@ -0,0 +1,253 @@
#N canvas 390 121 616 352 12;
#N canvas 0 0 499 321 test-input 0;
#X obj 75 253 outlet~;
#X obj 74 201 -~;
#X obj 74 177 *~ 3;
#X obj 111 183 *~ 2;
#X floatatom 74 81 0 0 0 0 - - -;
#X obj 74 153 clip~ 0 0.667;
#X text 124 80 <-- pitch;
#X obj 74 105 mtof;
#X msg 195 142 1;
#X obj 74 225 *~;
#X obj 74 129 phasor~ 0;
#X obj 195 190 tabread4~ dbtorms;
#X obj 195 166 adsr 100 100 2000 0 2000;
#X obj 73 54 inlet;
#N canvas 0 0 600 392 conversion-tables 0;
#N canvas 0 0 450 300 graph1 0;
#X array dbtorms 123 float 1;
#A 0 0 0 1.25893e-05 1.41254e-05 1.58489e-05 1.77828e-05 1.99526e-05
2.23872e-05 2.51189e-05 2.81838e-05 3.16228e-05 3.54813e-05 3.98107e-05
4.46684e-05 5.01187e-05 5.62341e-05 6.30957e-05 7.07946e-05 7.94328e-05
8.91251e-05 1e-04 0.000112202 0.000125893 0.000141254 0.000158489 0.000177828
0.000199526 0.000223872 0.000251189 0.000281838 0.000316228 0.000354813
0.000398107 0.000446684 0.000501187 0.000562341 0.000630957 0.000707946
0.000794328 0.000891251 0.001 0.00112202 0.00125893 0.00141254 0.00158489
0.00177828 0.00199526 0.00223872 0.00251189 0.00281838 0.00316228 0.00354813
0.00398107 0.00446684 0.00501187 0.00562341 0.00630957 0.00707946 0.00794328
0.00891251 0.01 0.0112202 0.0125893 0.0141254 0.0158489 0.0177828 0.0199526
0.0223872 0.0251189 0.0281838 0.0316228 0.0354813 0.0398107 0.0446684
0.0501187 0.0562341 0.0630957 0.0707946 0.0794328 0.0891251 0.1 0.112202
0.125893 0.141254 0.158489 0.177828 0.199526 0.223872 0.251189 0.281838
0.316228 0.354813 0.398107 0.446684 0.501187 0.562341 0.630957 0.707946
0.794328 0.891251 1 1.12202 1.25893 1.41254 1.58489 1.77828 1.99526
2.23872 2.51189 2.81838 3.16228 3.54813 3.98107 4.46684 5.01187 5.62341
6.30957 7.07946 7.94328 8.91251 10 11.2202 12.5893;
#X coords 0 10 123 0 200 100 1;
#X restore 70 45 graph;
#X text 272 138 0;
#X text 274 38 10;
#X text 89 148 ------ 123 samples ------;
#N canvas 0 0 450 300 graph2 0;
#X array mtof 130 float 1;
#A 0 8.1758 8.66196 9.17702 9.72272 10.3009 10.9134 11.5623 12.2499
12.9783 13.75 14.5676 15.4339 16.3516 17.3239 18.354 19.4454 20.6017
21.8268 23.1247 24.4997 25.9565 27.5 29.1352 30.8677 32.7032 34.6478
36.7081 38.8909 41.2034 43.6535 46.2493 48.9994 51.9131 55 58.2705
61.7354 65.4064 69.2957 73.4162 77.7817 82.4069 87.3071 92.4986 97.9989
103.826 110 116.541 123.471 130.813 138.591 146.832 155.563 164.814
174.614 184.997 195.998 207.652 220 233.082 246.942 261.626 277.183
293.665 311.127 329.628 349.228 369.994 391.995 415.305 440 466.164
493.883 523.251 554.365 587.33 622.254 659.255 698.456 739.989 783.991
830.609 880 932.328 987.767 1046.5 1108.73 1174.66 1244.51 1318.51
1396.91 1479.98 1567.98 1661.22 1760 1864.66 1975.53 2093 2217.46 2349.32
2489.02 2637.02 2793.83 2959.96 3135.96 3322.44 3520 3729.31 3951.07
4186.01 4434.92 4698.64 4978.03 5274.04 5587.65 5919.91 6271.93 6644.88
7040 7458.62 7902.13 8372.02 8869.84 9397.27 9956.06 10548.1 11175.3
11839.8 12543.9 13289.8 14080;
#X coords 0 12000 130 0 200 100 1;
#X restore 77 222 graph;
#X text 87 330 ------ 130 samples ------;
#X text 286 315 0;
#X text 288 215 12000;
#N canvas 244 212 672 338 regenerate-tables 0;
#X msg 415 84 bang;
#X obj 415 113 t b b;
#X obj 474 177 f;
#X obj 512 177 + 1;
#X msg 483 147 0;
#X obj 415 142 until;
#X obj 474 211 t f f;
#X obj 414 238 mtof;
#X obj 405 202 sel 129;
#X obj 413 264 tabwrite mtof;
#X obj 35 227 moses 2;
#X msg 19 76 bang;
#X obj 19 105 t b b;
#X obj 90 166 f;
#X obj 128 166 + 1;
#X msg 112 138 0;
#X obj 19 134 until;
#X obj 11 194 sel 122;
#X msg 35 258 0;
#X obj 79 259 dbtorms;
#X obj 90 194 t f f;
#X obj 35 291 tabwrite dbtorms;
#X text 18 49 bang to recalculate dbtorms table;
#X text 356 50 bang to recalculate the mtof table;
#X connect 0 0 1 0;
#X connect 1 0 5 0;
#X connect 1 1 4 0;
#X connect 2 0 3 0;
#X connect 2 0 6 0;
#X connect 2 0 8 0;
#X connect 3 0 2 1;
#X connect 4 0 2 1;
#X connect 5 0 2 0;
#X connect 6 0 7 0;
#X connect 6 1 9 1;
#X connect 7 0 9 0;
#X connect 8 0 5 1;
#X connect 10 0 18 0;
#X connect 10 1 19 0;
#X connect 11 0 12 0;
#X connect 12 0 16 0;
#X connect 12 1 15 0;
#X connect 13 0 14 0;
#X connect 13 0 17 0;
#X connect 13 0 20 0;
#X connect 14 0 13 1;
#X connect 15 0 13 1;
#X connect 16 0 13 0;
#X connect 17 0 16 1;
#X connect 18 0 21 0;
#X connect 19 0 21 0;
#X connect 20 0 10 0;
#X connect 20 1 21 1;
#X restore 375 76 pd regenerate-tables;
#X restore 260 101 pd conversion-tables;
#X connect 1 0 9 0;
#X connect 2 0 1 0;
#X connect 3 0 1 1;
#X connect 4 0 7 0;
#X connect 4 0 8 0;
#X connect 5 0 2 0;
#X connect 7 0 10 0;
#X connect 8 0 12 0;
#X connect 9 0 0 0;
#X connect 10 0 3 0;
#X connect 10 0 5 0;
#X connect 11 0 9 1;
#X connect 12 0 11 0;
#X connect 13 0 4 0;
#X restore 39 114 pd test-input;
#X text 135 6 REVERBERATOR;
#X floatatom 39 87 0 10 130 0 - - -;
#X text 76 87 <-- pitch;
#N canvas 96 169 958 610 reverb 0;
#X obj 13 19 inlet~;
#X obj 13 43 reverb-echo echo-del1 5.43216;
#X obj 277 215 +~;
#X obj 319 215 +~;
#X obj 67 276 outlet~;
#X obj 137 276 outlet~;
#X obj 238 334 +~;
#X obj 347 335 +~;
#X obj 280 334 -~;
#X obj 387 334 -~;
#X obj 237 390 +~;
#X obj 281 391 +~;
#X obj 325 392 -~;
#X obj 364 392 -~;
#X obj 324 474 *~ 0;
#X obj 282 473 *~ 0;
#X obj 237 472 *~ 0;
#X obj 365 475 *~ 0;
#X obj 632 365 inlet;
#X obj 632 437 / 200;
#X obj 632 389 min 100;
#X obj 632 412 max 0;
#X obj 238 583 delwrite~ loop-del1 60;
#X obj 283 561 delwrite~ loop-del2 71.9345;
#X obj 364 515 delwrite~ loop-del4 95.945;
#X obj 298 154 delread~ loop-del1 60;
#X obj 340 179 delread~ loop-del2 71.9345;
#X obj 408 233 delread~ loop-del4 95.945;
#X obj 386 208 delread~ loop-del3 86.7545;
#X obj 325 538 delwrite~ loop-del3 86.7545;
#X obj 13 67 reverb-echo echo-del2 8.45346;
#X obj 13 91 reverb-echo echo-del3 13.4367;
#X obj 13 115 reverb-echo echo-del4 21.5463;
#X obj 13 139 reverb-echo echo-del5 34.3876;
#X obj 13 163 reverb-echo echo-del6 55.5437;
#X text 286 42 "early echo" generators \, which also increase echo
density. Open one to see what they do.;
#X text 300 115 Get the outputs of the recirculating delays. Add the
inputs to two of them.;
#X text 420 313 Do a power-conserving mix of them in pairs. First combine
(1 \, 2) and (3 \, 4)...;
#X text 402 385 ...then (1 \, 3) and (2 \, 4);
#X text 446 469 The two mixing stages have a combined gain of 2 \,
so the recirculation gain is limited to 0.5.;
#X text 586 542 Put the signals back into the;
#X text 584 557 recirculating delays.;
#X text 29 296 Tap outputs from here.;
#X text 708 381 0 to 100 to control reverb;
#X text 719 396 time.;
#X text 691 364 feedback gain on a scale of;
#X connect 0 0 1 0;
#X connect 1 0 30 0;
#X connect 1 1 30 1;
#X connect 2 0 4 0;
#X connect 2 0 6 0;
#X connect 2 0 8 0;
#X connect 3 0 5 0;
#X connect 3 0 6 1;
#X connect 3 0 8 1;
#X connect 6 0 10 0;
#X connect 6 0 12 0;
#X connect 7 0 12 1;
#X connect 7 0 10 1;
#X connect 8 0 11 0;
#X connect 8 0 13 0;
#X connect 9 0 11 1;
#X connect 9 0 13 1;
#X connect 10 0 16 0;
#X connect 11 0 15 0;
#X connect 12 0 14 0;
#X connect 13 0 17 0;
#X connect 14 0 29 0;
#X connect 15 0 23 0;
#X connect 16 0 22 0;
#X connect 17 0 24 0;
#X connect 18 0 20 0;
#X connect 19 0 17 1;
#X connect 19 0 16 1;
#X connect 19 0 15 1;
#X connect 19 0 14 1;
#X connect 20 0 21 0;
#X connect 21 0 19 0;
#X connect 25 0 2 1;
#X connect 26 0 3 1;
#X connect 27 0 7 1;
#X connect 27 0 9 1;
#X connect 28 0 7 0;
#X connect 28 0 9 0;
#X connect 30 0 31 0;
#X connect 30 1 31 1;
#X connect 31 0 32 0;
#X connect 31 1 32 1;
#X connect 32 0 33 0;
#X connect 32 1 33 1;
#X connect 33 0 34 0;
#X connect 33 1 34 1;
#X connect 34 0 2 0;
#X connect 34 1 3 0;
#X restore 58 179 pd reverb;
#X floatatom 134 155 0 0 100 0 - - -;
#X text 169 155 <-- feedback (100 maximum);
#X obj 38 206 output~;
#X text 342 317 updated for Pd version 0.37-1;
#X text 149 180 <-- open to see how it works;
#X text 34 269 Many improvements are possible. Much better reverberators
can be found in the "extras" library.;
#X text 29 30 Here is a simple recirculating reverberator. "Feedback"
should be between 0 and 100 - if 100 \, the reverberation lasts forever.
;
#X connect 0 0 4 0;
#X connect 0 0 7 0;
#X connect 2 0 0 0;
#X connect 4 0 7 0;
#X connect 4 1 7 1;
#X connect 5 0 4 1;

View file

@ -0,0 +1,162 @@
#N canvas 93 36 964 554 12;
#X floatatom 19 87 0 0 0 0 - - -;
#X obj 82 358 *~;
#X obj 205 295 line~;
#X floatatom 237 112 0 0 0 0 - - -;
#X text 68 9 PITCH SHIFTER;
#X obj 205 269 pack 0 200;
#X obj 237 86 r window;
#X obj 19 61 r transpose;
#X obj 19 143 exp;
#X floatatom 19 169 6 0 0 0 - - -;
#X obj 19 259 /;
#X obj 146 189 * 0.001;
#X obj 314 365 line~;
#X obj 314 340 pack 0 200;
#X floatatom 314 289 0 0 0 0 - - -;
#X obj 314 263 r delay;
#X obj 82 384 +~;
#X obj 19 410 cos~;
#X obj 19 437 *~;
#X obj 19 466 +~;
#X obj 106 317 wrap~;
#X obj 251 360 *~;
#X obj 251 393 +~;
#X obj 188 420 cos~;
#X obj 188 447 *~;
#X msg 492 56 \; transpose 0 \; window 100 \; delay 0;
#X obj 492 30 loadbang;
#X obj 146 216 t b f;
#X floatatom 19 285 6 0 0 0 - - -;
#X obj 106 290 +~ 0.5;
#X obj 19 358 -~ 0.5;
#X obj 19 384 *~ 0.5;
#X obj 188 359 -~ 0.5;
#X obj 188 392 *~ 0.5;
#X obj 19 196 - 1;
#X obj 19 117 * 0.05776;
#X obj 19 222 * -1;
#X text 53 86 <-- transposition;
#X text 96 99 (halftones);
#X text 82 163 speed;
#X text 81 177 change;
#X text 281 111 <--window (msec);
#X text 54 252 tape head;
#N canvas 0 0 612 637 test-input 0;
#N canvas 0 0 450 300 graph1 0;
#X array array1 155948 float 0;
#X coords 0 1 155947 -1 200 150 1;
#X restore 150 141 graph;
#X obj 139 518 tabread4~ array1;
#X obj 139 333 r totsamps;
#X obj 139 413 /;
#X obj 139 465 *~ 0;
#X obj 139 439 phasor~ 0;
#X obj 139 492 +~ 1;
#X msg 139 386 44100;
#X obj 139 360 t b f;
#X obj 182 469 r totsamps;
#X text 153 538 sample loop for;
#X text 153 555 test signal;
#X obj 162 30 loadbang;
#X obj 139 590 outlet~;
#X obj 393 169 r readfile;
#X obj 393 199 symbol;
#X msg 392 228 read -resize \$1 array1;
#X obj 392 256 soundfiler;
#X obj 392 284 s totsamps;
#X msg 161 64 \; readfile ../sound/bell.aiff;
#X connect 1 0 13 0;
#X connect 2 0 8 0;
#X connect 3 0 5 0;
#X connect 4 0 6 0;
#X connect 5 0 4 0;
#X connect 6 0 1 0;
#X connect 7 0 3 0;
#X connect 8 0 7 0;
#X connect 8 1 3 1;
#X connect 9 0 4 1;
#X connect 12 0 19 0;
#X connect 14 0 15 0;
#X connect 15 0 16 0;
#X connect 16 0 17 0;
#X connect 17 0 18 0;
#X restore 264 11 pd test-input;
#X text 425 153 This is a classic rotating-tape-head style pitch shifter
using the vd~ variable delay object. Ther are two moving tape heads
\, each of which is loudest at the middle of its trajectory \, and
enveloped out at the moment it has to jump back (or forward) to start
another scratch. Most of the brain work is in computing how fast the
tape heads have to move to get the desired transposition.;
#X text 425 272 The "window size" is the total trajectory of the read
points in the delay line \, in milliseconds. The delay times are controlled
by a phasor~ object. The second delay time \, 180 degrees out of phase
from the first one \, is computed using the "wrap" object.;
#X text 423 362 The "window size" is the total trajectory of the read
points in the delay line \, in milliseconds. The delay times are controlled
by a phasor~ object. The second delay time \, 180 degrees out of phase
from the first one \, is computed using the "wrap" object.;
#X text 422 454 The cos~ objects compute the fadein and fadeout of
the two delay line outputs. They each traverse the positive half of
the cosine waveform (phase -0.25 to +0.25) over the time the phase
goes from one end to the other.;
#X obj 19 493 output~;
#X obj 19 316 phasor~;
#X text 689 534 updated for Pd version 0.37-1;
#X obj 314 316 max 1.5;
#X text 317 222 delay;
#X text 314 240 (msec);
#X obj 237 139 max 1;
#X text 55 265 rotation freq;
#X obj 82 410 vd~ G09-del;
#X obj 251 422 vd~ G09-del;
#X obj 264 42 delwrite~ G09-del 5000;
#X connect 0 0 35 0;
#X connect 1 0 16 0;
#X connect 2 0 1 1;
#X connect 2 0 21 1;
#X connect 3 0 54 0;
#X connect 5 0 2 0;
#X connect 6 0 3 0;
#X connect 7 0 0 0;
#X connect 8 0 9 0;
#X connect 9 0 34 0;
#X connect 10 0 28 0;
#X connect 11 0 27 0;
#X connect 12 0 16 1;
#X connect 12 0 22 1;
#X connect 13 0 12 0;
#X connect 14 0 51 0;
#X connect 15 0 14 0;
#X connect 16 0 56 0;
#X connect 17 0 18 0;
#X connect 18 0 19 0;
#X connect 19 0 48 0;
#X connect 19 0 48 1;
#X connect 20 0 21 0;
#X connect 20 0 32 0;
#X connect 21 0 22 0;
#X connect 22 0 57 0;
#X connect 23 0 24 0;
#X connect 24 0 19 1;
#X connect 26 0 25 0;
#X connect 27 0 10 0;
#X connect 27 1 10 1;
#X connect 28 0 49 0;
#X connect 29 0 20 0;
#X connect 30 0 31 0;
#X connect 31 0 17 0;
#X connect 32 0 33 0;
#X connect 33 0 23 0;
#X connect 34 0 36 0;
#X connect 35 0 8 0;
#X connect 36 0 10 0;
#X connect 43 0 58 0;
#X connect 49 0 1 0;
#X connect 49 0 30 0;
#X connect 49 0 29 0;
#X connect 51 0 13 0;
#X connect 54 0 11 0;
#X connect 54 0 5 0;
#X connect 56 0 18 1;
#X connect 57 0 24 1;

View file

@ -0,0 +1,185 @@
#N canvas 97 42 601 612 12;
#X obj 72 411 mtof;
#X floatatom 72 388 5 0 0 0 - #0-pit -;
#X obj 41 542 output~;
#X obj 41 457 lop~;
#X obj 42 354 noise~;
#X text 124 387 <-- cutoff (pitch units);
#X text 135 434 <-- cutoff (Hertz);
#X floatatom 72 436 5 0 0 0 - - -;
#X text 348 582 updated for Pd version 0.39;
#X text 88 459 low-pass filter;
#X obj 130 535 tabwrite~ H01-graph;
#X obj 130 510 metro 250;
#X obj 130 490 tgl 15 0 empty empty empty 0 -6 0 8 -262144 -1 -1 0
1;
#X text 148 487 graphing on/off;
#N canvas 0 0 450 300 graph2 0;
#X array H01-graph 882 float 3;
#A 0 -0.107788 -0.0695636 -0.0991016 -0.104581 -0.0683972 -0.0547128
-0.0857414 -0.0731684 -0.0892636 -0.115914 -0.0935128 -0.0572466 -0.0387586
-0.0429956 -0.03826 -0.0628797 -0.0383263 -0.0720175 -0.0923909 -0.0707558
-0.0792164 -0.102187 -0.0888189 -0.119908 -0.083863 -0.0677126 -0.0554309
-0.044719 -0.0248649 -0.0482707 -0.0692472 -0.103905 -0.101273 -0.117807
-0.100956 -0.0905779 -0.0676211 -0.0299763 -0.0190183 0.00623894 -0.000664497
0.0291359 0.0310484 0.0412564 0.0375735 0.0676889 0.0348717 0.00747152
0.0416666 0.0529021 0.0418099 0.0405759 0.0303367 -0.00428127 0.0140712
-0.0111072 0.0243947 -0.0104408 -0.0142505 -0.0287291 -0.0119835 0.00876151
-0.0281321 -0.0325635 -0.0618363 -0.0379124 -0.0447592 -0.0507954 -0.0403398
-0.0277581 -0.00226383 0.000989536 -0.0323217 -0.0164512 -0.0156964
-0.0436928 -0.045223 -0.0706908 -0.0382667 -0.00177098 0.0290649 0.0149072
0.0483574 0.0453535 0.0100187 -0.00270613 0.0298578 0.0470317 0.0301263
0.0478455 0.0134859 0.0488288 0.0766369 0.0916206 0.11869 0.0944563
0.102745 0.086215 0.0845207 0.0662227 0.0609466 0.0952278 0.0771313
0.103073 0.101067 0.0915918 0.100309 0.0651311 0.0553397 0.0623315
0.050316 0.0844677 0.0996978 0.0715106 0.084598 0.0947672 0.115172
0.134093 0.118854 0.106047 0.120693 0.0961966 0.0571329 0.0854602 0.084371
0.0538877 0.0744577 0.0563968 0.0753962 0.0748331 0.0605493 0.0795627
0.0600295 0.0432455 0.0582205 0.0920203 0.0640656 0.0253824 -0.008527
-0.0243436 -0.0588714 -0.0239946 0.00784105 0.0119875 0.0161209 0.00780566
0.00216991 -0.0288565 -0.0521791 -0.0658445 -0.0868191 -0.0673713 -0.0889776
-0.0546807 -0.0256506 -0.0375237 -0.0118962 -0.0477717 -0.0384217 -0.0385089
-0.0696784 -0.098759 -0.121121 -0.127174 -0.157189 -0.121443 -0.0989412
-0.0615983 -0.0711882 -0.0760313 -0.0566161 -0.056104 -0.0875121 -0.0734271
-0.037525 -0.0681574 -0.0689616 -0.0900591 -0.0574559 -0.04051 -0.0333117
-0.0260634 -0.0202531 -0.0302473 -0.0346772 -0.052936 -0.0798849 -0.0780231
-0.111591 -0.112165 -0.129226 -0.11253 -0.138539 -0.122338 -0.138645
-0.132606 -0.112523 -0.139122 -0.169654 -0.132431 -0.136376 -0.130106
-0.110972 -0.113595 -0.131592 -0.141568 -0.108734 -0.075847 -0.0711363
-0.0525791 -0.0216604 -0.0196736 -0.0186081 -0.0186695 -0.00602199
0.0257979 0.0132076 0.0225488 0.00748564 0.0165994 0.00166184 -0.00116405
0.0028765 0.01807 0.0157059 0.0473739 0.0708991 0.0862786 0.0650413
0.038138 0.015989 0.0521245 0.0605891 0.0431341 0.00429233 0.028138
0.00477928 0.00181729 -0.028107 -0.0360127 -0.00712468 -0.0312668 -0.0523252
-0.0479352 -0.0513783 -0.0250772 -0.0142933 -0.047864 -0.0252179 -0.0219197
0.0153334 0.0518051 0.082624 0.0535017 0.0535462 0.0506847 0.0717359
0.0774448 0.0591473 0.0602611 0.0708395 0.0654832 0.0261038 0.0107588
0.00770543 0.0203729 0.033363 0.029335 0.0483838 0.0607855 0.0245724
0.0550305 0.0593506 0.0753188 0.081294 0.096557 0.117197 0.105438 0.111979
0.0953627 0.0978146 0.084516 0.0952146 0.117297 0.0851524 0.0863281
0.049295 0.0757788 0.0866482 0.0738062 0.0984422 0.0885168 0.116305
0.0949217 0.0562471 0.0898681 0.0643755 0.0681146 0.0863296 0.0516047
0.0595782 0.0605373 0.0295923 0.0568693 0.0749412 0.0804035 0.108818
0.0786603 0.0506026 0.0129134 0.0381891 0.0305477 0.0364073 0.0411764
0.0721042 0.0629199 0.03039 0.0474877 0.0100055 0.0283331 0.0424028
0.0700528 0.0932837 0.116089 0.146493 0.171112 0.198628 0.1636 0.135356
0.164266 0.144544 0.132615 0.128501 0.129495 0.141165 0.145633 0.141941
0.170706 0.193988 0.204823 0.228202 0.219125 0.204054 0.227319 0.231326
0.230171 0.204664 0.230591 0.189557 0.202459 0.184563 0.212896 0.202201
0.221436 0.214395 0.195221 0.209657 0.214416 0.202139 0.222888 0.237836
0.245874 0.22457 0.194835 0.159835 0.142986 0.120742 0.119331 0.147719
0.17693 0.157802 0.153323 0.151851 0.155677 0.148854 0.139333 0.145233
0.166518 0.140436 0.150237 0.126701 0.135908 0.166416 0.15391 0.152768
0.181048 0.149057 0.136385 0.1213 0.144767 0.113465 0.0980506 0.0852771
0.106682 0.130461 0.10524 0.0793894 0.07123 0.0447812 0.0792345 0.0479509
0.0700904 0.0308896 0.0279068 0.0312166 0.010152 -0.00943106 0.0010242
-0.00752998 0.0143407 0.0027725 0.033508 0.0621824 0.0643498 0.0827609
0.113321 0.11629 0.139206 0.101752 0.0988734 0.107286 0.128068 0.14154
0.148363 0.124029 0.0968996 0.127442 0.100244 0.0940884 0.0805303 0.103963
0.0874826 0.0588413 0.0720198 0.0853478 0.0902383 0.0788942 0.0475014
0.0707652 0.0384297 0.0538394 0.0763012 0.0483987 0.0713554 0.0473328
0.0415702 0.0532321 0.0475937 0.0208587 0.0030926 0.00438177 -0.0204396
-0.00825569 0.0180096 0.0456204 0.0765333 0.0938012 0.110089 0.115665
0.13934 0.144259 0.155082 0.164549 0.192087 0.159342 0.176142 0.149727
0.174968 0.170935 0.134127 0.123663 0.11653 0.113447 0.102327 0.0764594
0.0887578 0.079355 0.0692447 0.0727442 0.0913222 0.115159 0.137636
0.154978 0.176904 0.156243 0.13039 0.104399 0.0853428 0.0666318 0.0615526
0.0907602 0.0502914 0.0434091 0.00788628 -0.0191843 -0.0395026 -0.0596938
-0.0723036 -0.0806951 -0.0861116 -0.0864571 -0.0488058 -0.0711986 -0.0797166
-0.0688114 -0.0318625 -0.0673463 -0.0444878 -0.0250519 -0.024727 -0.0310858
-0.00561093 -0.0207001 -0.0340927 -0.0551734 -0.0817888 -0.0705976
-0.0835859 -0.0866976 -0.0565736 -0.0797509 -0.0968247 -0.0655236 -0.0760219
-0.0670947 -0.0342146 -0.0274503 -0.0263804 -0.0317333 -0.039663 -0.0119034
-0.046866 -0.0359958 -0.0318836 -0.0499625 -0.0574402 -0.029796 0.0028338
-0.0262898 -0.041154 -0.0473188 -0.0255545 -0.058172 -0.0601881 -0.0914168
-0.102286 -0.135733 -0.13837 -0.13175 -0.139201 -0.160906 -0.136196
-0.11435 -0.073056 -0.0694626 -0.0599314 -0.0349573 -0.00661064 -0.0128436
-0.0368892 -0.00783622 -0.0285016 -0.0257515 -0.000656539 0.000578916
0.00997914 0.0309158 0.00448781 -0.0276183 -0.00975017 -0.0431335 -0.0420573
-0.0318631 -0.0461821 -0.0493957 -0.0468264 -0.0278063 -0.0239267 -0.0240269
-0.0446192 -0.0791041 -0.0634024 -0.0949552 -0.122094 -0.130089 -0.110653
-0.07832 -0.0717672 -0.0448359 -0.0454325 -0.075843 -0.0655465 -0.0499949
-0.0848139 -0.107986 -0.0831531 -0.0721088 -0.103859 -0.0650817 -0.0753315
-0.0991717 -0.072808 -0.0810555 -0.0679525 -0.0566175 -0.0827188 -0.0822597
-0.0497494 -0.0154982 -0.00131288 0.0318942 -0.00235687 -0.0344436
-0.0249813 -0.00212817 0.0348011 0.0207401 0.00218581 -0.0346692 -0.000621661
-0.0106329 -0.0261485 0.00856931 -0.0171581 0.0152674 0.0466481 0.0456615
0.0728295 0.0601254 0.0639082 0.0949887 0.09166 0.118261 0.120631 0.120818
0.150657 0.154468 0.134964 0.0965974 0.0907992 0.069314 0.0611587 0.0707784
0.0627047 0.0717109 0.0659585 0.0296832 0.0352495 0.00141861 0.010894
0.0426848 0.0419218 0.0141017 0.0413311 0.037778 0.0154291 0.0312945
0.00510286 -0.00271059 -0.0291284 -0.045397 -0.0762688 -0.0445058 -0.057707
-0.0779557 -0.0735523 -0.0922772 -0.0727918 -0.0429784 -0.00911861
-0.0379944 -0.0658339 -0.0784915 -0.0792981 -0.0453014 -0.0197867 -0.00123178
0.000799734 -0.00204599 0.0349492 0.0623098 0.0770006 0.0882193 0.0484045
0.0760622 0.0945022 0.0567368 0.0286078 0.00189384 0.0315546 0.0374527
0.0395075 0.0591211 0.0415475 0.0732162 0.0588977 0.0850963 0.0465228
0.0698241 0.0407602 0.0431113 0.0065717 0.00936337 0.0222241 0.0327647
0.0270807 -0.0111891 0.0063837 -0.0086459 -0.0364951 -0.0200965 -0.0318325
-0.0576028 -0.0557316 -0.0675803 -0.0887475 -0.0980934 -0.0881446 -0.117229
-0.125822 -0.13378 -0.142539 -0.108397 -0.13497 -0.138471 -0.164523
-0.174647 -0.18636 -0.157472 -0.148646 -0.108121 -0.104372 -0.0695942
-0.0542974 -0.0701001 -0.100999 -0.0658883 -0.0947834 -0.113894 -0.0981114
-0.108426 -0.100378 -0.102227 -0.0818266 -0.103135 -0.0720306 -0.0440222
-0.0219618 -0.0453231 -0.019184 0.0157131 -0.013545 -0.0248696 -0.0166098
-0.0489199 -0.0269982 -0.0224125 -0.0413912 -0.0728588 -0.0586017 -0.0349842
-0.0338855 -0.0588961 -0.0928709 -0.11376 -0.0790886 -0.100094 -0.126293
-0.10676 -0.136216 -0.109541 -0.136053 -0.112742 -0.136117 -0.146529
-0.156998 -0.163319 -0.137112 -0.146644 -0.138866 -0.159482 -0.185248
-0.206002 -0.16925 -0.178855 -0.140085 -0.105426 -0.095303 -0.0736452
-0.066341 -0.0689736 -0.0914969 -0.0725721 -0.0824288 -0.049098 -0.0139474
-0.00957104 0.0134051 -0.0091349 0.00555033 0.0117049 -0.0230348 -0.0545547
-0.050228 -0.0431037 -0.0668625 -0.029803 -0.0551605 -0.0175891 -0.0435808
-0.0240586 -0.0455508 -0.00746894 0.0213663 0.0569028 0.0190693 0.000740271
0.000412262 -0.0233437 -0.0205415 -0.0240432 0.00448952 0.00916993
0.00155166 -0.00567939 -0.00725616 0.0138388 0.0162082 -0.00138934
-0.0077004 -0.0261998 -0.0100701 -0.0337348 -0.0154704 -0.0291058 -0.0299364
-0.00924212 0.0247502 -0.0060416 -0.0118114 -0.0158459 0.0158545 -0.00827235
-0.00602365 -0.0132283 0.0105079 0.0432025 0.0698796 0.0576105 0.0538253
0.066991 0.0715161 0.0405482 0.0741857 0.0802094 0.113967 0.126283
0.111464 0.0926309 0.0545991 0.0568134 0.0770984 0.0533353 0.0142316
-0.0181225 0.00490977 0.0275315 0.0202685 0.00414232 0.0273551 0.0158572
-0.00476758 -0.0362654 -0.0701252 -0.0547324 -0.0708724 -0.0970369
-0.099428 -0.102544 -0.0736354 -0.0556618 -0.0863601;
#X coords 0 1 882 -1 200 140 1;
#X restore 384 386 graph;
#X text 408 528 --- 0.02 sec ---;
#X text 28 30 This and the following patches show how to use filters
in Pd \, starting with the simplest one: the one-pole low-pass filter.
Here we test it with an input of white noise. The lop~ object does
the filtering. Its left inlet takes an audio signal to be filtered
\, and its right inlet takes messages to set its cutoff frequency in
Hertz.;
#X text 26 129 The lop~ object is normalized to pass DC (the lowest
frequency) with a gain of one. Higher frequencies are progressively
more and more attenuated. The lower the cutoff frequency \, the lower
the total power of the filtered noise. If you graph the output you'll
see that the waveform gets smoother (and smaller overall) as the cutoff
frequency is lowered.;
#X text 28 243 At the cutoff frequency the gain is about -3 dB \, and
above that the gain drops a further 6 dB per octave. (Sometimes one
uses the word "rolloff" instead of "cutoff" to emphasize the gradual
way the gain drops off with frequency.);
#X text 108 353 white noise \, test signal;
#X text 185 6 ONE-POLE LOW-PASS FILTER;
#N canvas 0 0 450 300 loadbang 0;
#X obj 85 16 loadbang;
#X obj 85 40 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
-1;
#X obj 85 59 f \$0;
#X text 18 179 boxes.;
#X text 16 161 This subpatch loads initial values in number;
#X msg 84 83 \; \$1-pit 60;
#X connect 0 0 1 0;
#X connect 1 0 2 0;
#X connect 2 0 5 0;
#X restore 129 582 pd loadbang;
#X connect 0 0 7 0;
#X connect 1 0 0 0;
#X connect 3 0 2 0;
#X connect 3 0 2 1;
#X connect 3 0 10 0;
#X connect 4 0 3 0;
#X connect 7 0 3 1;
#X connect 11 0 10 0;
#X connect 12 0 11 0;

View file

@ -0,0 +1,168 @@
#N canvas 29 10 595 573 12;
#X obj 26 479 output~;
#X text 324 527 updated for Pd version 0.39;
#X obj 114 460 metro 250;
#X obj 114 440 tgl 15 0 empty empty empty 0 -6 0 8 -262144 -1 -1 0
1;
#X text 132 437 graphing on/off;
#N canvas 0 0 450 300 (subpatch) 0;
#X array H02-graph 882 float 3;
#A 0 0.86084 0.876465 0.891113 0.904785 0.917725 0.929688 0.940918
0.950928 0.960205 0.968506 0.97583 0.982178 0.987793 0.992188 0.995605
0.998047 0.999512 1 0.999756 0.998291 0.99585 0.992432 0.988037 0.982666
0.976318 0.968994 0.960938 0.95166 0.94165 0.930664 0.918701 0.905762
0.89209 0.877441 0.862061 0.845703 0.828613 0.810547 0.791748 0.772217
0.751953 0.730957 0.709229 0.686768 0.663574 0.639893 0.615479 0.590576
0.564941 0.538818 0.511963 0.484863 0.457275 0.429199 0.400635 0.371826
0.342529 0.312744 0.282959 0.252686 0.222168 0.19165 0.160645 0.129639
0.0986328 0.0673828 0.0358887 0.00463867 -0.0266113 -0.0581055 -0.0893555
-0.120361 -0.151611 -0.182373 -0.213135 -0.243652 -0.273926 -0.303955
-0.33374 -0.363037 -0.39209 -0.420654 -0.448975 -0.476807 -0.50415
-0.530762 -0.557129 -0.583008 -0.608154 -0.632568 -0.656738 -0.679932
-0.702637 -0.724609 -0.74585 -0.766357 -0.786133 -0.805176 -0.823242
-0.840576 -0.857178 -0.873047 -0.887939 -0.901855 -0.915039 -0.927246
-0.938477 -0.94873 -0.958252 -0.966797 -0.974365 -0.980957 -0.986572
-0.991211 -0.994873 -0.997559 -0.999268 -1 -0.999756 -0.998535 -0.996338
-0.993164 -0.989014 -0.983887 -0.977783 -0.970947 -0.962891 -0.953857
-0.944092 -0.933105 -0.921387 -0.908936 -0.895264 -0.880859 -0.865479
-0.849365 -0.83252 -0.814697 -0.796143 -0.776855 -0.756592 -0.73584
-0.714111 -0.691895 -0.668945 -0.645264 -0.621094 -0.596191 -0.570801
-0.544678 -0.518066 -0.491211 -0.463623 -0.435547 -0.407227 -0.378418
-0.349121 -0.31958 -0.289795 -0.259521 -0.229248 -0.198486 -0.167725
-0.136719 -0.105713 -0.0744629 -0.0432129 -0.0117188 0.0195312 0.0507812
0.0822754 0.113281 0.144531 0.175293 0.206055 0.236816 0.26709 0.297119
0.326904 0.356445 0.385498 0.414307 0.442627 0.470459 0.497803 0.524902
0.55127 0.577148 0.602539 0.627197 0.651367 0.674805 0.69751 0.719727
0.740967 0.761719 0.781738 0.800781 0.819336 0.836914 0.853516 0.869385
0.884521 0.898682 0.912109 0.924561 0.936035 0.946533 0.956299 0.964844
0.972656 0.979492 0.985352 0.990234 0.994141 0.99707 0.999023 1 1 0.999023
0.99707 0.994141 0.990234 0.985352 0.979248 0.972412 0.964844 0.956055
0.946289 0.935791 0.924316 0.911865 0.898438 0.884277 0.869141 0.853271
0.836426 0.818848 0.800537 0.78125 0.76123 0.740723 0.719238 0.697021
0.674316 0.650879 0.626709 0.601807 0.57666 0.550781 0.52417 0.497314
0.469971 0.441895 0.413574 0.38501 0.355713 0.326416 0.296631 0.266357
0.236084 0.205566 0.174805 0.143799 0.112793 0.081543 0.050293 0.0187988
-0.0124512 -0.0437012 -0.0749512 -0.106201 -0.137451 -0.168457 -0.199219
-0.229736 -0.260254 -0.290283 -0.320068 -0.349609 -0.378906 -0.407715
-0.436035 -0.464111 -0.491699 -0.518799 -0.545166 -0.571289 -0.59668
-0.621582 -0.645752 -0.669434 -0.692383 -0.7146 -0.736328 -0.75708
-0.7771 -0.796631 -0.815186 -0.832764 -0.849854 -0.865967 -0.881104
-0.895508 -0.90918 -0.921631 -0.93335 -0.944092 -0.954102 -0.962891
-0.970947 -0.978027 -0.984131 -0.989258 -0.993408 -0.996582 -0.998779
-0.999756 -1 -0.999268 -0.997559 -0.994873 -0.991211 -0.986328 -0.980713
-0.974121 -0.966553 -0.958008 -0.94873 -0.938232 -0.927002 -0.914551
-0.901611 -0.887451 -0.872559 -0.856934 -0.840332 -0.822998 -0.804688
-0.785645 -0.765869 -0.745361 -0.724121 -0.702148 -0.679443 -0.65625
-0.63208 -0.607666 -0.582275 -0.556641 -0.530273 -0.503418 -0.476074
-0.448242 -0.420166 -0.391357 -0.362305 -0.333008 -0.303223 -0.273193
-0.24292 -0.212402 -0.181885 -0.150879 -0.119873 -0.088623 -0.057373
-0.026123 0.00537109 0.0366211 0.0678711 0.0991211 0.130371 0.161377
0.192139 0.2229 0.253418 0.283447 0.313477 0.343018 0.372314 0.401123
0.429688 0.457764 0.485352 0.512695 0.539307 0.56543 0.591064 0.615967
0.640381 0.664062 0.687256 0.709717 0.731445 0.752441 0.772705 0.792236
0.811035 0.828857 0.845947 0.862305 0.877686 0.892334 0.906006 0.918945
0.930908 0.941895 0.951904 0.961182 0.969238 0.976562 0.98291 0.988037
0.992432 0.99585 0.998291 0.999756 1 0.999512 0.998047 0.995605 0.991943
0.987549 0.982178 0.97583 0.968506 0.960205 0.950928 0.940674 0.929443
0.91748 0.904541 0.890869 0.876221 0.860596 0.844238 0.826904 0.808838
0.790039 0.770508 0.75 0.729004 0.707275 0.684814 0.661621 0.637695
0.613281 0.588135 0.5625 0.536377 0.509521 0.482422 0.45459 0.426514
0.397949 0.369141 0.339844 0.310059 0.280029 0.25 0.219482 0.188721
0.157959 0.126953 0.0957031 0.0644531 0.0332031 0.00170898 -0.029541
-0.060791 -0.092041 -0.123291 -0.154297 -0.185303 -0.21582 -0.246338
-0.276611 -0.306641 -0.336426 -0.365723 -0.394775 -0.42334 -0.451416
-0.479248 -0.506592 -0.533203 -0.55957 -0.585205 -0.610352 -0.63501
-0.658691 -0.682129 -0.70459 -0.726562 -0.747803 -0.768066 -0.787842
-0.806885 -0.824951 -0.842285 -0.858643 -0.874268 -0.88916 -0.903076
-0.916016 -0.928223 -0.939453 -0.949707 -0.958984 -0.967529 -0.974854
-0.981445 -0.987061 -0.991455 -0.995117 -0.997803 -0.999512 -1 -0.999756
-0.998535 -0.996094 -0.99292 -0.98877 -0.983398 -0.977295 -0.970215
-0.962158 -0.953125 -0.943115 -0.932129 -0.92041 -0.907715 -0.894043
-0.879639 -0.864258 -0.8479 -0.831055 -0.812988 -0.794434 -0.774902
-0.754883 -0.733887 -0.712158 -0.689941 -0.666748 -0.643066 -0.618896
-0.593994 -0.568359 -0.542236 -0.515625 -0.488525 -0.460938 -0.433105
-0.404541 -0.375732 -0.346436 -0.316895 -0.286865 -0.256836 -0.226318
-0.195801 -0.165039 -0.134033 -0.102783 -0.0715332 -0.0402832 -0.0090332
0.0224609 0.0537109 0.0849609 0.116211 0.147217 0.178223 0.208984 0.239502
0.269775 0.299805 0.32959 0.359131 0.388184 0.416748 0.445068 0.4729
0.500244 0.527344 0.553711 0.579346 0.604736 0.629395 0.65332 0.676758
0.699463 0.72168 0.74292 0.763672 0.783447 0.80249 0.820801 0.838379
0.85498 0.87085 0.885742 0.899902 0.913086 0.925537 0.937012 0.94751
0.957031 0.965576 0.973389 0.97998 0.98584 0.990723 0.994385 0.997314
0.999023 1 1 0.998779 0.996826 0.993652 0.989746 0.984619 0.97876 0.971924
0.963867 0.955078 0.945312 0.934814 0.923096 0.910645 0.897217 0.882812
0.867676 0.851807 0.834961 0.817139 0.798828 0.779541 0.759521 0.73877
0.717285 0.695068 0.672119 0.648682 0.624512 0.599609 0.574219 0.54834
0.521729 0.494873 0.467285 0.439453 0.411133 0.382324 0.353027 0.32373
0.293701 0.263672 0.233398 0.202637 0.171875 0.140869 0.109863 0.0786133
0.0473633 0.0161133 -0.0153809 -0.0466309 -0.0778809 -0.109131 -0.140137
-0.171143 -0.201904 -0.232666 -0.262939 -0.292969 -0.322754 -0.352295
-0.381592 -0.4104 -0.438721 -0.466553 -0.494141 -0.52124 -0.547607
-0.57373 -0.599121 -0.623779 -0.647949 -0.671631 -0.694336 -0.716797
-0.738281 -0.759033 -0.779053 -0.79834 -0.81665 -0.834473 -0.851318
-0.867432 -0.882568 -0.896729 -0.910156 -0.922852 -0.934326 -0.945068
-0.954834 -0.963867 -0.97168 -0.978516 -0.984619 -0.989502 -0.993652
-0.996826 -0.998779 -1 -1 -0.999268 -0.997314 -0.994629 -0.990723 -0.98584
-0.980225 -0.973633 -0.96582 -0.957275 -0.947754 -0.937256 -0.925781
-0.913574 -0.900391 -0.88623 -0.871338 -0.855469 -0.838867 -0.821289
-0.802979 -0.783936 -0.76416 -0.743408 -0.722168 -0.700195 -0.67749
-0.654053 -0.629883 -0.605225 -0.580078 -0.554199 -0.527832 -0.500977
-0.473633 -0.445801 -0.41748 -0.388916 -0.359863 -0.330322 -0.300537
-0.270508 -0.240234 -0.209717 -0.178955 -0.147949 -0.116943 -0.0856934
-0.0544434 -0.0231934 0.00805664 0.0395508 0.0708008 0.102051 0.133057
0.164062 0.195068 0.225586 0.256104 0.286133 0.316162 0.345703 0.375
0.403809 0.432373 0.460449 0.488037 0.515137 0.541748 0.567871 0.593262
0.618164 0.642578 0.66626 0.689209 0.71167 0.733398 0.754395 0.774414
0.793945 0.812744 0.830566 0.847656 0.86377 0.87915 0.893555 0.907227
0.919922 0.931885 0.942871 0.952881 0.961914 0.969971 0.977051 0.983398
0.988525 0.99292 0.996094 0.998535 0.999756 1 0.999512 0.997803 0.995361
0.991699 0.987061 0.981689 0.975098 0.967773 0.959229 0.949951 0.939697
0.928467 0.916504 0.90332 0.889404 0.874756 0.859131 0.842529 0.825439
0.807129 0.78833 0.768555 0.748291 0.727051 0.705078 0.682617 0.659424
0.635498 0.611084 0.585938 0.560059 0.533936 0.50708 0.47998 0.452148
0.424072 0.395508 0.366455 0.337158 0.307373 0.277344 0.24707 0.216553
0.186035 0.155029 0.124023 0.0927734 0.0615234 0.0302734 -0.000976562
-0.0324707 -0.0637207 -0.0949707 -0.125977 -0.157227 -0.187988 -0.21875
-0.249268 -0.279297 -0.309326 -0.339111 -0.368408;
#X coords 0 1 882 -1 200 140 1;
#X restore 369 323 graph;
#X text 393 465 --- 0.02 sec ---;
#X text 24 31 Many synthesis algorithms and transformations can have
outputs with a zero-freqency component (commonly called DC for "direct
current"). These are inaudible and sometimes cause distortion in audio
output devices \, or when converting to fixed-point soundfile formats.
It is often desirable to filter an audio signal to remove its DC component.
;
#X text 23 147 The simplest way to do this is to use a one-pole low-pass
filter \, tuned to a low frequency such as 3 Hertz \, and to subtract
its output from the original. This difference is called a one-pole
\, one-zero high-pass filter \, and it is used so often that Pd provides
one in the "hip~" object.;
#X obj 26 270 +~ 1;
#X obj 25 407 hip~ 5;
#X text 88 407 high-pass filter;
#X floatatom 74 366 5 0 0 0 - - -;
#X msg 74 296 0;
#X text 110 245 sinusoidal test signal;
#X text 71 270 add "DC";
#X text 112 296 zero for no filtering;
#X msg 74 319 3;
#X text 109 320 3 (or so) to remove DC;
#X text 114 343 higher freqencies affect;
#X text 154 359 the audible part of;
#X text 154 375 the signal as well.;
#X obj 26 245 osc~ 220;
#X msg 74 342 220;
#X text 131 4 ONE-POLE \, ONE-ZERO HIGH-PASS FILTER;
#X obj 114 485 tabwrite~ H02-graph;
#X connect 2 0 25 0;
#X connect 3 0 2 0;
#X connect 9 0 10 0;
#X connect 10 0 0 0;
#X connect 10 0 0 1;
#X connect 10 0 25 0;
#X connect 12 0 10 1;
#X connect 13 0 12 0;
#X connect 17 0 12 0;
#X connect 22 0 9 0;
#X connect 23 0 12 0;

View file

@ -0,0 +1,57 @@
#N canvas 44 0 604 533 12;
#X obj 43 278 mtof;
#X floatatom 43 255 5 0 150 0 - #0-pit -;
#X obj 32 446 output~;
#X obj 32 225 noise~;
#X text 95 254 <-- cutoff (pitch units);
#X text 106 301 <-- cutoff (Hertz);
#X floatatom 43 303 5 0 0 0 - - -;
#X text 330 494 updated for Pd version 0.39;
#X obj 121 414 metro 250;
#X obj 121 394 tgl 15 0 empty empty empty 0 -6 0 8 -262144 -1 -1 0
1;
#X text 139 391 graphing on/off;
#N canvas 0 0 450 300 graph2 0;
#X array H03-graph 882 float 2;
#X coords 0 1 882 -1 200 140 1;
#X restore 375 290 graph;
#X text 399 432 --- 0.02 sec ---;
#X text 98 224 white noise \, test signal;
#X obj 32 361 bp~;
#X text 73 363 band-pass filter;
#X obj 121 439 tabwrite~ H03-graph;
#X floatatom 54 331 5 0 1000 0 - #0-q -;
#X text 106 329 <-- q;
#N canvas 0 0 450 300 loadbang 0;
#X obj 85 16 loadbang;
#X obj 85 40 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
-1;
#X obj 85 59 f \$0;
#X text 18 179 boxes.;
#X text 16 161 This subpatch loads initial values in number;
#X msg 85 83 \; \$1-pit 72 \; \$1-q 1;
#X connect 0 0 1 0;
#X connect 1 0 2 0;
#X connect 2 0 5 0;
#X restore 139 482 pd loadbang;
#X text 154 8 RESONANT (BAND-PASS) FILTER;
#X text 26 129 The two controls specify \, first \, the center frequency
\, and second \, the sharpness of the filter \, commonly called "q".
If you increase q to 10 or 20 \, you will see a drop in total signal
power \, and moreover \, you'll see and hear the resonant frequency
more clearly in the result.;
#X text 28 30 A simple resonant band-pass filter is provided in the
bp~ object. Resonant filters can be tuned to a specific "center frequency"
and then will pass that frequency while attenuating other frequencies
(the further from the center frequency \, the more attenuation). This
patch uses a white noise source to demonstrate bp~.;
#X connect 0 0 6 0;
#X connect 1 0 0 0;
#X connect 3 0 14 0;
#X connect 6 0 14 1;
#X connect 8 0 16 0;
#X connect 9 0 8 0;
#X connect 14 0 2 0;
#X connect 14 0 2 1;
#X connect 14 0 16 0;
#X connect 17 0 14 2;

View file

@ -0,0 +1,82 @@
#N canvas 360 22 557 528 12;
#X floatatom 44 146 5 0 150 0 - #0-pitch -;
#X text 126 9 SWEEPING FILTERS;
#X obj 44 193 phasor~;
#X obj 59 351 +~;
#X floatatom 81 326 5 0 100 0 - #0-offset -;
#X floatatom 60 222 5 0 0 0 - #0-speed -;
#X floatatom 82 273 5 0 100 0 - #0-depth -;
#X floatatom 75 404 5 0 1000 0 - #0-q -;
#X obj 44 426 vcf~;
#X obj 59 375 tabread4~ mtof;
#X text 127 403 <-- Q (selectivity);
#X text 115 182 sawtooth;
#X text 116 198 oscillator;
#X text 112 221 <-- sweep speed;
#X text 137 245 LFO for sweep;
#X text 134 274 <-- sweep depth;
#X text 131 326 <-- base center frequency;
#X text 103 350 add base to sweep;
#X text 192 375 convert to Hz.;
#X text 97 144 <-- pitch;
#X obj 43 457 output~;
#X obj 44 169 mtof;
#X obj 60 244 phasor~;
#X obj 60 298 *~;
#X text 294 496 updated for Pd version 0.39;
#N canvas 706 247 450 300 startup 0;
#X obj 85 16 loadbang;
#X obj 85 40 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
-1;
#X obj 85 59 f \$0;
#X text 9 257 boxes.;
#X text 18 209 This subpatch loads initial values in number;
#X msg 85 83 \; \$1-pitch 48 \; \$1-speed -2 \; \$1-depth 27 \; \$1-offset
56 \; \$1-q 2;
#X connect 0 0 1 0;
#X connect 1 0 2 0;
#X connect 2 0 5 0;
#X restore 168 491 pd startup;
#X text 14 109 Note the different effects of negative and positive
sweep speeds.;
#X text 13 32 If you want actively changing center frequencies \, use
"vcf~" instead of "bp~". The vcf~ module takes an audio signal to set
center frequency. (Q is still set by messages though.) Vcf is computationally
somewhat more expensive than bp~.;
#N canvas 0 22 612 404 conversion-tables 0;
#N canvas 0 22 450 300 graph2 0;
#X array mtof 130 float 1;
#A 0 8.1758 8.66196 9.17702 9.72272 10.3009 10.9134 11.5623 12.2499
12.9783 13.75 14.5676 15.4339 16.3516 17.3239 18.354 19.4454 20.6017
21.8268 23.1247 24.4997 25.9565 27.5 29.1352 30.8677 32.7032 34.6478
36.7081 38.8909 41.2034 43.6535 46.2493 48.9994 51.9131 55 58.2705
61.7354 65.4064 69.2957 73.4162 77.7817 82.4069 87.3071 92.4986 97.9989
103.826 110 116.541 123.471 130.813 138.591 146.832 155.563 164.814
174.614 184.997 195.998 207.652 220 233.082 246.942 261.626 277.183
293.665 311.127 329.628 349.228 369.994 391.995 415.305 440 466.164
493.883 523.251 554.365 587.33 622.254 659.255 698.456 739.989 783.991
830.609 880 932.328 987.767 1046.5 1108.73 1174.66 1244.51 1318.51
1396.91 1479.98 1567.98 1661.22 1760 1864.66 1975.53 2093 2217.46 2349.32
2489.02 2637.02 2793.83 2959.96 3135.96 3322.44 3520 3729.31 3951.07
4186.01 4434.92 4698.64 4978.03 5274.04 5587.65 5919.91 6271.93 6644.88
7040 7458.62 7902.13 8372.02 8869.84 9397.27 9956.06 10548.1 11175.3
11839.8 12543.9 13289.8 14080;
#X coords 0 12000 130 0 200 100 1;
#X restore 309 225 graph;
#X text 319 333 ------ 130 samples ------;
#X text 518 318 0;
#X text 520 218 12000;
#X restore 168 463 pd conversion-tables;
#X connect 0 0 21 0;
#X connect 2 0 8 0;
#X connect 3 0 9 0;
#X connect 4 0 3 1;
#X connect 5 0 22 0;
#X connect 6 0 23 1;
#X connect 7 0 8 2;
#X connect 8 0 20 0;
#X connect 8 0 20 1;
#X connect 9 0 8 1;
#X connect 21 0 2 0;
#X connect 22 0 23 0;
#X connect 23 0 3 0;

View file

@ -0,0 +1,133 @@
#N canvas 288 109 559 650 12;
#N canvas 0 22 604 396 conversion-tables 0;
#N canvas 0 22 450 300 graph1 0;
#X array dbtorms 123 float 1;
#A 0 0 0 1.25893e-05 1.41254e-05 1.58489e-05 1.77828e-05 1.99526e-05
2.23872e-05 2.51189e-05 2.81838e-05 3.16228e-05 3.54813e-05 3.98107e-05
4.46684e-05 5.01187e-05 5.62341e-05 6.30957e-05 7.07946e-05 7.94328e-05
8.91251e-05 0.0001 0.000112202 0.000125893 0.000141254 0.000158489
0.000177828 0.000199526 0.000223872 0.000251189 0.000281838 0.000316228
0.000354813 0.000398107 0.000446684 0.000501187 0.000562341 0.000630957
0.000707946 0.000794328 0.000891251 0.001 0.00112202 0.00125893 0.00141254
0.00158489 0.00177828 0.00199526 0.00223872 0.00251189 0.00281838 0.00316228
0.00354813 0.00398107 0.00446684 0.00501187 0.00562341 0.00630957 0.00707946
0.00794328 0.00891251 0.01 0.0112202 0.0125893 0.0141254 0.0158489
0.0177828 0.0199526 0.0223872 0.0251189 0.0281838 0.0316228 0.0354813
0.0398107 0.0446684 0.0501187 0.0562341 0.0630957 0.0707946 0.0794328
0.0891251 0.1 0.112202 0.125893 0.141254 0.158489 0.177828 0.199526
0.223872 0.251189 0.281838 0.316228 0.354813 0.398107 0.446684 0.501187
0.562341 0.630957 0.707946 0.794328 0.891251 1 1.12202 1.25893 1.41254
1.58489 1.77828 1.99526 2.23872 2.51189 2.81838 3.16228 3.54813 3.98107
4.46684 5.01187 5.62341 6.30957 7.07946 7.94328 8.91251 10 11.2202
12.5893;
#X coords 0 10 123 0 200 100 1;
#X restore 302 48 graph;
#X text 504 141 0;
#X text 506 41 10;
#X text 321 151 ------ 123 samples ------;
#N canvas 0 22 450 300 graph2 0;
#X array mtof 130 float 1;
#A 0 8.1758 8.66196 9.17702 9.72272 10.3009 10.9134 11.5623 12.2499
12.9783 13.75 14.5676 15.4339 16.3516 17.3239 18.354 19.4454 20.6017
21.8268 23.1247 24.4997 25.9565 27.5 29.1352 30.8677 32.7032 34.6478
36.7081 38.8909 41.2034 43.6535 46.2493 48.9994 51.9131 55 58.2705
61.7354 65.4064 69.2957 73.4162 77.7817 82.4069 87.3071 92.4986 97.9989
103.826 110 116.541 123.471 130.813 138.591 146.832 155.563 164.814
174.614 184.997 195.998 207.652 220 233.082 246.942 261.626 277.183
293.665 311.127 329.628 349.228 369.994 391.995 415.305 440 466.164
493.883 523.251 554.365 587.33 622.254 659.255 698.456 739.989 783.991
830.609 880 932.328 987.767 1046.5 1108.73 1174.66 1244.51 1318.51
1396.91 1479.98 1567.98 1661.22 1760 1864.66 1975.53 2093 2217.46 2349.32
2489.02 2637.02 2793.83 2959.96 3135.96 3322.44 3520 3729.31 3951.07
4186.01 4434.92 4698.64 4978.03 5274.04 5587.65 5919.91 6271.93 6644.88
7040 7458.62 7902.13 8372.02 8869.84 9397.27 9956.06 10548.1 11175.3
11839.8 12543.9 13289.8 14080;
#X coords 0 12000 130 0 200 100 1;
#X restore 309 225 graph;
#X text 319 333 ------ 130 samples ------;
#X text 518 318 0;
#X text 520 218 12000;
#X restore 121 588 pd conversion-tables;
#X obj 31 411 line~;
#X obj 31 387 pack 0 100;
#X floatatom 31 339 3 0 150 0 - #0-cf -;
#X floatatom 47 461 3 0 999 0 - #0-q -;
#X obj 16 512 vcf~;
#X obj 31 436 tabread4~ mtof;
#X text 81 461 <-- Q (selectivity);
#X text 88 5 ANOTHER SWEEPING FILTER EXAMPLE;
#X obj 15 267 clip~ 0 0.5;
#X obj 15 291 *~ 2;
#X obj 15 315 -~;
#X text 119 268 trick to;
#X text 120 285 make symmetric;
#X text 118 302 triangle wave;
#X obj 22 147 f;
#X obj 55 145 + 1;
#X obj 22 217 mtof;
#X obj 55 169 mod 8;
#N canvas 0 22 450 300 graph1 0;
#X array \$0-array1 8 float 2;
#X coords 0 96 8 36 200 100 1;
#X restore 340 144 graph;
#X text 73 336 <-- center frequency;
#X obj 22 123 metro 85;
#X text 107 147 sequencer for;
#X text 122 164 8 note loop;
#X obj 16 576 output~;
#X obj 22 104 tgl 15 0 empty \$0-metro empty 0 -6 0 8 -262144 -1 -1
0 1;
#N canvas 876 177 379 259 startup 0;
#X obj 22 24 loadbang;
#X obj 22 48 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
-1;
#X obj 22 67 f \$0;
#X text 35 195 This subpatch loads initial;
#X text 31 219 values in number boxes.;
#X msg 22 91 \; \$1-cf 61 \; \$1-q 10 \; \$1-metro 1 \; \$1-array1
0 45 48 50 48 55 53 55 57;
#X connect 0 0 1 0;
#X connect 1 0 2 0;
#X connect 2 0 5 0;
#X restore 121 611 pd startup;
#X text 96 364 at least 61;
#X obj 22 241 phasor~;
#X text 294 616 updated for Pd version 0.39;
#X obj 22 193 tabread \$0-array1;
#X obj 16 540 vcf~;
#X obj 31 362 max 61;
#X text 82 409 smooth & convert to Hz.;
#X obj 47 482 max 3;
#X text 105 483 at least 3;
#X text 11 28 Here's an approximate reconstruction of an old riff by
Pink Floyd. Because we're filtering a waveform with odd partials \,
it's easier to pick out the partials in the filtered sound than if
we had had both even and odd ones.;
#X text 78 527 rejection of the stop bands without having;
#X text 79 509 Put two vcf objects in series for better;
#X text 77 545 to make the passband excessively narrow.;
#X connect 1 0 6 0;
#X connect 2 0 1 0;
#X connect 3 0 32 0;
#X connect 4 0 34 0;
#X connect 5 0 31 0;
#X connect 6 0 5 1;
#X connect 6 0 31 1;
#X connect 9 0 10 0;
#X connect 10 0 11 0;
#X connect 11 0 5 0;
#X connect 15 0 16 0;
#X connect 15 0 30 0;
#X connect 16 0 18 0;
#X connect 17 0 28 0;
#X connect 18 0 15 1;
#X connect 21 0 15 0;
#X connect 25 0 21 0;
#X connect 28 0 9 0;
#X connect 28 0 11 1;
#X connect 30 0 17 0;
#X connect 31 0 24 0;
#X connect 31 0 24 1;
#X connect 32 0 2 0;
#X connect 34 0 5 2;
#X connect 34 0 31 2;

View file

@ -0,0 +1,86 @@
#N canvas 87 74 585 621 12;
#X floatatom 354 464 4 0 0 0 - - -;
#X floatatom 150 316 3 0 999 0 - #0-osc2 -;
#X obj 150 336 osc~;
#X text 162 12 ENVELOPE FOLLOWER;
#X text 22 33 An envelope follower measures the mean square power of
an signal as it changes over time. (You can convert mean square power
to RMS ampitude or to decibels if you wish.) The term "mean square"
means simply that the signal should be squared \, and then averaged.
The averageing is done using a low-pass filter such as lop~.;
#X obj 62 466 lop~;
#X floatatom 93 444 3 0 100 0 - #0-lop -;
#X obj 61 356 +~;
#X text 187 317 <-- frequency of second oscillator;
#X obj 62 330 osc~ 500;
#X obj 62 413 *~;
#X obj 62 522 snapshot~;
#X floatatom 62 573 5 0 999 0 - - -;
#X obj 62 545 sqrt;
#X text 335 361 built-in envelope;
#X obj 354 491 dbtorms;
#X floatatom 354 518 5 0 999 0 - - -;
#N canvas 536 459 382 265 startup 0;
#X obj 22 24 loadbang;
#X obj 22 48 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
-1;
#X obj 22 67 f \$0;
#X text 35 195 This subpatch loads initial;
#X text 31 219 values in number boxes.;
#X msg 22 91 \; \$1-osc2 400 \; \$1-lop 10 \; \$1-metro 1 \; pd dsp
1;
#X obj 223 132 metro 250;
#X obj 223 107 r \$0-metro;
#X obj 223 156 s \$0-tick;
#X connect 0 0 1 0;
#X connect 1 0 2 0;
#X connect 2 0 5 0;
#X connect 6 0 8 0;
#X connect 7 0 6 0;
#X restore 217 598 pd startup;
#X text 115 414 square the signal;
#X text 124 440 <-- responsiveness;
#X text 159 501 take snapshot;
#X text 108 548 convert to RMS;
#X text 327 599 updated for Pd version 0.39;
#X text 334 381 follower for comparison;
#X text 107 466 low-pass filter;
#X text 114 573 output;
#X obj 70 497 r \$0-tick;
#X text 159 517 every 1/4 second;
#X obj 389 439 r \$0-tick;
#X obj 354 439 f;
#X obj 376 414 env~;
#X text 20 242 The env~ object at right \, which is a built-in envelope
follower using a higher-quality low-pass filter than lop~ \, is shown
for comparison. Its output is artificially slowed down to match the
homemade one at left.;
#X obj 150 359 *~;
#X obj 185 360 tgl 15 0 empty empty empty 0 -6 0 8 -262144 -1 -1 0
1;
#X text 204 358 <-- on/off;
#X text 20 128 Here we're adding two oscillators so the result should
be an RMS of one if the second oscillator is on \, 0.707 otherwise.
Note two effects: first \, the more responsive the envelope follower
\, the less accurate the result (but the faster it responds). Second
\, if the two oscillators are tuned close to each other their beating
affects the nombers coming out.;
#X connect 0 0 15 0;
#X connect 1 0 2 0;
#X connect 2 0 32 0;
#X connect 5 0 11 0;
#X connect 6 0 5 1;
#X connect 7 0 10 0;
#X connect 7 0 10 1;
#X connect 7 0 30 0;
#X connect 9 0 7 0;
#X connect 10 0 5 0;
#X connect 11 0 13 0;
#X connect 13 0 12 0;
#X connect 15 0 16 0;
#X connect 26 0 11 0;
#X connect 28 0 29 0;
#X connect 29 0 0 0;
#X connect 30 0 29 1;
#X connect 32 0 7 1;
#X connect 33 0 32 1;

View file

@ -0,0 +1,88 @@
#N canvas 407 54 626 729 12;
#X floatatom 145 654 5 0 0 0 - - -;
#X obj 44 565 bp~;
#X obj 44 536 bp~;
#X obj 55 467 mtof;
#X floatatom 55 490 7 0 0 0 - - -;
#X floatatom 98 520 3 0 999 0 - #0-q -;
#X floatatom 55 447 7 0 150 0 - #0-pitch -;
#X obj 145 586 env~ 4096;
#X obj 45 370 *~ 0;
#X obj 44 395 +~ 1;
#X obj 145 608 + 0.5;
#X obj 145 631 int;
#X text 12 41 In this example we use two cascaded bandpass filters
to troll for partials in Jonathan Harvey's famous bell sample.;
#X text 16 233 You can hear partials around 48 \, 51.3 \, 55 (faint!)
\, 57 (fainter!) \, 60 \, two beating partials around 65 \, 67 \, 69
\, 70.9 \, 71.75 \, 72.6 \, 74 \, 74.65 \, 75.6 \, 77 \, 81.2 \, 84.6
\, 86.5 \, and probably many more. There's also one down at 36 \, but
it's easier to see it on the meter than hear it.;
#X text 124 447 <-- center pitch;
#X text 120 463 (shift-drag to fine tune);
#X text 131 491 <-- center frequency;
#X text 138 520 <-- Q (filter selectivity);
#X obj 44 614 output~;
#X text 341 680 updated for Pd version 0.39;
#X text 14 82 Note that filters can give unexpected level changes.
The bp~ object is designed to have roughly unit gain at the pass band
\, so the higher you set "Q" the more amplitude is lost. You can correct
for this by pushing the output amplitude \, but be sure to remember
to reset the output amplitude before you reduce Q again. I set the
Q to 100 and the output amplitude to 110 or 120 (with the room gain
way down.) Then holding the shift key \, slowly drag the center pitch
upward listening for modes.;
#N canvas 316 21 483 471 startup 0;
#X obj 53 335 r readfile;
#X obj 53 388 soundfiler;
#X obj 59 23 loadbang;
#X obj 59 49 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
-1;
#X obj 59 70 f \$0;
#X obj 60 271 /;
#X msg 60 248 44100;
#X obj 60 223 t b f;
#X obj 60 199 r \$0-totsamps;
#X obj 60 294 s \$0-loopf;
#X msg 59 102 \; readfile symbol \$1-array \; \$1-totsamps 143718 \;
\$1-pitch 69 \; \$1-q 0;
#X msg 53 361 read -resize ../sound/bell.aiff \$1;
#X connect 0 0 11 0;
#X connect 2 0 3 0;
#X connect 3 0 4 0;
#X connect 4 0 10 0;
#X connect 5 0 9 0;
#X connect 6 0 5 0;
#X connect 7 0 6 0;
#X connect 7 1 5 1;
#X connect 8 0 7 0;
#X connect 11 0 1 0;
#X restore 456 625 pd startup;
#N canvas 0 0 450 300 graph1 0;
#X array \$0-array 155948 float 0;
#X coords 0 1 155947 -1 200 150 1;
#X restore 396 322 graph;
#X obj 45 322 r \$0-loopf;
#X obj 45 346 phasor~;
#X obj 44 419 tabread4~ \$0-array;
#X obj 89 370 r \$0-totsamps;
#X text 109 12 MEASURING SPECTRA USING BANDPASS FILTERS;
#X connect 1 0 7 0;
#X connect 1 0 18 0;
#X connect 1 0 18 1;
#X connect 2 0 1 0;
#X connect 3 0 4 0;
#X connect 4 0 2 1;
#X connect 4 0 1 1;
#X connect 5 0 2 2;
#X connect 5 0 1 2;
#X connect 6 0 3 0;
#X connect 7 0 10 0;
#X connect 8 0 9 0;
#X connect 9 0 25 0;
#X connect 10 0 11 0;
#X connect 11 0 0 0;
#X connect 23 0 24 0;
#X connect 24 0 8 0;
#X connect 25 0 2 0;
#X connect 26 0 8 1;

View file

@ -0,0 +1,85 @@
#N canvas 280 49 607 705 12;
#X text 336 665 updated for Pd version 0.39;
#X text 109 12 MORE ON MEASURING SPECTRA: HETERODYNING;
#X obj 46 289 phasor~ 100;
#X obj 99 343 phasor~;
#X floatatom 99 320 5 0 999 0 - #0-freq -;
#X obj 99 395 cos~;
#X obj 148 395 cos~;
#X obj 148 370 +~ 0.25;
#X obj 47 547 snapshot~;
#N canvas 536 459 382 265 startup 0;
#X obj 22 24 loadbang;
#X obj 22 48 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
-1;
#X obj 22 67 f \$0;
#X text 35 195 This subpatch loads initial;
#X text 31 219 values in number boxes.;
#X obj 223 132 metro 250;
#X obj 223 107 r \$0-metro;
#X obj 223 156 s \$0-tick;
#X msg 22 91 \; \$1-freq 100 \; \$1-lop 2 \; \$1-metro 1 \; pd dsp
1;
#X connect 0 0 1 0;
#X connect 1 0 2 0;
#X connect 2 0 8 0;
#X connect 5 0 7 0;
#X connect 6 0 5 0;
#X restore 382 573 pd startup;
#X obj 47 446 *~;
#X obj 91 446 *~;
#X obj 48 471 lop~;
#X obj 92 471 lop~;
#X floatatom 153 435 3 0 100 0 - #0-lop -;
#X text 186 435 <-- responsiveness;
#X obj 136 547 snapshot~;
#X floatatom 47 575 5 0 0 0 - - -;
#X floatatom 136 575 5 0 0 0 - - -;
#X obj 161 496 r \$0-tick;
#X obj 161 517 t b b;
#X obj 47 643 expr sqrt($f1*$f1+$f2*$f2);
#X floatatom 47 669 5 0 0 0 - - -;
#X text 56 248 signal to;
#X text 58 268 analyze;
#X text 51 44 Another method for picking out the strengths of partials
in a sound is heterodyning. We guess the frequency of a partial (as
in the previous patch) but this time we multiply by a complex exponential
to frequency-shift the partial down to zero (DC).;
#X text 47 126 Then a low-pass filter (applied separately on the real
and imaginary parts) removes all but the DC component thus obtained.
The result is two audio signals (which we take snapshots of) holding
the real and imaginary parts of the complex amplitude of the partial
we want. Compared to the previous method \, this had the advantage
of reporting the phase of the partial as well as its frequency.;
#X text 240 358 modulate;
#X text 237 394 to DC;
#X text 154 321 <-- test frequency;
#X text 236 376 test frequency;
#X text 132 471 low-pass filter;
#X text 55 596 real;
#X text 59 611 part;
#X text 207 589 part;
#X text 198 574 imaginary;
#X text 105 670 magnitude;
#X connect 2 0 10 0;
#X connect 2 0 11 0;
#X connect 3 0 5 0;
#X connect 3 0 7 0;
#X connect 4 0 3 0;
#X connect 5 0 10 1;
#X connect 6 0 11 1;
#X connect 7 0 6 0;
#X connect 8 0 17 0;
#X connect 10 0 12 0;
#X connect 11 0 13 0;
#X connect 12 0 8 0;
#X connect 13 0 16 0;
#X connect 14 0 13 1;
#X connect 14 0 12 1;
#X connect 16 0 18 0;
#X connect 17 0 21 0;
#X connect 18 0 21 1;
#X connect 19 0 20 0;
#X connect 20 0 8 0;
#X connect 20 1 16 0;
#X connect 21 0 22 0;

View file

@ -0,0 +1,103 @@
#N canvas 7 6 605 578 12;
#X obj 188 393 cos~;
#X obj 231 371 +~ -0.25;
#X obj 231 394 cos~;
#X obj 23 438 *~;
#X obj 89 438 *~;
#X obj 22 462 -~;
#X floatatom 188 322 5 0 0 0 - - -;
#X text 30 242 sample loop for;
#X text 30 260 test signal;
#X text 35 321 pair of allpass;
#X text 34 338 filters to make;
#X text 34 356 90 degree phase;
#X text 32 373 shifted versions;
#X text 238 323 <-- shift frequency;
#X text 310 356 cosine and sine waves;
#X text 55 7 SINGLE SIDEBAND MODULATION;
#X text 300 7 (AKA FREQUENCY SHIFTING);
#N canvas 555 154 448 326 bell-loop 0;
#X obj 23 142 /;
#X obj 23 214 +~ 1;
#X msg 23 117 44100;
#X obj 23 91 t b f;
#X obj 24 264 outlet~;
#N canvas 0 0 450 300 graph1 0;
#X array \$0-array 155948 float 0;
#X coords 0 1 155947 -1 200 150 1;
#X restore 234 88 graph;
#X obj 23 67 r \$0-totsamps;
#X obj 65 190 r \$0-totsamps;
#X obj 23 190 *~;
#X obj 23 166 phasor~;
#X obj 23 238 tabread4~ \$0-array;
#X connect 0 0 9 0;
#X connect 1 0 10 0;
#X connect 2 0 0 0;
#X connect 3 0 2 0;
#X connect 3 1 0 1;
#X connect 6 0 3 0;
#X connect 7 0 8 1;
#X connect 8 0 1 0;
#X connect 9 0 8 0;
#X connect 10 0 4 0;
#X restore 24 279 pd bell-loop;
#N canvas 711 110 483 471 startup 0;
#X obj 53 335 r readfile;
#X obj 53 388 soundfiler;
#X obj 59 23 loadbang;
#X obj 59 49 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
-1;
#X obj 59 70 f \$0;
#X obj 60 271 /;
#X msg 60 248 44100;
#X obj 60 223 t b f;
#X obj 60 199 r \$0-totsamps;
#X obj 60 294 s \$0-loopf;
#X msg 53 361 read -resize ../sound/bell.aiff \$1;
#X msg 59 102 \; readfile symbol \$1-array \; \$1-totsamps 143718;
#X connect 0 0 10 0;
#X connect 2 0 3 0;
#X connect 3 0 4 0;
#X connect 4 0 11 0;
#X connect 5 0 9 0;
#X connect 6 0 5 0;
#X connect 7 0 6 0;
#X connect 7 1 5 1;
#X connect 8 0 7 0;
#X connect 10 0 1 0;
#X restore 157 530 pd startup;
#X obj 21 495 output~;
#X text 352 547 updated for Pd version 0.39;
#X obj 188 347 phasor~;
#X text 123 438 <-- complex multipier;
#X text 122 455 (calculates real part);
#X text 309 371 to form the real and;
#X text 309 387 imaginary part of a;
#X text 309 404 complex sinusoid;
#X text 43 37 The signal sideband modulator gives you only one sideband
for each frequency in the input signal (whereas ring modulation gave
both a positive and negative sideband). You can set the shift frequency
positive to shift all frequencies upward \, or negative to shift them
downwards.;
#X text 42 117 The technique is to filter the input into two versions
\, 90 degrees out of phase \, which can be interpreted as the real
and imaginary part of a complex signal with positive frequencies only.
You can then form the (complex) product of this with a (complex) sinusoid
to modulate upward or downward in frequency.;
#X obj 23 400 hilbert~;
#X text 42 213 The "Hilbert~" object is an abstraction in pd/extra.
;
#X connect 0 0 3 1;
#X connect 1 0 2 0;
#X connect 2 0 4 1;
#X connect 3 0 5 0;
#X connect 4 0 5 1;
#X connect 5 0 19 0;
#X connect 5 0 19 1;
#X connect 6 0 21 0;
#X connect 17 0 29 0;
#X connect 21 0 1 0;
#X connect 21 0 0 0;
#X connect 29 0 3 0;
#X connect 29 1 4 0;

View file

@ -0,0 +1,90 @@
#N canvas 25 22 868 421 12;
#X obj 25 338 filter-graph2 tab1 tab2;
#N canvas 0 0 450 300 graph2 0;
#X array tab1 100 float 1;
#A 0 0.830737 0.844715 0.882793 0.953057 1.0592 1.19383 1.30927 1.28362
1.08532 0.848171 0.656605 0.517756 0.418204 0.345252 0.291106 0.249389
0.216703 0.190566 0.169369 0.1519 0.137418 0.12526 0.114871 0.105957
0.0982917 0.0916027 0.0857987 0.0806894 0.076187 0.0722001 0.0686727
0.0655318 0.0627325 0.060178 0.0580025 0.056008 0.0542273 0.0526222
0.0511875 0.0499289 0.0488555 0.0478795 0.0470241 0.0462859 0.0456642
0.0451251 0.0447277 0.0444219 0.0442324 0.0443406 0.0449216 0.0393798
0.0442362 0.0444218 0.0447274 0.0451473 0.0456706 0.0462777 0.0470196
0.0478395 0.0488555 0.0499664 0.0512245 0.0526221 0.05419 0.0559661
0.0580025 0.0602342 0.0627325 0.0655169 0.0686727 0.0722052 0.076187
0.0806893 0.085799 0.0916177 0.0982915 0.10592 0.11479 0.12526 0.137483
0.151997 0.169411 0.190532 0.216594 0.24918 0.291106 0.345511 0.418206
0.517664 0.656606 0.848216 1.08532 1.28264 1.30927 1.19534 1.05919
0.951738 0.882758 0.851605;
#X coords 0 2 99 0 200 140 1;
#X restore 634 -1 graph;
#N canvas 0 0 450 300 graph2 0;
#X array tab2 100 float 3;
#A 0 8.59501e-06 0.0327982 0.0790568 0.143062 0.250239 0.425263 0.697661
1.04745 1.37257 1.59826 1.73194 1.8042 1.83798 1.84726 1.84029 1.8221
1.79589 1.76375 1.72711 1.68696 1.64405 1.5989 1.55192 1.50343 1.45366
1.40283 1.35108 1.29854 1.24532 1.19151 1.13718 1.0824 1.02722 0.971679
0.915831 0.859703 0.803332 0.746743 0.689957 0.633001 0.57589 0.518653
0.461293 0.403871 0.346275 0.288763 0.230985 0.173676 0.11652 0.0674726
-0.000119478 6.21552 6.16648 6.10932 6.05201 5.99424 5.93673 5.87913
5.82171 5.76435 5.70711 5.65 5.59304 5.53626 5.47967 5.4233 5.36717
5.31132 5.25578 5.2006 5.14582 5.09149 5.03768 4.98446 4.93192 4.88017
4.82934 4.77958 4.73108 4.6841 4.63895 4.59604 4.55589 4.51925 4.48711
4.4609 4.44271 4.43574 4.44501 4.4788 4.55106 4.68474 4.91043 5.23555
5.58534 5.85774 6.03276 6.13994 6.20394 6.24278;
#X coords 0 6.283 99 0 200 140 1;
#X restore 639 200 graph;
#X text 621 56 1;
#X text 633 342 0;
#X text 615 265 pi;
#X text 608 195 2pi;
#X obj 25 203 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
-1;
#X floatatom 33 249 5 0 0 0 - - -;
#X text 621 -8 2;
#X text 104 -6 MEASURING FILTER FREQUENCY AND PHASE RESPONSE;
#X text 610 382 updated for Pd version 0.39;
#X text 691 145 frequency;
#X text 631 141 0;
#X text 814 144 44100;
#N canvas 876 177 375 255 startup 0;
#X obj 22 24 loadbang;
#X obj 22 48 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
-1;
#X obj 22 67 f \$0;
#X text 35 195 This subpatch loads initial;
#X text 31 219 values in number boxes.;
#X msg 22 91 \; \$1-freq 3000 \; \$1-q 3;
#X connect 0 0 1 0;
#X connect 1 0 2 0;
#X connect 2 0 5 0;
#X restore 285 350 pd startup;
#X floatatom 238 257 5 0 10000 0 - #0-freq -;
#X floatatom 249 280 3 0 999 0 - #0-q -;
#X text 12 18 You can use the "filter-graph1" and "filter-graph2" abstractions
as shown to test filters. Connect them as shown with a filter between
them. Try varying the parameters and/or substituting other filters.
;
#X text 575 127 gain=0;
#X text 574 327 phase=0;
#X obj 25 226 filter-graph1 100 44100;
#X obj 227 310 bp~;
#X text 44 202 <-- compute;
#X text 34 266 index;
#X text 290 254 <-- center frequency;
#X text 288 279 <-- "Q";
#X text 9 86 "filter-graph1" takes as arguments the number of points
to graph and the frequency range. "filter-graph2 takes as arguments
the name of a table to hold the (frequency dependent) gain \, and another
\, if specified \, for the phase.;
#X text 8 153 You can edit this patch to replace "bp" with any other
filter you're curious about.;
#X connect 7 0 21 0;
#X connect 16 0 22 1;
#X connect 17 0 22 2;
#X connect 21 0 0 0;
#X connect 21 0 8 0;
#X connect 21 1 0 1;
#X connect 21 1 22 0;
#X connect 21 2 0 2;
#X connect 22 0 0 3;

View file

@ -0,0 +1,74 @@
#N canvas 25 22 868 421 12;
#N canvas 0 0 450 300 graph2 0;
#X array \$0-tab1 100 float 1;
#A 0 1.39998 1.39868 1.3942 1.39349 1.38496 1.3772 1.36745 1.35633
1.34208 1.32931 1.31817 1.30372 1.28879 1.27458 1.25944 1.24351 1.22874
1.21386 1.19924 1.18487 1.17063 1.15653 1.14284 1.13144 1.11914 1.10722
1.09603 1.08515 1.07479 1.06474 1.05519 1.04606 1.03715 1.02899 1.02092
1.0128 1.00624 0.999291 0.992705 0.986255 0.980081 0.974014 0.969307
0.964106 0.959111 0.954207 0.949901 0.945593 0.941227 0.937556 0.933778
0.930231 0.926681 0.923353 0.920059 0.917466 0.914627 0.911849 0.9092
0.906745 0.904264 0.901469 0.900065 0.898006 0.896023 0.893895 0.892373
0.890666 0.889038 0.887483 0.885924 0.884597 0.883215 0.881537 0.880075
0.879619 0.878522 0.877414 0.876234 0.87571 0.874819 0.873886 0.873124
0.87241 0.871807 0.870763 0.870512 0.869952 0.869465 0.868958 0.868403
0.86826 0.867939 0.866731 0.867094 0.867762 0.867796 0.864339 0.872811
0.920535;
#X coords 0 5 99 0 200 300 1;
#X restore 621 28 graph;
#X obj 29 245 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
-1;
#X floatatom 37 289 3 0 0 0 - - -;
#X text 676 334 frequency;
#N canvas 876 177 375 255 startup 0;
#X obj 22 24 loadbang;
#X obj 22 48 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
-1;
#X obj 22 67 f \$0;
#X text 35 195 This subpatch loads initial;
#X text 31 219 values in number boxes.;
#X msg 22 91 \; \$1-pole 60 \; \$1-zero 20;
#X connect 0 0 1 0;
#X connect 1 0 2 0;
#X connect 2 0 5 0;
#X restore 289 390 pd startup;
#X floatatom 281 265 3 -99 99 0 - #0-pole -;
#X text 559 316 gain=0;
#X text 108 34 SHELVING FILTER;
#X obj 29 378 filter-graph2 \$0-tab1;
#X obj 29 266 filter-graph1 100 22050;
#X text 796 330 22050;
#X obj 232 314 rpole~;
#X obj 281 288 / 100;
#X floatatom 335 264 4 -100 100 0 - #0-zero -;
#X obj 335 287 / 100;
#X obj 231 346 rzero~;
#X text 608 21 5;
#X text 616 327 0;
#X text 604 258 1;
#X text 16 58 This patch demonstrates using the raw filters \, rpole~
and rzero~ (raw \, real-valued one-pole and one-zero filters) \, to
make a shelving filter.;
#X text 14 109 If the pole is at p and the zero is at q \, the gain
at DC is (1-q)/(1-p) and the gain at Nyquist is (1+q)/(1+p). If the
pole location is close to plus or minus one \, this can give large
gains unless q is in the same vicinity. (try \, for example \, p=90%
\, q=70%).;
#X text 11 191 The crossover region varies from DC to Nyquist as p
and q decrease from 100% to -100%.;
#X text 278 241 pole;
#X text 334 241 zero;
#X text 383 263 (in hundredths);
#X text 610 387 updated for Pd version 0.39;
#X connect 1 0 9 0;
#X connect 5 0 12 0;
#X connect 9 0 2 0;
#X connect 9 0 8 0;
#X connect 9 1 8 1;
#X connect 9 1 11 0;
#X connect 9 2 8 2;
#X connect 11 0 15 0;
#X connect 12 0 11 1;
#X connect 13 0 14 0;
#X connect 14 0 15 1;
#X connect 15 0 8 3;

View file

@ -0,0 +1,112 @@
#N canvas 41 39 854 640 12;
#N canvas 0 0 450 300 graph2 0;
#X array \$0-tab1 100 float 1;
#A 0 0.960563 0.960996 0.962862 0.970269 0.977017 0.985214 1.00122
1.02249 1.05453 1.10332 1.18193 1.31034 1.5315 1.91468 2.37977 2.37001
1.92679 1.57244 1.36114 1.23298 1.15262 1.09943 1.06243 1.03636 1.0162
1.00108 0.990295 0.981066 0.973613 0.967183 0.962328 0.958092 0.95445
0.951329 0.948619 0.946121 0.943931 0.941728 0.940557 0.93934 0.938046
0.936816 0.935569 0.934901 0.933719 0.933252 0.932534 0.931875 0.93121
0.930347 0.929637 0.929717 0.929279 0.928865 0.928444 0.927868 0.92761
0.926893 0.927202 0.926932 0.926666 0.926305 0.925926 0.926007 0.925702
0.925624 0.92545 0.925285 0.924954 0.924532 0.924071 0.924718 0.924596
0.924454 0.924247 0.923846 0.924172 0.923627 0.924005 0.92393 0.923866
0.923769 0.923157 0.923666 0.923974 0.923561 0.923498 0.923437 0.922882
0.922781 0.92203 0.923331 0.923265 0.922948 0.922413 0.922799 0.925651
0.921397 0.931729 0.976084;
#X coords 0 5 99 0 200 300 1;
#X restore 616 193 graph;
#X obj 41 404 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
-1;
#X floatatom 49 448 3 0 0 0 - - -;
#X text 671 499 frequency;
#N canvas 876 177 375 255 startup 0;
#X obj 22 24 loadbang;
#X obj 22 48 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
-1;
#X obj 22 67 f \$0;
#X text 35 195 This subpatch loads initial;
#X text 31 219 values in number boxes.;
#X msg 22 91 \; \$1-pole 60 \; \$1-zero 20;
#X connect 0 0 1 0;
#X connect 1 0 2 0;
#X connect 2 0 5 0;
#X restore 328 602 pd startup;
#X floatatom 276 368 3 0 99 0 - #0-pole -;
#X text 554 481 gain=0;
#X obj 41 600 filter-graph2 \$0-tab1;
#X obj 41 425 filter-graph1 100 22050;
#X text 791 495 22050;
#X obj 276 391 / 100;
#X floatatom 330 367 4 0 100 0 - #0-zero -;
#X obj 330 390 / 100;
#X text 594 182 5;
#X text 611 492 0;
#X text 599 423 1;
#X text 596 596 updated for Pd version 0.39;
#X text 183 10 PEAKING FILTER;
#X floatatom 406 366 3 0 180 0 - #0-pole -;
#X text 415 328 angle;
#X text 399 344 (degrees);
#X obj 460 435 sin;
#X obj 405 436 cos;
#X obj 405 387 * 3.14159;
#X obj 405 411 / 180;
#X obj 241 515 *;
#X obj 405 460 t b f;
#X obj 460 460 t b f;
#X obj 209 543 cpole~;
#X obj 226 574 czero~;
#X text 266 332 pole and zero;
#X text 284 347 radii (%);
#X obj 277 516 *;
#X obj 314 542 *;
#X obj 349 542 *;
#X text 21 34 To get a peaking filter \, start with a shelving filter
but rotate the pole and zero to the point on the unit circle you want
to amplify or attenuate. The rpole~ and rzero~ filters are replaced
with their complex-valued siblings \, cpole~ and czero~. These filters
take a (real \, imaginary) pair to filter and another (real-imaginary)
pair to specify the pole or zero. As for rpole~ and rzero~ \, the coefficients
may change at audio rate.;
#X text 22 162 The outputs of cpole~ and czero~ are also in the form
of a (real-imaginary) pair. Both outlets of cpole~ are connected to
czero~ in this example \, but then since we want a real-valued filter
\, we only take the real part of the (complex) output of czero~.;
#X text 23 246 Here the pole and zero radii (p and q) control the center-frequency
gain by the formula (1-q)/(1-p). The closer to 1 the radii \, the narrower
the band affected. The non-peak gain \, (1+q)/(1+p) \, is close to
1 as long as p and q are at least 50% or so.;
#X connect 1 0 8 0;
#X connect 5 0 10 0;
#X connect 8 0 2 0;
#X connect 8 0 7 0;
#X connect 8 1 7 1;
#X connect 8 1 28 0;
#X connect 8 2 7 2;
#X connect 10 0 25 0;
#X connect 10 0 32 0;
#X connect 11 0 12 0;
#X connect 12 0 33 0;
#X connect 12 0 34 0;
#X connect 18 0 23 0;
#X connect 21 0 27 0;
#X connect 22 0 26 0;
#X connect 23 0 24 0;
#X connect 24 0 22 0;
#X connect 24 0 21 0;
#X connect 25 0 28 2;
#X connect 26 0 25 0;
#X connect 26 0 33 0;
#X connect 26 1 25 1;
#X connect 26 1 33 1;
#X connect 27 0 32 0;
#X connect 27 0 34 0;
#X connect 27 1 34 1;
#X connect 27 1 32 1;
#X connect 28 0 29 0;
#X connect 28 1 29 1;
#X connect 29 0 7 3;
#X connect 32 0 28 3;
#X connect 33 0 29 2;
#X connect 34 0 29 3;

View file

@ -0,0 +1,74 @@
#N canvas 49 22 840 502 12;
#N canvas 0 0 450 300 graph2 0;
#X array \$0-tab1 100 float 1;
#A 0 0.999974 0.998121 0.998981 1.00106 1.00019 1.00133 1.00017 0.997406
0.995891 0.986251 0.976591 0.959539 0.93749 0.903172 0.859824 0.805118
0.744756 0.682757 0.617726 0.555802 0.496807 0.443599 0.395099 0.351557
0.313317 0.279982 0.250867 0.225225 0.202565 0.182842 0.165875 0.150662
0.13708 0.125107 0.11452 0.105018 0.0965065 0.0887956 0.0819179 0.0757449
0.0701302 0.0650313 0.0604129 0.056344 0.0525467 0.0490616 0.04589
0.0429836 0.0403206 0.0378735 0.0355742 0.0334788 0.0315483 0.0297412
0.0280809 0.0265134 0.0251207 0.0237881 0.0225431 0.0213794 0.0203074
0.0192861 0.0183551 0.0174563 0.0166231 0.0158432 0.0151 0.0144158
0.0137608 0.0131513 0.0125729 0.0120266 0.0115073 0.0110253 0.0105541
0.0101301 0.00971218 0.0093198 0.00894806 0.00859575 0.00825236 0.00794149
0.00763651 0.00734779 0.00707258 0.0068092 0.00656191 0.0063171 0.00609739
0.00587868 0.0056713 0.00547262 0.00528366 0.00509866 0.00493017 0.00476291
0.00460384 0.00445121 0.00430475 0.00416536;
#X coords 0 5 99 0 200 300 1;
#X restore 615 71 graph;
#X obj 32 250 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
-1;
#X floatatom 40 294 3 0 0 0 - - -;
#X text 670 377 frequency;
#N canvas 876 177 375 255 startup 0;
#X obj 22 24 loadbang;
#X obj 22 48 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
-1;
#X obj 22 67 f \$0;
#X text 35 195 This subpatch loads initial;
#X text 31 219 values in number boxes.;
#X msg 22 91 \; \$1-lf 80 \; \$1-hf 150 \;;
#X connect 0 0 1 0;
#X connect 1 0 2 0;
#X connect 2 0 5 0;
#X restore 324 431 pd startup;
#X text 553 359 gain=0;
#X obj 32 446 filter-graph2 \$0-tab1;
#X text 593 60 5;
#X text 610 370 0;
#X text 598 301 1;
#X text 575 435 updated for Pd version 0.39;
#X text 186 -4 BUTTERWORTH FILTER;
#X obj 216 398 butterworth3~;
#X floatatom 244 340 3 0 100 0 - #0-lf -;
#X floatatom 291 339 3 85 150 0 - #0-hf -;
#X obj 244 366 mtof;
#X obj 291 366 mtof;
#X text 790 373 5000;
#X obj 32 271 filter-graph1 100 5000;
#X text 232 318 poles;
#X text 288 318 zeros;
#X text 24 20 The butterworth filter can be configured for low-pass
\, high-pass \, and shelving \, depending on the placement of the poles
and zeros. For low-pass \, the poles are placed to set the cutoff frequency
and the zeros are at -1 (the Nyquist). Leaving the poles fixed and
moving the zeros then gives shelving filters. In this example \, the
actual filtering is relegated to an abstraction (butterworth3~) which
takes frequencies corresponding to the pole and zero placement.;
#X text 24 147 The butterworth3~ abstraction computes filter coeffients
using control messages \, and so it is not suitable for continuously
time-varying Butterworth filters. For that \, it is often appropriate
to use time-saving approximations \, but precisely which approximations
to use will depend on the way the filter is to be used.;
#X connect 1 0 18 0;
#X connect 12 0 6 3;
#X connect 13 0 15 0;
#X connect 14 0 16 0;
#X connect 15 0 12 1;
#X connect 16 0 12 2;
#X connect 18 0 2 0;
#X connect 18 0 6 0;
#X connect 18 1 6 1;
#X connect 18 1 12 0;
#X connect 18 2 6 2;

View file

@ -0,0 +1,85 @@
#N canvas 25 22 868 421 12;
#X obj 25 338 filter-graph2 tab1 tab2;
#N canvas 0 0 450 300 graph2 0;
#X array tab1 100 float 1;
#A 0 0.999994 1.0015 1.00454 0.999907 0.99994 0.999773 1.00002 1.0004
0.999993 0.998703 1 0.999993 1 0.999699 0.999312 0.99924 0.999999 1
0.999937 0.999782 0.999733 0.999322 0.9998 1 0.999998 0.999945 0.999998
0.999779 0.999998 1 0.999991 0.999998 0.999999 0.99949 1 0.999165 1
0.999991 0.999833 0.999694 1.00014 0.999247 1.00001 0.999976 1.00001
0.99974 0.999947 0.998428 1.00052 1.00383 1.00011 0.991395 1.0006 1.00077
0.999952 0.999955 1.00003 0.999937 0.999955 0.999616 0.999266 0.99916
1 0.999989 0.999831 0.999696 1 0.999239 0.999998 0.999998 0.999993
0.999998 0.999998 0.999426 0.999998 0.999999 0.999998 0.999916 0.999714
0.99951 0.999825 0.999998 0.999999 0.999962 0.999837 0.999605 1 0.999164
0.999996 0.99999 1 0.99999 0.999991 0.998888 1.00002 0.999955 0.999942
0.999432 1.00007 1.00956;
#X coords 0 2 99 0 200 140 1;
#X restore 634 -1 graph;
#N canvas 0 0 450 300 graph2 0;
#X array tab2 100 float 3;
#A 0 8.595e-06 0.0615936 0.127096 0.18809 0.251487 0.314087 0.376949
0.439804 0.502669 0.565481 0.628309 0.691149 0.753982 0.816816 0.879645
0.942477 1.00531 1.06814 1.13097 1.1938 1.25663 1.31947 1.3823 1.44513
1.50796 1.5708 1.63363 1.69646 1.75929 1.82212 1.88496 1.94779 2.01062
2.07345 2.13628 2.19912 2.26195 2.32478 2.38761 2.45045 2.51327 2.5761
2.63893 2.70178 2.76457 2.82751 2.89011 2.9535 3.01727 3.08969 3.14147
3.19331 3.26573 3.3295 3.39289 3.45549 3.51843 3.58122 3.64407 3.7069
3.76973 3.83255 3.89539 3.95822 4.02105 4.08388 4.14672 4.20955 4.27238
4.33521 4.39804 4.46088 4.52371 4.58654 4.64937 4.7122 4.77504 4.83787
4.9007 4.96353 5.02637 5.0892 5.15203 5.21486 5.27769 5.34052 5.40335
5.46619 5.52902 5.59185 5.65469 5.71752 5.78033 5.8432 5.90605 5.96891
6.03151 6.09491 6.1559 6.21446;
#X coords 0 6.283 99 0 200 140 1;
#X restore 639 200 graph;
#X text 621 56 1;
#X text 633 342 0;
#X text 615 265 pi;
#X text 608 195 2pi;
#X obj 25 203 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
-1;
#X floatatom 33 249 5 0 0 0 - - -;
#X text 621 -8 2;
#X text 610 382 updated for Pd version 0.39;
#X text 691 145 frequency;
#X text 631 141 0;
#X text 814 144 44100;
#N canvas 876 177 375 255 startup 0;
#X obj 22 24 loadbang;
#X obj 22 48 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
-1;
#X obj 22 67 f \$0;
#X text 35 195 This subpatch loads initial;
#X text 31 219 values in number boxes.;
#X msg 22 91 \; \$1-pole 80;
#X connect 0 0 1 0;
#X connect 1 0 2 0;
#X connect 2 0 5 0;
#X restore 398 370 pd startup;
#X text 575 127 gain=0;
#X text 574 327 phase=0;
#X obj 25 226 filter-graph1 100 44100;
#X text 44 202 <-- compute;
#X text 34 266 index;
#X text 104 -6 ALL-PASS FILTERS;
#X floatatom 346 264 3 -99 99 0 - #0-pole -;
#X obj 239 306 rpole~;
#X obj 346 287 / 100;
#X obj 239 281 rzero_rev~;
#X text 341 240 pole (%);
#X text 14 20 The all-pass filter has a phase response that depends
on its coefficient \, and a flat frequency response. The coefficient
(p) gives the location of the pole. There is a zero at 1/p \, unless
p=0. If p=0 the filter is effectively a one-sample delay. Negative
values of $p$ are allowed \, as long as p is between -1 and 1;
#X connect 7 0 17 0;
#X connect 17 0 0 0;
#X connect 17 0 8 0;
#X connect 17 1 0 1;
#X connect 17 1 24 0;
#X connect 17 2 0 2;
#X connect 21 0 23 0;
#X connect 22 0 0 3;
#X connect 23 0 24 1;
#X connect 23 0 22 1;
#X connect 24 0 22 0;

View file

@ -0,0 +1,109 @@
#N canvas 25 22 703 596 12;
#X text 448 562 updated for Pd version 0.39;
#X text 167 -1 PHASER;
#N canvas 876 177 375 255 startup 0;
#X obj 22 24 loadbang;
#X obj 22 48 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
-1;
#X obj 22 67 f \$0;
#X text 35 195 This subpatch loads initial;
#X text 31 219 values in number boxes.;
#X msg 22 91 \; \$1-pole 80;
#X connect 0 0 1 0;
#X connect 1 0 2 0;
#X connect 2 0 5 0;
#X restore 323 561 pd startup;
#N canvas 0 0 660 424 chord 0;
#X obj 87 97 -~ 0.5;
#X obj 87 146 clip~ -0.5 0.5;
#X obj 87 169 cos~;
#X obj 91 252 hip~ 5;
#X obj 91 315 outlet~;
#X obj 87 122 *~ 3;
#X obj 87 74 phasor~ 220;
#X obj 221 97 -~ 0.5;
#X obj 221 146 clip~ -0.5 0.5;
#X obj 221 169 cos~;
#X obj 221 122 *~ 3;
#X obj 356 100 -~ 0.5;
#X obj 356 149 clip~ -0.5 0.5;
#X obj 356 172 cos~;
#X obj 356 125 *~ 3;
#X obj 491 100 -~ 0.5;
#X obj 491 149 clip~ -0.5 0.5;
#X obj 491 172 cos~;
#X obj 491 125 *~ 3;
#X obj 221 74 phasor~ 251;
#X obj 356 77 phasor~ 281;
#X obj 491 77 phasor~ 311;
#X text 147 32 test sound for phaser;
#X obj 91 285 *~ 0.2;
#X connect 0 0 5 0;
#X connect 1 0 2 0;
#X connect 2 0 3 0;
#X connect 3 0 23 0;
#X connect 5 0 1 0;
#X connect 6 0 0 0;
#X connect 7 0 10 0;
#X connect 8 0 9 0;
#X connect 9 0 3 0;
#X connect 10 0 8 0;
#X connect 11 0 14 0;
#X connect 12 0 13 0;
#X connect 13 0 3 0;
#X connect 14 0 12 0;
#X connect 15 0 18 0;
#X connect 16 0 17 0;
#X connect 17 0 3 0;
#X connect 18 0 16 0;
#X connect 19 0 7 0;
#X connect 20 0 11 0;
#X connect 21 0 15 0;
#X connect 23 0 4 0;
#X restore 73 271 pd chord;
#X obj 72 533 output~;
#X obj 95 325 rpole~;
#X obj 95 300 rzero_rev~;
#X obj 95 374 rpole~;
#X obj 95 349 rzero_rev~;
#X obj 95 422 rpole~;
#X obj 95 397 rzero_rev~;
#X obj 95 471 rpole~;
#X obj 95 446 rzero_rev~;
#X obj 72 501 +~;
#X text 23 17 The phaser ranks \, along with fuzz and wah-wah \, as
one of the great guitar pedals. A phaser simply adds an all-passed
copy of the signal to the original \, making phase reinforcement and
cancellation at frequencies that depend on the all-pass coefficients.
In this example the coefficients range from 0.88 to 0.98 \, controlled
by a phasor~ object (no relation). The phasor~ is converted to a symmetrical
triangle wave (abs($v1-0.5)) and then ranged appropriately.;
#X obj 250 417 phasor~ 0.3;
#X text 22 158 Many variations of this have been invented. A deeper
effect can be obtained by using 12 all-pass filters and adding the
outputs of the 4th \, 8th. and 12th one to the original. Various stereo
configurations are possible. Some people use 6 instead of the 4 stages
used here. Controls can be added to change the frequency of sweeping
and the range of the all-pass coeefficients.;
#X obj 250 449 expr~ 1 - 0.03 - 0.6*abs($v1-0.5)*abs($v1-0.5);
#X connect 3 0 6 0;
#X connect 3 0 13 0;
#X connect 5 0 8 0;
#X connect 6 0 5 0;
#X connect 7 0 10 0;
#X connect 8 0 7 0;
#X connect 9 0 12 0;
#X connect 10 0 9 0;
#X connect 11 0 13 1;
#X connect 12 0 11 0;
#X connect 13 0 4 0;
#X connect 13 0 4 1;
#X connect 15 0 17 0;
#X connect 17 0 6 1;
#X connect 17 0 5 1;
#X connect 17 0 8 1;
#X connect 17 0 7 1;
#X connect 17 0 10 1;
#X connect 17 0 9 1;
#X connect 17 0 12 1;
#X connect 17 0 11 1;

Some files were not shown because too many files have changed in this diff Show more