Designing Sound - Procedural Audio for Games and Film.

Code examples for “Designing Sound” textbook

Practical 25: Helicopter

Pure Data

Helicopter - combined effect

#N canvas 66 22 732 283 10;
#N canvas 73 2 356 792 engine 0;
#X obj 155 769 outlet~;
#X obj 215 428 delwrite~ e1b 50;
#X obj 215 662 delwrite~ e2b 50;
#X obj 99 581 +~;
#X obj 53 702 s~ ewgfb1;
#X obj 215 704 s~ ewgfb2;
#X obj 52 364 r~ ewgfb2;
#X obj 52 418 delwrite~ e1a 10;
#X obj 53 659 delwrite~ e2a 10;
#X obj 215 386 r~ ewgfb1;
#X obj 59 184 *~;
#X obj 4 202 sig~ 1;
#X obj 22 231 /~;
#X obj 59 205 +~ 1;
#X obj 23 312 -~ 0.5;
#X obj 215 407 bp~ 100 2;
#X obj 153 99 noise~;
#X obj 153 165 clip~ -0.5 0.5;
#X obj 22 288 +~;
#X obj 153 143 *~ 12;
#X obj 74 530 cos~;
#X obj 74 508 -~ 0.25;
#X obj 138 529 cos~;
#X obj 138 507 -~ 0.25;
#X obj 74 486 *~ 0.125;
#X obj 138 485 *~ 0.125;
#X obj 99 622 hip~ 12;
#X obj 99 601 lop~ 200;
#X obj 23 335 hip~ 30;
#X obj 153 121 bp~ 500 5;
#X obj 38 266 *~;
#X obj 153 187 *~ 0.15;
#X obj 74 556 *~ 0.17;
#X obj 138 554 *~ 0.17;
#X obj 52 385 *~ 0.6;
#X obj 53 439 vd~ e1a 8;
#X obj 215 450 vd~ e1b 9;
#X obj 53 681 vd~ e2a 3;
#X obj 215 683 vd~ e2b 6;
#X obj 75 54 *~;
#X obj 59 77 *~;
#X obj 59 125 +~;
#X obj 59 98 *~ -14;
#X obj 106 99 *~ 14;
#X obj 59 163 *~ 7;
#X obj 155 725 hip~ 200;
#X obj 155 747 hip~ 200;
#X obj 59 2 inlet~;
#X obj 59 23 phasor~;
#X connect 3 0 27 0;
#X connect 6 0 34 0;
#X connect 9 0 15 0;
#X connect 10 0 13 0;
#X connect 11 0 12 0;
#X connect 12 0 30 0;
#X connect 12 0 18 0;
#X connect 13 0 12 1;
#X connect 14 0 28 0;
#X connect 15 0 1 0;
#X connect 16 0 29 0;
#X connect 17 0 31 0;
#X connect 18 0 14 0;
#X connect 19 0 17 0;
#X connect 20 0 32 0;
#X connect 21 0 20 0;
#X connect 22 0 33 0;
#X connect 23 0 22 0;
#X connect 24 0 21 0;
#X connect 25 0 23 0;
#X connect 26 0 8 0;
#X connect 26 0 2 0;
#X connect 27 0 26 0;
#X connect 28 0 7 0;
#X connect 29 0 19 0;
#X connect 30 0 18 1;
#X connect 31 0 30 1;
#X connect 32 0 3 0;
#X connect 33 0 3 1;
#X connect 34 0 7 0;
#X connect 35 0 8 0;
#X connect 35 0 24 0;
#X connect 35 0 32 0;
#X connect 36 0 2 0;
#X connect 36 0 25 0;
#X connect 36 0 33 0;
#X connect 37 0 4 0;
#X connect 38 0 5 0;
#X connect 38 0 45 0;
#X connect 39 0 40 1;
#X connect 39 0 43 0;
#X connect 40 0 42 0;
#X connect 41 0 44 0;
#X connect 42 0 41 0;
#X connect 43 0 41 1;
#X connect 44 0 10 0;
#X connect 44 0 10 1;
#X connect 45 0 46 0;
#X connect 46 0 0 0;
#X connect 47 0 48 0;
#X connect 48 0 39 0;
#X connect 48 0 39 1;
#X connect 48 0 40 0;
#X restore 132 191 pd engine;
#N canvas 0 0 231 361 tail 0;
#X obj 109 2 inlet~;
#X obj 26 341 outlet~;
#X obj 80 152 noise~;
#X obj 2 115 sig~ 1;
#X obj 2 143 /~;
#X obj 59 87 *~;
#X obj 59 112 +~ 1;
#X obj 26 317 +~;
#X obj 2 287 *~ 0.1;
#X obj 80 229 vcf~ 1 12;
#X obj 64 256 *~;
#X obj 109 205 +~ 100;
#X obj 109 183 *~ 500;
#X obj 158 183 loadbang;
#X obj 64 286 *~ 0.3;
#X obj 109 26 osc~;
#X obj 59 62 *~ 1.5;
#X msg 158 206 6;
#X connect 0 0 15 0;
#X connect 2 0 9 0;
#X connect 3 0 4 0;
#X connect 4 0 8 0;
#X connect 4 0 10 0;
#X connect 5 0 6 0;
#X connect 6 0 4 1;
#X connect 7 0 1 0;
#X connect 8 0 7 0;
#X connect 9 0 10 1;
#X connect 10 0 14 0;
#X connect 11 0 9 1;
#X connect 12 0 11 0;
#X connect 13 0 17 0;
#X connect 14 0 7 1;
#X connect 15 0 12 0;
#X connect 15 0 16 0;
#X connect 16 0 5 0;
#X connect 16 0 5 1;
#X connect 17 0 9 2;
#X restore 271 196 pd tail rotor;
#N canvas 57 35 207 209 gears 0;
#X obj 60 189 outlet~;
#X obj 1 99 *~ 1.45;
#X obj 61 148 *~ 0.33;
#X obj 61 59 *~;
#X obj 78 28 inlet~ gear-ratio;
#X obj 61 4 inlet~ engine speed;
#X obj 1 123 osc~;
#X obj 61 123 osc~;
#X obj 121 122 osc~;
#X obj 61 98 *~ 2.81;
#X obj 1 147 *~ 0.2;
#X obj 121 97 *~ 9.41;
#X obj 121 148 *~ 0.14;
#X connect 1 0 6 0;
#X connect 2 0 0 0;
#X connect 3 0 1 0;
#X connect 3 0 9 0;
#X connect 3 0 11 0;
#X connect 4 0 3 1;
#X connect 5 0 3 0;
#X connect 6 0 10 0;
#X connect 7 0 2 0;
#X connect 8 0 12 0;
#X connect 9 0 7 0;
#X connect 10 0 0 0;
#X connect 11 0 8 0;
#X connect 12 0 0 0;
#X restore 4 174 pd gears;
#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 395 226 pd distance;
#X obj 396 260 dac~;
#X obj 395 163 catch~ body;
#X obj 3 259 throw~ body;
#X obj 131 259 throw~ body;
#X obj 132 58 lop~ 0.6;
#X obj 517 80 mainrotor;
#X obj 595 209 throw~ body;
#X obj 269 259 throw~ body;
#X obj 287 148 lop~ 0.6;
#X obj 271 171 *~;
#X obj 287 127 sig~;
#X obj 624 70 hsl 64 12 0 1 0 1 \$0-tail-mix empty tail-mix 12 6 1
8 -262144 -1 -1 2800 1;
#X obj 286 216 r \$0-tail-mix;
#X obj 270 239 *~;
#X obj 595 185 *~;
#X obj 611 161 r \$0-rotor-mix;
#X obj 624 106 hsl 64 12 0 1 0 1 \$0-rotor-mix empty rotor-mix 12 6
1 8 -262144 -1 -1 6300 1;
#X obj 624 46 hsl 64 12 0 1 0 1 \$0-engine-mix empty engine-mix 6 6
1 8 -262144 -1 -1 1800 1;
#X obj 132 238 *~;
#X obj 148 214 r \$0-engine-mix;
#X obj 3 238 *~;
#X obj 624 82 hsl 64 12 0 1 0 1 \$0-gear-ratio empty gear-ratio 12
6 1 8 -262144 -1 -1 6300 1;
#X obj 55 152 + 2;
#X obj 55 131 * 12;
#X obj 55 108 r \$0-gear-ratio;
#X obj 624 94 hsl 64 12 0 1 0 1 \$0-gear-mix empty gear-mix 12 6 1
8 -262144 -1 -1 1000 1;
#X obj 19 194 r \$0-gear-mix;
#X obj 19 216 * 0.1;
#X obj 624 34 hsl 64 12 0 1 0 1 \$0-engine-speed empty engine-speed
0 6 1 8 -262144 -1 -1 4400 1;
#X obj 132 -2 r \$0-engine-speed;
#X obj 132 18 * 90;
#X obj 132 38 + 1;
#X obj 287 85 r \$0-tail-speed;
#X obj 624 58 hsl 64 12 0 1 0 1 \$0-tail-speed empty tail-speed 12
6 1 8 -262144 -1 -1 3700 1;
#X obj 287 106 * 2;
#X obj 396 186 vrdel 500 3000 0.2;
#X obj 624 22 hsl 64 12 0 1 0 1 \$0-distance empty distance 10 6 1
8 -262144 -1 -1 0 1;
#X obj 467 206 r \$0-distance;
#X connect 0 0 22 0;
#X connect 1 0 17 0;
#X connect 2 0 24 0;
#X connect 3 0 4 0;
#X connect 3 0 4 1;
#X connect 5 0 39 0;
#X connect 8 0 2 0;
#X connect 8 0 13 0;
#X connect 8 0 0 0;
#X connect 9 0 39 1;
#X connect 9 1 18 0;
#X connect 12 0 13 1;
#X connect 13 0 1 0;
#X connect 14 0 12 0;
#X connect 16 0 17 1;
#X connect 17 0 11 0;
#X connect 18 0 10 0;
#X connect 19 0 18 1;
#X connect 22 0 7 0;
#X connect 23 0 22 1;
#X connect 24 0 6 0;
#X connect 26 0 2 1;
#X connect 27 0 26 0;
#X connect 28 0 27 0;
#X connect 30 0 31 0;
#X connect 31 0 24 1;
#X connect 33 0 34 0;
#X connect 34 0 35 0;
#X connect 35 0 8 0;
#X connect 36 0 38 0;
#X connect 38 0 14 0;
#X connect 39 0 3 0;
#X connect 41 0 3 1;

