Designing Sound - Procedural Audio for Games and Film.

Code examples for “Designing Sound” textbook

Practical 17: Thunder

Pure Data

Thunder - combined thunder effect

#N canvas 580 76 601 372 10;
#X obj 248 113 *~ 0.9;
#N canvas 152 29 188 323 afterimage 0;
#X obj 1 114 noise~;
#X obj 16 176 noise~;
#X obj 1 199 *~;
#X obj 1 241 bp~ 333 4;
#X obj 1 135 lop~ 3;
#X obj 1 220 clip~ -1 1;
#X obj 52 68 line;
#X obj 52 109 + 3;
#X obj 52 89 * 30;
#X obj 1 156 *~ 80;
#X obj 117 67 line;
#X obj 1 263 *~;
#X msg 52 48 1 \, 0 600;
#X msg 117 47 1 \, 0 6000;
#X obj 1 283 *~ 0.9;
#X obj 85 23 del 200;
#X obj 85 1 inlet;
#X obj 1 303 outlet~;
#X connect 0 0 4 0;
#X connect 1 0 2 1;
#X connect 2 0 5 0;
#X connect 3 0 11 0;
#X connect 4 0 9 0;
#X connect 5 0 3 0;
#X connect 6 0 8 0;
#X connect 7 0 4 1;
#X connect 8 0 7 0;
#X connect 9 0 2 0;
#X connect 10 0 11 1;
#X connect 11 0 14 0;
#X connect 12 0 6 0;
#X connect 13 0 10 0;
#X connect 14 0 17 0;
#X connect 15 0 12 0;
#X connect 15 0 13 0;
#X connect 16 0 15 0;
#X restore 248 91 pd afterimage;
#X obj 272 262 distance;
#X obj 323 238 line;
#X obj 11 71 r go;
#X obj 248 68 r go;
#X obj 350 66 r go;
#X obj 128 70 r go;
#X obj 186 49 line;
#X msg 186 26 1 \, 0 9000;
#X obj 186 4 r go;
#X obj 323 193 r go;
#X obj 272 348 dac~;
#X obj 286 288 s~ udly;
#N canvas 265 516 402 108 box 1;
#X obj 319 51 switch~;
#X obj 319 29 inlet;
#X obj 1 7 udly 12000;
#X obj 11 17 udly 12000;
#X obj 21 27 udly 12000;
#X obj 31 37 udly 12000;
#X obj 41 47 udly 12000;
#X obj 51 57 udly 12000;
#X obj 61 67 udly 12000;
#X obj 71 77 udly 12000;
#X obj 87 7 udly 12000;
#X obj 97 17 udly 12000;
#X obj 107 27 udly 12000;
#X obj 117 37 udly 12000;
#X obj 127 47 udly 12000;
#X obj 137 57 udly 12000;
#X obj 147 67 udly 12000;
#X obj 157 77 udly 12000;
#X obj 172 6 udly 12000;
#X obj 182 16 udly 12000;
#X obj 192 26 udly 12000;
#X obj 202 36 udly 12000;
#X obj 212 46 udly 12000;
#X obj 222 56 udly 12000;
#X obj 232 66 udly 12000;
#X obj 242 76 udly 12000;
#X connect 1 0 0 0;
#X restore 465 135 pd box of delays;
#X obj 126 264 catch~ la;
#X obj 368 263 catch~ ra;
#X obj 465 115 tgl 15 0 empty empty empty 0 -6 0 8 -262144 -1 -1 1
1;
#X obj 490 112 s shake;
#X obj 490 91 r go;
#X obj 12 12 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
-1;
#X obj 12 34 s go;
#X obj 186 71 * 2000;
#X msg 323 215 0 \, 1 12000;
#X obj 248 135 throw~ out;
#X obj 197 264 catch~ out;
#X obj 350 135 throw~ distance;
#X obj 129 135 throw~ distance;
#X obj 272 173 catch~ distance;
#N canvas 132 138 177 510 rumble 0;
#X obj 17 110 noise~;
#X obj 33 314 -~ 0.5;
#X obj 33 339 *~;
#X obj 33 359 *~ -4;
#X obj 33 379 +~ 1;
#X obj 33 399 *~ 0.5;
#X obj 75 28 noise~;
#X obj 75 89 max~ 0;
#X obj 17 172 samphold~;
#X msg 938 102 0.54;
#X obj 75 151 phasor~;
#X obj 75 111 *~ 3000;
#X obj 17 419 *~;
#X obj 17 439 hip~ 100;
#X obj 17 192 rpole~ 0.99;
#X obj 17 212 *~ 0.04;
#X obj 75 131 +~ 1;
#X obj 81 -12 inlet density;
#X obj 17 131 lop~;
#X obj 17 152 lop~;
#X obj 75 68 lop~;
#X obj 75 48 lop~;
#X obj 1 480 outlet~;
#X obj 17 241 min~ 0;
#X obj 17 263 *~ -1;
#X obj 65 240 max~ 0;
#X obj 17 286 +~;
#X obj 1 28 vline~;
#X obj 1 459 *~;
#X obj 1 -12 inlet trig;
#X msg 1 8 1 50 \, 0 8000 50;
#X connect 0 0 18 0;
#X connect 1 0 2 0;
#X connect 1 0 2 1;
#X connect 2 0 3 0;
#X connect 3 0 4 0;
#X connect 4 0 5 0;
#X connect 5 0 12 1;
#X connect 6 0 21 0;
#X connect 7 0 11 0;
#X connect 8 0 14 0;
#X connect 10 0 8 1;
#X connect 11 0 16 0;
#X connect 12 0 13 0;
#X connect 13 0 28 1;
#X connect 14 0 15 0;
#X connect 15 0 25 0;
#X connect 15 0 23 0;
#X connect 16 0 10 0;
#X connect 17 0 20 1;
#X connect 17 0 21 1;
#X connect 17 0 18 1;
#X connect 17 0 19 1;
#X connect 18 0 19 0;
#X connect 19 0 8 0;
#X connect 20 0 7 0;
#X connect 21 0 20 0;
#X connect 23 0 24 0;
#X connect 24 0 26 0;
#X connect 25 0 26 1;
#X connect 26 0 1 0;
#X connect 26 0 12 0;
#X connect 27 0 28 0;
#X connect 28 0 22 0;
#X connect 29 0 30 0;
#X connect 30 0 27 0;
#X restore 128 93 pd rumble;
#N canvas 264 575 152 190 strike 0;
#X obj 0 172 outlet~;
#X obj 1 44 route 0 1 2 3;
#X obj 1 0 inlet;
#X obj 1 23 strike-pattern;
#X obj 1 67 strike-sound;
#X obj 22 87 strike-sound;
#X obj 44 107 strike-sound;
#X obj 65 126 strike-sound;
#X connect 1 0 4 0;
#X connect 1 1 5 0;
#X connect 1 2 6 0;
#X connect 1 3 7 0;
#X connect 2 0 3 0;
#X connect 3 0 1 0;
#X connect 4 0 0 0;
#X connect 5 0 0 0;
#X connect 6 0 0 0;
#X connect 7 0 0 0;
#X restore 11 94 pd strike sound;
#N canvas 148 116 232 212 deep 0;
#X obj 8 -8 noise~;
#X obj 7 161 *~;
#X obj 84 115 *~;
#X obj 84 49 del 1000;
#X obj 84 28 inlet;
#X obj 7 181 outlet~;
#X obj 84 91 vline~;
#X msg 84 70 1 2000 \, 0 20000 2000;
#X obj 8 12 lop~ 80;
#X obj 8 32 lop~ 80;
#X obj 8 52 hip~ 15;
#X obj 8 92 clip~ -1 1;
#X obj 8 72 *~ 12;
#X obj 8 112 lop~ 80;
#X obj 8 132 lop~ 80;
#X connect 0 0 8 0;
#X connect 1 0 5 0;
#X connect 2 0 1 1;
#X connect 3 0 7 0;
#X connect 4 0 3 0;
#X connect 6 0 2 0;
#X connect 6 0 2 1;
#X connect 7 0 6 0;
#X connect 8 0 9 0;
#X connect 9 0 10 0;
#X connect 10 0 12 0;
#X connect 11 0 13 0;
#X connect 12 0 11 0;
#X connect 13 0 14 0;
#X connect 14 0 1 0;
#X restore 350 88 pd deep;
#X obj 11 135 throw~ out;
#X obj 11 115 *~ 0.3;
#X obj 129 114 *~ 0.3;
#X obj 350 111 *~ 0.5;
#X connect 0 0 24 0;
#X connect 1 0 0 0;
#X connect 2 0 12 0;
#X connect 2 0 12 1;
#X connect 2 0 13 0;
#X connect 3 0 2 1;
#X connect 4 0 30 0;
#X connect 5 0 1 0;
#X connect 6 0 31 0;
#X connect 7 0 29 0;
#X connect 8 0 22 0;
#X connect 9 0 8 0;
#X connect 10 0 9 0;
#X connect 11 0 23 0;
#X connect 15 0 12 0;
#X connect 16 0 12 1;
#X connect 17 0 14 0;
#X connect 19 0 18 0;
#X connect 20 0 21 0;
#X connect 22 0 29 1;
#X connect 23 0 3 0;
#X connect 25 0 12 0;
#X connect 25 0 12 1;
#X connect 28 0 2 0;
#X connect 29 0 34 0;
#X connect 30 0 33 0;
#X connect 31 0 35 0;
#X connect 33 0 32 0;
#X connect 34 0 27 0;
#X connect 35 0 26 0;

