Designing Sound - Procedural Audio for Games and Film.

Code examples for “Designing Sound” textbook

Practical 21: Motors

Pure Data

Motors - stator and rotor model

#N canvas 327 12 182 479 10;
#X obj 7 198 motorenv;
#X obj 6 456 dac~;
#X obj 22 285 phasor~;
#X obj 6 423 *~;
#X obj 7 380 *~;
#X obj 10 49 hsl 64 12 0 1 0 1 brush-level empty brush-level 5 6 1
8 -262144 -1 -1 1600 1;
#X obj 10 63 hsl 64 12 0 1 0 1 rotor-level empty rotor-level 5 6 1
8 -262144 -1 -1 1900 1;
#X obj 10 77 hsl 64 12 0 1 0 1 max-speed empty max-speed 5 6 1 8 -262144
-1 -1 3700 1;
#X obj 38 218 r max-speed;
#X obj 22 263 *~;
#X obj 10 91 hsl 64 12 0 1 0 1 volume empty volume 10 6 1 8 -262144
-1 -1 1500 1;
#X obj 22 401 r volume;
#X obj 7 177 f;
#X obj 23 133 r runtime;
#X obj 10 21 hsl 64 12 0 1 0 1 runtime empty runtime 12 6 1 8 -262144
-1 -1 3200 1;
#X obj 8 3 bng 15 250 50 0 go empty go 20 6 1 8 -262144 -1 -1;
#X obj 7 112 r go;
#X obj 23 155 * 20000;
#X obj 38 241 * -2000;
#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 1 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 22 322 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 88 322 pd stator;
#X obj 23 356 +~;
#X obj 10 35 hsl 64 12 0 1 0 1 stator-level empty stator-level 4 6
1 8 -262144 -1 -1 5200 1;
#X connect 0 0 9 0;
#X connect 0 0 4 0;
#X connect 2 0 19 0;
#X connect 2 0 20 0;
#X connect 3 0 1 0;
#X connect 3 0 1 1;
#X connect 4 0 3 0;
#X connect 8 0 18 0;
#X connect 9 0 2 0;
#X connect 11 0 3 1;
#X connect 12 0 0 0;
#X connect 13 0 17 0;
#X connect 16 0 12 0;
#X connect 17 0 12 1;
#X connect 18 0 9 1;
#X connect 19 0 21 0;
#X connect 20 0 21 1;
#X connect 21 0 4 1;

Download motor1.pd.

Motors - resonant tube addition

#N canvas 327 12 504 650 10;
#X obj 7 228 motorenv;
#X obj 6 586 dac~;
#X obj 22 315 phasor~;
#X obj 6 553 *~;
#X obj 7 510 *~;
#X obj 10 49 hsl 64 12 0 1 0 1 brush-level empty brush-level 5 6 1
8 -262144 -1 -1 2100 1;
#X obj 10 63 hsl 64 12 0 1 0 1 rotor-level empty rotor-level 5 6 1
8 -262144 -1 -1 4500 1;
#X obj 10 77 hsl 64 12 0 1 0 1 max-speed empty max-speed 5 6 1 8 -262144
-1 -1 4700 1;
#X obj 38 248 r max-speed;
#X obj 22 293 *~;
#X obj 10 91 hsl 64 12 0 1 0 1 tube-res empty tube-res 10 6 1 8 -262144
-1 -1 800 1;
#X obj 22 531 r volume;
#X obj 7 207 f;
#X obj 23 163 r runtime;
#X obj 10 21 hsl 64 12 0 1 0 1 runtime empty runtime 12 6 1 8 -262144
-1 -1 3200 1;
#X obj 8 3 bng 15 250 50 0 go empty go 20 6 1 8 -262144 -1 -1;
#X obj 7 142 r go;
#X obj 23 185 * 20000;
#X obj 38 271 * -2000;
#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 22 412 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 88 412 pd stator;
#X obj 23 446 +~;
#X obj 10 35 hsl 64 12 0 1 0 1 stator-level empty stator-level 4 6
1 8 -262144 -1 -1 4000 1;
#X obj 23 488 +~;
#N canvas 84 78 188 182 tube 0;
#X obj 0 98 cos~;
#X obj 0 76 +~;
#X obj 0 46 *~;
#X obj 100 0 inlet~ drive;
#X obj 0 164 outlet~;
#X obj 0 0 inlet~ amount;
#X obj 17 20 osc~ 178;
#X obj 0 120 hip~ 180;
#X obj 0 142 hip~ 180;
#X connect 0 0 7 0;
#X connect 1 0 0 0;
#X connect 2 0 1 0;
#X connect 3 0 1 1;
#X connect 5 0 2 0;
#X connect 6 0 2 1;
#X connect 7 0 8 0;
#X connect 8 0 4 0;
#X restore 164 412 pd tube;
#X obj 10 105 hsl 64 12 0 1 0 1 volume empty volume 10 6 1 8 -262144
-1 -1 1500 1;
#X obj 180 434 r tube-res;
#X obj 164 458 *~;
#X connect 0 0 9 0;
#X connect 0 0 4 0;
#X connect 0 0 24 1;
#X connect 2 0 19 0;
#X connect 2 0 20 0;
#X connect 2 0 24 0;
#X connect 3 0 1 0;
#X connect 3 0 1 1;
#X connect 4 0 3 0;
#X connect 8 0 18 0;
#X connect 9 0 2 0;
#X connect 11 0 3 1;
#X connect 12 0 0 0;
#X connect 13 0 17 0;
#X connect 16 0 12 0;
#X connect 17 0 12 1;
#X connect 18 0 9 1;
#X connect 19 0 21 0;
#X connect 20 0 21 1;
#X connect 21 0 23 0;
#X connect 23 0 4 1;
#X connect 24 0 27 0;
#X connect 26 0 27 1;
#X connect 27 0 23 1;

Download motor2.pd.

Motors - rise-fall envelope (needed abstraction)

#N canvas 238 258 151 314 10;
#X obj 21 197 pow~;
#X obj 64 66 *~ 2;
#X obj 20 120 sig~ 1;
#X obj 20 147 -~;
#X obj 90 122 -~ 1;
#X obj 37 292 outlet~ signal;
#X obj 36 99 min~ 1;
#X obj 90 99 max~ 1;
#X obj 64 44 vline~;
#X msg 64 22 0 \, 1 \$1 0;
#X obj 64 -1 inlet time;
#X obj 44 169 sig~ 6;
#X obj 37 226 +~;
#X obj 37 248 *~ -1;
#X obj 37 270 +~ 1;
#X connect 0 0 12 0;
#X connect 1 0 6 0;
#X connect 1 0 7 0;
#X connect 2 0 3 0;
#X connect 3 0 0 0;
#X connect 4 0 12 1;
#X connect 6 0 3 1;
#X connect 7 0 4 0;
#X connect 8 0 1 0;
#X connect 9 0 8 0;
#X connect 10 0 9 0;
#X connect 11 0 0 1;
#X connect 12 0 13 0;
#X connect 13 0 14 0;
#X connect 14 0 5 0;

Download motorenv.pd.

Audio

Electric motor sounds

Parts of an electric motor (rotor, noisy brushes, body shaping) plus a long power up and down example.

Download motors.wav.