Download heli1.pd.

Helicopter - main rotor signature

#N canvas 340 118 213 197 10;
#N canvas 0 0 349 611 propeller-fan 0;
#N canvas 0 0 289 416 asymmetrical-curve 0;
#X obj -2 248 *~;
#X obj 131 106 *~ -1;
#X obj 131 131 +~ 1;
#X obj 115 154 *~;
#X obj 28 282 min~;
#X obj 30 371 cos~;
#X obj 30 393 outlet~;
#X obj 130 81 vline~;
#X msg 130 57 1 \$1 0 \, 0 0 \$1;
#X obj -3 101 sig~ 1;
#X obj -2 127 -~;
#X obj 45 64 sig~;
#X obj 29 307 *~;
#X obj 45 101 -~ 0.5;
#X obj 45 145 *~;
#X obj 45 123 *~ 3;
#X obj 45 22 * 0.6;
#X obj 45 43 + 0.2;
#X obj 45 189 +~ 3;
#X obj 45 167 *~ 3;
#X obj 30 350 -~ 0.25;
#X obj 29 328 *~ 0.25;
#X obj 45 1 inlet skew;
#X obj 130 34 inlet generate pulse;
#X connect 0 0 4 0;
#X connect 1 0 2 0;
#X connect 2 0 3 1;
#X connect 3 0 4 1;
#X connect 4 0 12 0;
#X connect 5 0 6 0;
#X connect 7 0 1 0;
#X connect 7 0 0 1;
#X connect 8 0 7 0;
#X connect 9 0 10 0;
#X connect 10 0 0 0;
#X connect 11 0 10 1;
#X connect 11 0 13 0;
#X connect 11 0 3 0;
#X connect 12 0 21 0;
#X connect 13 0 15 0;
#X connect 14 0 19 0;
#X connect 15 0 14 0;
#X connect 15 0 14 1;
#X connect 16 0 17 0;
#X connect 17 0 11 0;
#X connect 18 0 12 1;
#X connect 19 0 18 0;
#X connect 20 0 5 0;
#X connect 21 0 20 0;
#X connect 22 0 16 0;
#X connect 23 0 8 0;
#X restore 2 166 pd asymmetrical-curve;
#X obj 71 96 metro 100;
#X obj 71 77 tgl 15 0 empty empty empty 0 -6 0 8 -262144 -1 -1 1 1
;
#X obj 141 65 t f f;
#X obj 152 462 *~;
#X obj 133 238 *~ 220;
#X obj 133 297 +~ 120;
#X obj 116 361 *~;
#X obj 144 142 f;
#X obj 141 23 * 200;
#X obj 171 94 / 3;
#X obj 252 465 *~;
#X obj 252 506 *~;
#X obj 268 445 * 1.1;
#X obj 231 379 * 0.9;
#X obj 268 486 * 1.2;
#X obj 71 54 loadbang;
#N canvas 697 221 354 259 flatnoise 0;
#X obj 1 -25 noise~;
#X obj 1 183 *~;
#X obj 1 206 outlet~;
#X obj 1 156 *~;
#X obj 94 132 expr 0.1+(sqrt($f1)*0.6);
#X text 127 116 fix amp for Q;
#X text 124 79 fix amp for F;
#X obj 60 97 expr~ log(sqrt(5-($v1*$v1)*(0.00000011)));
#X obj 60 -26 inlet~ frequency;
#X obj 94 13 inlet resonance;
#X obj 1 61 vcf~ 100 1;
#X connect 0 0 10 0;
#X connect 1 0 2 0;
#X connect 3 0 1 0;
#X connect 4 0 1 1;
#X connect 7 0 3 1;
#X connect 8 0 7 0;
#X connect 8 0 10 1;
#X connect 9 0 4 0;
#X connect 9 0 10 2;
#X connect 10 0 3 0;
#X restore 133 338 pd flatnoise;
#X text 203 93 duty cycle;
#X obj 141 44 + 10;
#X obj 141 2 r \$0-period;
#X obj 170 258 r \$0-basef;
#X obj 170 277 * 400;
#X obj 170 215 * 600;
#X obj 170 194 r \$0-devf;
#X obj 212 296 r \$0-reson;
#X obj 231 358 * 300;
#X obj 215 401 *~;
#X obj 231 338 r \$0-shift;
#X obj 2 143 r \$0-symmetry;
#X obj 152 485 mdel 10 400 0.7;
#X obj 212 317 * 30;
#X obj 116 560 outlet~ audio;
#X obj 2 580 outlet~ blade signature;
#X obj 116 422 mdel 10 400 0.7;
#X obj 152 526 mdel 20 400 0.5;
#X connect 0 0 4 1;
#X connect 0 0 5 0;
#X connect 0 0 11 0;
#X connect 0 0 12 0;
#X connect 0 0 27 0;
#X connect 0 0 33 0;
#X connect 0 0 7 0;
#X connect 1 0 8 0;
#X connect 2 0 1 0;
#X connect 3 0 1 1;
#X connect 3 1 10 0;
#X connect 4 0 30 0;
#X connect 5 0 6 0;
#X connect 6 0 17 0;
#X connect 7 0 34 0;
#X connect 8 0 0 1;
#X connect 9 0 19 0;
#X connect 10 0 8 1;
#X connect 11 0 30 1;
#X connect 12 0 35 1;
#X connect 13 0 11 1;
#X connect 14 0 27 1;
#X connect 15 0 12 1;
#X connect 16 0 2 0;
#X connect 17 0 7 1;
#X connect 19 0 3 0;
#X connect 20 0 9 0;
#X connect 21 0 22 0;
#X connect 22 0 6 1;
#X connect 23 0 5 1;
#X connect 24 0 23 0;
#X connect 25 0 31 0;
#X connect 26 0 14 0;
#X connect 26 0 13 0;
#X connect 26 0 15 0;
#X connect 27 0 34 1;
#X connect 28 0 26 0;
#X connect 29 0 0 0;
#X connect 30 0 32 0;
#X connect 30 0 35 0;
#X connect 31 0 17 1;
#X connect 34 0 4 0;
#X connect 34 0 32 0;
#X connect 35 0 32 0;
#X restore 100 206 pd propeller-fan;
#X obj 111 117 hsl 64 12 0 1 0 1 \$0-period empty period 12 6 1 8 -262144
-1 -1 1900 1;
#X obj 111 129 hsl 64 12 0 1 0 1 \$0-basef empty basef 12 6 1 8 -262144
-1 -1 100 1;
#X obj 111 141 hsl 64 12 0 1 0 1 \$0-devf empty deviationf 7 6 1 8
-262144 -1 -1 3100 1;
#X obj 111 153 hsl 64 12 0 1 0 1 \$0-reson empty reson 7 6 1 8 -262144
-1 -1 1200 1;
#X obj 111 165 hsl 64 12 0 1 0 1 \$0-shift empty shift 7 6 1 8 -262144
-1 -1 1000 1;
#X obj 111 177 hsl 64 12 0 1 0 1 \$0-symmetry empty symmetry 7 6 1
8 -262144 -1 -1 2500 1;
#X obj 100 259 outlet~ blade signature;
#X obj 207 235 outlet~ audio;
#X connect 0 0 7 0;
#X connect 0 1 8 0;
#X coords 0 -1 1 1 85 100 1 100 100;