Download thunder4.pd.

Thunder - strike sound (abstraction needed by above)

#N canvas 95 82 204 321 10;
#X obj 0 154 noise~;
#X obj 39 207 *~;
#X obj 55 175 vline~;
#X obj 136 96 + 100;
#X obj 87 302 outlet~;
#X obj 55 0 inlet;
#X obj 39 265 bp~ 1 3;
#X obj 144 266 bp~ 1 3;
#X obj 166 140 * 0.5;
#X obj 55 45 swap 1;
#X obj 55 68 -;
#X msg 55 153 1 \, 0 \$1 0;
#X obj 55 22 t f f;
#X obj 55 110 pow 5;
#X obj 55 89 + 0.4;
#X obj 136 117 t f f;
#X obj 136 75 * 1200;
#X obj 55 132 * 200;
#X connect 0 0 1 0;
#X connect 1 0 6 0;
#X connect 1 0 7 0;
#X connect 2 0 1 1;
#X connect 3 0 15 0;
#X connect 5 0 12 0;
#X connect 6 0 4 0;
#X connect 7 0 4 0;
#X connect 8 0 7 1;
#X connect 9 0 10 0;
#X connect 9 1 10 1;
#X connect 10 0 14 0;
#X connect 11 0 2 0;
#X connect 12 0 9 0;
#X connect 12 1 16 0;
#X connect 13 0 17 0;
#X connect 14 0 13 0;
#X connect 15 0 6 1;
#X connect 15 1 8 0;
#X connect 16 0 3 0;
#X connect 17 0 11 0;

