Designing Sound - Procedural Audio for Games and Film.

Code examples for “Designing Sound” textbook

Practical 23: Fans

Pure Data

Fans - air pulse simulation

#N canvas 211 269 134 206 10;
#X obj 3 185 dac~;
#X obj 3 104 sig~ 1;
#X obj 3 132 /~;
#X obj 52 82 *~;
#X obj 52 52 *~;
#X obj 68 33 nbx 5 14 1 10 0 1 empty empty pulsewidth 0 -6 1 8 -262144
-1 -1 6 256;
#X obj 52 104 +~ 1;
#X obj 3 155 *~ 0.2;
#X obj 52 3 osc~ 12;
#X connect 1 0 2 0;
#X connect 2 0 7 0;
#X connect 3 0 6 0;
#X connect 4 0 3 0;
#X connect 4 0 3 1;
#X connect 5 0 4 1;
#X connect 6 0 2 1;
#X connect 7 0 0 1;
#X connect 7 0 0 0;
#X connect 8 0 4 0;

Download fan1.pd.

Fans - adding noise effect

#N canvas 376 321 145 318 10;
#X obj 38 176 noise~;
#X obj 22 220 *~;
#X obj 6 295 dac~;
#X obj 6 104 sig~ 1;
#X obj 6 132 /~;
#X obj 55 82 *~;
#X obj 55 52 *~;
#X obj 71 33 nbx 5 14 1 10 0 1 empty empty pulsewidth 0 -6 1 8 -262144
-1 -1 4 256;
#X obj 6 244 +~;
#X obj 55 104 +~ 1;
#X obj 6 267 *~ 0.2;
#X obj 22 155 *~ 0.4;
#X obj 38 198 bp~ 700 1;
#X obj 55 3 osc~ 12;
#X connect 0 0 12 0;
#X connect 1 0 8 1;
#X connect 3 0 4 0;
#X connect 4 0 8 0;
#X connect 4 0 11 0;
#X connect 5 0 9 0;
#X connect 6 0 5 0;
#X connect 6 0 5 1;
#X connect 7 0 6 1;
#X connect 8 0 10 0;
#X connect 9 0 4 1;
#X connect 10 0 2 1;
#X connect 10 0 2 0;
#X connect 11 0 1 0;
#X connect 12 0 1 1;
#X connect 13 0 6 0;

Download fan2.pd.

Fans - filter (Doppler effect)

#N canvas 226 220 221 368 10;
#X obj 80 144 noise~;
#X obj 26 342 dac~;
#X obj 2 107 sig~ 1;
#X obj 2 135 /~;
#X obj 59 84 *~;
#X obj 59 54 *~;
#X obj 59 12 nbx 5 14 1 10 0 1 empty empty pulsewidth 0 -6 1 8 -262144
-1 -1 7 256;
#X obj 59 106 +~ 1;
#X obj 26 309 +~;
#X obj 2 279 *~ 0.1;
#X obj 80 221 vcf~ 1 12;
#X obj 64 248 *~;
#X msg 158 198 5;
#X obj 109 197 +~ 100;
#X obj 109 175 *~ 500;
#X obj 158 175 loadbang;
#X obj 109 14 osc~ 12;
#X obj 64 278 *~ 0.3;
#X connect 0 0 10 0;
#X connect 2 0 3 0;
#X connect 3 0 9 0;
#X connect 3 0 11 0;
#X connect 4 0 7 0;
#X connect 5 0 4 0;
#X connect 5 0 4 1;
#X connect 6 0 5 0;
#X connect 7 0 3 1;
#X connect 8 0 1 0;
#X connect 8 0 1 1;
#X connect 9 0 8 0;
#X connect 10 0 11 1;
#X connect 11 0 17 0;
#X connect 12 0 10 2;
#X connect 13 0 10 1;
#X connect 14 0 13 0;
#X connect 15 0 12 0;
#X connect 16 0 5 1;
#X connect 16 0 14 0;
#X connect 17 0 8 1;

Download fan3.pd.

Fans - chop (blade slap)