Download mainrotor.pd.

Helicopter - delay unit (needed abstraction)

#N canvas 127 52 159 199 10;
#X obj 1 1 inlet~;
#X obj 1 179 outlet~;
#X obj 17 133 *~ \$3;
#X obj 1 158 +~;
#X obj 12 28 lop~ \$2;
#X obj 17 112 vd~ \$0-aa \$1;
#X obj 17 70 inlet~;
#X obj 17 91 +~ 25;
#X obj 12 49 delwrite~ \$0-aa 500;
#X connect 0 0 3 0;
#X connect 0 0 4 0;
#X connect 2 0 3 1;
#X connect 3 0 1 0;
#X connect 4 0 8 0;
#X connect 5 0 2 0;
#X connect 6 0 7 0;
#X connect 7 0 5 0;

Download mdel.pd.

Helicopter - variable delay unit (needed abstraction)

#N canvas 0 0 439 243 10;
#X obj 42 26 inlet~;
#X obj 194 111 outlet~;
#X obj 42 47 lop~ \$2;
#X obj 194 88 vd~ \$0-aa \$1;
#X obj 194 22 inlet~;
#X obj 194 65 +~ 25;
#X obj 194 43 *~ \$3;
#X obj 42 68 delwrite~ \$0-aa 100;
#X connect 0 0 2 0;
#X connect 2 0 7 0;
#X connect 3 0 1 0;
#X connect 4 0 6 0;
#X connect 5 0 3 0;
#X connect 6 0 5 0;

Download vrdel.pd.

Audio

Passing helicopter effect

First example in file is a slow fly-by. Second example demonstrates separate control of engine, tail and main rotor speeds during flight.

Download helicopter.wav.