Download strike-sound.pd.

Thunder - distancing function (abstraction needed by above)

#N canvas 0 0 450 300 10;
#N canvas 0 0 205 392 distance 0;
#X obj 5 93 inlet~;
#X obj 4 370 outlet~;
#X obj 5 346 +~;
#X obj 32 199 delwrite~ distance 1000;
#X obj 21 243 sig~;
#X obj 5 115 lop~ 100;
#X obj 21 303 vd~ distance;
#X obj 21 323 *~ 0.5;
#X obj 67 2 inlet;
#X obj 87 29 swap 1;
#X obj 87 50 -;
#X obj 87 92 + 50;
#X obj 5 137 lop~ 100;
#X obj 5 159 lop~ 100;
#X obj 21 283 +~ 2;
#X obj 21 263 *~ 3;
#X obj 87 71 * 6000;
#X connect 0 0 5 0;
#X connect 2 0 1 0;
#X connect 4 0 15 0;
#X connect 5 0 12 0;
#X connect 6 0 7 0;
#X connect 7 0 2 1;
#X connect 8 0 4 0;
#X connect 8 0 9 0;
#X connect 9 0 10 0;
#X connect 9 1 10 1;
#X connect 10 0 16 0;
#X connect 11 0 5 1;
#X connect 11 0 12 1;
#X connect 11 0 13 1;
#X connect 12 0 13 0;
#X connect 13 0 2 0;
#X connect 13 0 3 0;
#X connect 14 0 6 0;
#X connect 15 0 14 0;
#X connect 16 0 11 0;
#X restore 71 128 pd distance;
#X obj 71 88 inlet~;
#X obj 72 162 outlet~;
#X obj 143 108 inlet distance;
#X connect 0 0 2 0;
#X connect 1 0 0 0;
#X connect 3 0 0 1;