#N canvas 226 220 251 421 10;
#X obj 112 207 noise~;
#X obj 168 195 dac~;
#X obj 7 169 sig~ 1;
#X obj 34 198 /~;
#X obj 82 148 *~;
#X obj 82 118 *~;
#X obj 82 80 nbx 5 14 1 10 0 1 empty empty pulsewidth 0 -6 1 8 -262144
-1 -1 8 256;
#X obj 82 170 +~ 1;
#X obj 58 372 +~;
#X obj 34 342 *~ 0.1;
#X obj 96 311 *~;
#X obj 58 400 delwrite~ a 400;
#X obj 168 165 vd~ a;
#X obj 168 141 +~ 200;
#X obj 168 62 cos~;
#X obj 112 236 lop~ 200;
#X obj 96 341 *~ 0.3;
#X obj 184 97 nbx 5 14 1 20 0 1 empty empty chop 0 -6 1 8 -262144 -1
-1 10 256;
#X obj 168 117 *~;
#X obj 168 36 phasor~;
#X obj 168 14 nbx 5 14 1 20 0 1 empty empty speed 0 -6 1 8 -262144
-1 -1 16 256;
#X connect 0 0 15 0;
#X connect 2 0 3 0;
#X connect 3 0 9 0;
#X connect 3 0 10 0;
#X connect 4 0 7 0;
#X connect 5 0 4 0;
#X connect 5 0 4 1;
#X connect 6 0 5 0;
#X connect 7 0 3 1;
#X connect 8 0 11 0;
#X connect 9 0 8 0;
#X connect 10 0 16 0;
#X connect 12 0 1 1;
#X connect 12 0 1 0;
#X connect 13 0 12 0;
#X connect 14 0 5 1;
#X connect 14 0 18 0;
#X connect 15 0 10 1;
#X connect 16 0 8 1;
#X connect 17 0 18 1;
#X connect 18 0 13 0;
#X connect 19 0 14 0;
#X connect 20 0 19 0;

Download fan4.pd.

Fans - complete aircon system model

#N canvas 309 186 537 616 10;
#X obj 176 276 noise~;
#X obj 160 360 *~;
#X obj 220 583 dac~;
#X obj 144 204 sig~ 1;
#X obj 144 232 /~;
#X obj 193 182 *~;
#X obj 193 152 *~;
#X obj 144 384 +~;
#X obj 193 204 +~ 1;
#X obj 160 255 *~ 0.4;
#X obj 176 298 bp~ 700 1;
#X obj 7 71 phasor~;
#N canvas 5 12 292 361 rotor 0;
#N canvas 0 0 450 300 grapha 0;
#X obj 100 100 cnv 15 100 100 empty empty empty 20 12 0 14 -262144
-66577 0;
#N canvas 0 0 450 300 graph3 0;
#X array A 100 float 0;
#X coords 0 1 99 -1 100 100 1;
#X restore 100 100 graph;
#X obj 289 155 inlet~;
#X obj 210 182 tabwrite~ A;
#X obj 222 110 metro 200;
#X obj 230 148 s b;
#X obj 221 86 tgl 15 0 empty empty empty 0 -6 0 8 -262144 -1 -1 0 1
;
#X connect 2 0 3 0;
#X connect 4 0 3 0;
#X connect 4 0 5 0;
#X connect 6 0 4 0;
#X coords 0 -1 1 1 100 100 1 100 100;
#X restore 4 260 pd grapha;
#X obj 117 227 *~;
#X obj 117 67 *~;
#X obj 117 135 +~;
#X obj 134 182 *~;
#X obj 133 110 sig~ 0.2;
#X obj 117 0 noise~;
#X obj 133 44 r brush-level;
#X obj 133 87 r rotor-level;
#X obj 117 22 bp~ 4000 1;
#X obj 133 204 *~;
#X obj 134 157 inlet~ drive;
#X obj 117 272 outlet~;
#N canvas 0 0 450 300 grapha 0;
#X obj 100 100 cnv 15 100 100 empty empty empty 20 12 0 14 -262144
-66577 0;
#N canvas 0 0 450 300 graph3 0;
#X array B 100 float 0;
#X coords 0 1 99 -1 100 100 1;
#X restore 100 100 graph;
#X obj 289 155 inlet~;
#X obj 210 182 tabwrite~ B;
#X obj 210 156 r b;
#X connect 2 0 3 0;
#X connect 4 0 3 0;
#X coords 0 -1 1 1 100 100 1 100 100;
#X restore 189 259 pd grapha;
#X connect 1 0 12 0;
#X connect 1 0 13 0;
#X connect 2 0 3 0;
#X connect 3 0 1 0;
#X connect 3 0 0 0;
#X connect 4 0 10 0;
#X connect 4 0 10 1;
#X connect 5 0 3 1;
#X connect 6 0 9 0;
#X connect 7 0 2 1;
#X connect 8 0 5 0;
#X connect 9 0 2 0;
#X connect 10 0 1 1;
#X connect 11 0 4 0;
#X connect 11 0 4 1;
#X restore 7 204 pd rotor;
#N canvas 541 10 203 345 stator 0;
#X obj -1 96 sig~ 1;
#X obj 31 150 /~;
#X obj 47 123 +~ 1;
#X obj 47 96 *~;
#X obj 47 68 cos~;
#N canvas 0 0 450 300 grapha 0;
#X obj 100 100 cnv 15 100 100 empty empty empty 20 12 0 14 -262144
-66577 0;
#N canvas 0 0 450 300 graph3 0;
#X array C 100 float 0;
#X coords 0 1 99 -1 100 100 1;
#X restore 100 100 graph;
#X obj 289 155 inlet~;
#X obj 210 156 r b;
#X obj 210 182 tabwrite~ C;
#X connect 2 0 4 0;
#X connect 3 0 4 0;
#X coords 0 -1 1 1 100 100 1 100 100;
#X restore 98 239 pd grapha;
#X obj 47 46 wrap~;
#X obj 30 172 -~ 0.5;
#X obj 47 22 *~ 2;
#X obj 48 -2 inlet~ drive;
#X obj 31 249 outlet~;
#X obj 31 222 *~;
#X obj 47 198 r stator-level;
#X connect 0 0 1 0;
#X connect 1 0 7 0;
#X connect 2 0 1 1;
#X connect 3 0 2 0;
#X connect 4 0 3 0;
#X connect 4 0 3 1;
#X connect 6 0 4 0;
#X connect 7 0 5 0;
#X connect 7 0 11 0;
#X connect 8 0 6 0;
#X connect 9 0 8 0;
#X connect 11 0 10 0;
#X connect 12 0 11 1;
#X restore 73 204 pd stator;
#X obj 8 230 +~;
#X obj 8 25 sig~;
#X obj 209 129 r fan-pulsewidth;
#X obj 9 273 *~;
#X obj 25 251 r motor-level;
#X obj 8 3 r main-speed;
#X obj 7 123 *~;
#X obj 23 99 r motor-ratio;
#X obj 7 146 wrap~;
#X obj 193 103 cos~;
#X obj 130 454 +~;
#X obj 145 427 *~;
#X obj 161 405 r fan-level;
#X obj 192 318 r fan-noise;
#X obj 176 339 *~;
#X obj 164 561 s~ fba;
#X obj 164 457 r~ fba;
#X obj 164 513 delread~ a 22;
#X obj 164 491 delwrite~ a 22;
#X obj 271 454 r~ fbb;
#X obj 271 558 s~ fbb;
#X obj 271 534 *~ 0.499;
#X obj 271 488 delwrite~ b 200;
#X obj 271 510 delread~ b 70;
#X obj 164 537 *~ 0.3;
#X msg 365 25 \; main-speed 22 \; motor-ratio 20 \; motor-level 0.2
\; brush-level 0.05 \; rotor-level 0.1 \; stator-level 0.3 \; fan-pulsewidth
4 \; fan-noise 0.2 \; fan-level 0.5;
#X msg 364 194 \; main-speed 0 \; motor-ratio 20 \; motor-level 0.2
\; brush-level 0.05 \; rotor-level 0.1 \; stator-level 0.3 \; fan-pulsewidth
4 \; fan-noise 0.2 \; fan-level 0.5;
#X obj 8 48 lop~ 0.1;
#X obj 365 2 loadbang;
#X obj 364 171 r shutdown-ventilator;
#X connect 0 0 10 0;
#X connect 1 0 7 1;
#X connect 3 0 4 0;
#X connect 4 0 7 0;
#X connect 4 0 9 0;
#X connect 5 0 8 0;
#X connect 6 0 5 0;
#X connect 6 0 5 1;
#X connect 7 0 25 0;
#X connect 8 0 4 1;
#X connect 9 0 1 0;
#X connect 10 0 28 0;
#X connect 11 0 20 0;
#X connect 11 0 23 0;
#X connect 12 0 14 0;
#X connect 13 0 14 1;
#X connect 14 0 17 0;
#X connect 15 0 41 0;
#X connect 16 0 6 1;
#X connect 17 0 24 0;
#X connect 18 0 17 1;
#X connect 19 0 15 0;
#X connect 20 0 22 0;
#X connect 21 0 20 1;
#X connect 22 0 13 0;
#X connect 22 0 12 0;
#X connect 23 0 6 0;
#X connect 24 0 32 0;
#X connect 25 0 24 1;
#X connect 26 0 25 1;
#X connect 27 0 28 1;
#X connect 28 0 1 1;
#X connect 30 0 32 0;
#X connect 30 0 36 0;
#X connect 31 0 38 0;
#X connect 33 0 32 0;
#X connect 33 0 36 0;
#X connect 35 0 34 0;
#X connect 35 0 2 1;
#X connect 35 0 2 0;
#X connect 37 0 35 0;
#X connect 38 0 29 0;
#X connect 41 0 11 0;
#X connect 42 0 39 0;
#X connect 43 0 40 0;

Download fan5.pd.

Audio

Fan and regular air displacement sounds

Five example in this file. First you will hear a single parabolic pulse. Next you hear edge noise added, in phase with pulse. The third model introduces some blade slapping and jitter. The next two examples in the file are fans in context, an aircon system with a reverberant conduit and motor, and a large fan as an aircraft propeller.

Download fans.wav.