Download distance.pd.

Thunder - delay unit (abstraction needed by above)

#N canvas 128 91 234 472 10;
#X obj 82 24 delwrite~ \$0-a \$1;
#X obj 5 234 delread~ \$0-a;
#X obj 82 1 r~ udly;
#X obj 5 1 r shake;
#X obj 5 387 *~;
#X obj 20 163 \$1;
#X obj 20 189 -;
#X obj 20 211 / \$1;
#X obj 5 22 t b b;
#X obj 5 89 random;
#X obj 35 45 \$1;
#X obj 35 66 * 10000;
#X obj 5 109 / 10000;
#N canvas 0 0 450 300 cpan 0;
#X obj -2 -2 inlet~ signal;
#X obj 88 192 *~;
#X obj -2 192 *~;
#X obj 104 110 cos~;
#X obj 104 87 -~ 0.25;
#X obj 104 65 *~ 0.25;
#X obj -2 220 outlet~ left;
#X obj 88 220 outlet~ right;
#X obj 14 166 cos~;
#X obj 14 142 -~ 0.25;
#X obj 107 37 inlet~;
#X connect 0 0 2 0;
#X connect 0 0 1 0;
#X connect 1 0 7 0;
#X connect 2 0 6 0;
#X connect 3 0 1 1;
#X connect 4 0 3 0;
#X connect 4 0 9 0;
#X connect 5 0 4 0;
#X connect 8 0 2 1;
#X connect 9 0 8 0;
#X connect 10 0 5 0;
#X restore 5 410 pd cpan;
#X obj 5 449 throw~ la;
#X obj 75 448 throw~ ra;
#X obj 59 160 random 10000;
#X obj 21 267 *;
#X obj 5 130 t f b f b;
#X obj 59 183 / 20000;
#X obj 59 206 + 0.5;
#X obj 36 315 * 400;
#X obj 36 337 + 400;
#X obj 5 364 bp~ 1000 2;
#X connect 1 0 23 0;
#X connect 2 0 0 0;
#X connect 3 0 8 0;
#X connect 4 0 13 0;
#X connect 5 0 6 0;
#X connect 6 0 7 0;
#X connect 7 0 17 0;
#X connect 8 0 9 0;
#X connect 8 1 10 0;
#X connect 9 0 12 0;
#X connect 10 0 11 0;
#X connect 11 0 9 1;
#X connect 12 0 18 0;
#X connect 13 0 14 0;
#X connect 13 1 15 0;
#X connect 16 0 19 0;
#X connect 17 0 4 1;
#X connect 17 0 13 1;
#X connect 17 0 21 0;
#X connect 18 0 1 0;
#X connect 18 1 5 0;
#X connect 18 2 6 1;
#X connect 18 3 16 0;
#X connect 19 0 20 0;
#X connect 20 0 17 1;
#X connect 21 0 22 0;
#X connect 22 0 23 1;
#X connect 23 0 4 0;

Download udly.pd.

Audio

Thunder sounds

Three strikes showing different levels of detail. First is a highly efficient castle thunder using only four subtractive bands, high crash, middle, mid-low rumble, sub-boom. Next is a cheap N-Wave and multi-tap delay model. Finally is a composite N-Wave and large environment model made from several multi-taps and reverbs to model different environment features.

Download thunder.wav.