Designing Sound - Procedural Audio for Games and Film.

Code examples for “Designing Sound” textbook

Practical 12: Bubbles

Pure Data

Bubbles - bubbles with prime distribution

#N canvas 129 108 125 138 10;
#X obj 1 1 tgl 15 0 empty empty empty 0 -6 0 8 -262144 -1 -1 1 1;
#X obj 2 101 dac~;
#X obj 1 23 cycleround 200;
#X obj 1 47 bubblepattern 50;
#X obj 1 71 bubblesound 600;
#X connect 0 0 2 0;
#X connect 2 0 3 0;
#X connect 3 0 4 0;
#X connect 4 0 1 0;
#X connect 4 0 1 1;

Download bubbles1.pd.

Bubbles - bubble factory

#N canvas 136 565 236 207 10;
#X obj 17 -26 tgl 15 0 empty empty empty 0 -6 0 8 -262144 -1 -1 1 1
;
#X obj 59 163 dac~;
#X obj 17 -6 cycleround 200;
#X obj 17 15 bubblepattern 50;
#X obj 59 138 *~ 0.25;
#X obj 17 36 random 4;
#X obj 17 58 select 0 1 2 3;
#X obj -1 85 bubblesound 240;
#X obj -1 107 bubblesound 260;
#X obj 119 85 bubblesound 250;
#X obj 119 107 bubblesound 270;
#X connect 0 0 2 0;
#X connect 2 0 3 0;
#X connect 3 0 5 0;
#X connect 4 0 1 0;
#X connect 4 0 1 1;
#X connect 5 0 6 0;
#X connect 6 0 7 0;
#X connect 6 1 8 0;
#X connect 6 2 10 0;
#X connect 6 3 9 0;
#X connect 7 0 4 0;
#X connect 8 0 4 0;
#X connect 9 0 4 0;
#X connect 10 0 4 0;

Download bubbles2.pd.

Bubbles - drips in cave

#N canvas 828 383 268 282 10;
#X obj 12 236 dac~;
#N canvas 392 323 314 499 dripfactory 0;
#N canvas 0 0 425 653 bubble 0;
#X obj 60 475 osc~;
#X obj 60 514 *~;
#X obj 30 61 inlet;
#X obj 60 539 outlet~;
#N canvas 231 126 209 211 env4pow 0;
#X obj 54 61 vline~;
#X obj 53 87 *~;
#X obj 53 112 *~;
#X obj 5 149 -~;
#X obj 5 173 outlet~;
#X msg 54 34 1 0 0 \, 0 \$1 0;
#X obj 54 10 inlet;
#X obj 4 111 sig~ 1;
#X obj 63 173 outlet~;
#X connect 0 0 1 0;
#X connect 0 0 1 1;
#X connect 1 0 2 0;
#X connect 1 0 2 1;
#X connect 2 0 3 1;
#X connect 2 0 8 0;
#X connect 3 0 4 0;
#X connect 5 0 0 0;
#X connect 6 0 5 0;
#X connect 7 0 3 0;
#X restore 60 395 pd env4pow;
#X obj 30 83 unpack f f;
#X obj 125 417 *~;
#X obj 30 240 swap 1;
#X obj 124 439 lop~ 120;
#X obj 30 263 /;
#X obj 30 189 + 0.4;
#X obj 124 465 *~;
#X obj 186 395 swap 1;
#X obj 186 418 -;
#X obj 30 168 t f f f;
#X obj 186 439 + 0.1;
#X obj 141 179 / 3;
#X obj 141 199 + 0.6;
#X obj 60 440 +~;
#X obj 306 88 inlet base;
#X obj 306 138 * 2;
#X obj 76 274 *;
#X obj 76 296 +;
#X obj 225 128 swap 1;
#X obj 226 153 -;
#X obj 29 287 *;
#X obj 306 113 * 300;
#X obj 224 177 * 20;
#X obj 33 352 expcurve~ 100;
#X obj 60 417 *~ 1000;
#X connect 0 0 1 0;
#X connect 1 0 3 0;
#X connect 2 0 5 0;
#X connect 4 1 6 0;
#X connect 5 0 14 0;
#X connect 5 1 16 0;
#X connect 6 0 8 0;
#X connect 7 0 9 0;
#X connect 7 1 9 1;
#X connect 8 0 11 0;
#X connect 9 0 25 0;
#X connect 10 0 7 0;
#X connect 11 0 1 1;
#X connect 12 0 13 0;
#X connect 12 1 13 1;
#X connect 13 0 15 0;
#X connect 14 0 10 0;
#X connect 14 1 21 0;
#X connect 14 2 12 0;
#X connect 15 0 11 1;
#X connect 16 0 17 0;
#X connect 17 0 6 1;
#X connect 18 0 0 0;
#X connect 19 0 23 0;
#X connect 19 0 26 0;
#X connect 20 0 21 1;
#X connect 21 0 22 0;
#X connect 22 0 18 1;
#X connect 23 0 24 0;
#X connect 23 1 24 0;
#X connect 24 0 27 0;
#X connect 25 0 4 0;
#X connect 25 0 28 0;
#X connect 26 0 20 0;
#X connect 26 0 22 1;
#X connect 27 0 25 1;
#X connect 28 0 29 0;
#X connect 29 0 18 0;
#X restore 96 388 pd bubble;
#X obj 224 159 random 1000;
#X obj 224 182 / 1000;
#X obj 139 159 random 1000;
#X obj 139 182 / 1000;
#X obj 0 137 random 100;
#X obj 113 75 metro 20;
#X obj 0 182 > 70;
#X obj 126 326 inlet average pitch;
#X obj 113 54 loadbang;
#X obj -1 419 outlet~;
#X obj 0 249 f;
#X obj 30 249 + 1;
#X obj 0 274 mod 4;
#X obj 113 101 t b b b b;
#X obj 0 211 sel 1;
#X obj 0 326 route 0 1 2 3;
#X obj 0 301 pack f f f;
#X obj 0 388 bubblesound2;
#X obj 23 158 inlet intensity;
#X connect 0 0 10 0;
#X connect 1 0 2 0;
#X connect 2 0 17 2;
#X connect 3 0 4 0;
#X connect 4 0 17 1;
#X connect 5 0 7 0;
#X connect 6 0 14 0;
#X connect 7 0 15 0;
#X connect 8 0 0 1;
#X connect 8 0 18 1;
#X connect 9 0 6 0;
#X connect 11 0 12 0;
#X connect 11 0 13 0;
#X connect 12 0 11 1;
#X connect 13 0 17 0;
#X connect 14 0 5 0;
#X connect 14 1 3 0;
#X connect 14 2 1 0;
#X connect 15 0 11 0;
#X connect 16 0 18 0;
#X connect 16 0 0 0;
#X connect 17 0 16 0;
#X connect 18 0 10 0;
#X connect 19 0 7 1;
#X restore 34 62 pd dripfactory;
#X obj 129 7 loadbang;
#X msg 129 41 0.01;
#X msg 34 38 90;
#X obj 34 147 cmverb~;
#X msg 175 39 110;
#X obj 79 171 *~ 0.1;
#X obj 26 190 *~ 0.1;
#X obj 34 89 *~ 0.23;
#X msg 210 38 6;
#X connect 1 0 9 0;
#X connect 2 0 4 0;
#X connect 2 0 3 0;
#X connect 2 0 6 0;
#X connect 2 0 10 0;
#X connect 3 0 1 1;
#X connect 4 0 1 0;
#X connect 5 0 8 0;
#X connect 5 1 7 0;
#X connect 6 0 5 2;
#X connect 7 0 0 1;
#X connect 8 0 0 0;
#X connect 9 0 5 0;
#X connect 9 0 5 1;
#X connect 9 0 0 0;
#X connect 9 0 0 1;
#X connect 10 0 5 3;

Download dripfactory.pd.

Bubbles - required envelope abstraction

#N canvas 0 0 450 300 10;
#X obj -1 152 vline~;
#X msg -1 130 0 0 0 \, 1 \$1 0 \, 0 \$2 \$1;
#X obj -1 108 pack f f;
#X obj -1 45 f \$1;
#X obj 50 45 f \$2;
#X obj -1 21 t b b;
#X obj -1 -2 inlet trigger;
#X obj -1 174 outlet~;
#X obj 125 0 inlet scale;
#X obj 125 21 t f f;
#X obj -1 76 * 1;
#X obj 50 80 * 1;
#X connect 0 0 7 0;
#X connect 1 0 0 0;
#X connect 2 0 1 0;
#X connect 3 0 10 0;
#X connect 4 0 11 0;
#X connect 5 0 3 0;
#X connect 5 1 4 0;
#X connect 6 0 5 0;
#X connect 8 0 9 0;
#X connect 9 0 10 1;
#X connect 9 1 11 1;
#X connect 10 0 2 0;
#X connect 11 0 2 1;

Download adenv2~.pd.

Bubbles - another required envelope abstraction

#N canvas 188 455 161 154 10;
#X obj -1 112 vline~;
#X msg -1 90 0 0 0 \, 1 \$1 0 \, 0 \$2 \$1;
#X obj -1 68 pack f f;
#X obj -1 45 f \$1;
#X obj 50 45 f \$2;
#X obj -1 21 t b b;
#X obj -1 -2 inlet trigger;
#X obj -1 134 outlet~;
#X connect 0 0 7 0;
#X connect 1 0 0 0;
#X connect 2 0 1 0;
#X connect 3 0 2 0;
#X connect 4 0 2 1;
#X connect 5 0 3 0;
#X connect 5 1 4 0;
#X connect 6 0 5 0;

Download adenv~.pd.

Bubbles - exponential curve envelope abstraction

#N canvas 290 60 129 200 10;
#X obj 28 108 vline~;
#X obj 5 174 outlet~ signal;
#X msg 28 84 0 0 0 \, 1 \$1 0;
#X obj 51 39 f \$1;
#X obj 51 18 loadbang;
#X obj 28 -3 inlet trigger;
#X obj 28 62 f 10;
#X obj 5 131 sig~ 2.71828;
#X obj 5 153 pow~;
#X connect 0 0 8 1;
#X connect 2 0 0 0;
#X connect 3 0 6 1;
#X connect 4 0 3 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;

Download expcurve~.pd.

Bubbles - pattern generator

#N canvas 0 0 275 151 10;
#X obj 99 65 random 100;
#X obj 99 86 moses 50;
#X msg 99 109 bang;
#X obj 1 28 sel 29 37 47 67 89 113 157 197;
#X obj 1 1 inlet numbers < 200;
#X obj 150 1 inlet probability;
#X obj 99 131 outlet bangs;
#X connect 0 0 1 0;
#X connect 1 0 2 0;
#X connect 2 0 6 0;
#X connect 3 0 0 0;
#X connect 3 1 0 0;
#X connect 3 2 0 0;
#X connect 3 3 0 0;
#X connect 3 4 0 0;
#X connect 3 5 0 0;
#X connect 3 6 0 0;
#X connect 3 7 0 0;
#X connect 4 0 3 0;
#X connect 5 0 1 1;

Download bubblepattern.pd.

Bubbles - sound gen abstraction

#N canvas 95 236 283 429 10;
#X obj 45 362 hip~ 40;
#X obj 45 385 outlet~;
#X obj 23 12 inlet trigger;
#X obj 45 316 *~;
#X obj 45 224 expcurve~ 200;
#X obj 45 270 phasor~;
#X obj 45 293 cos~;
#X obj 45 247 *~;
#X obj 101 248 del 110;
#X obj 113 85 inlet base;
#X obj 44 175 +;
#X obj 101 269 adenv2~ 10 80;
#X obj 23 111 t b f f b f;
#X obj 23 35 unpack f f;
#X obj 23 59 * 0.3;
#X obj 23 82 + 0.3;
#X obj 113 108 * 2000;
#X obj 45 154 * 1000;
#X obj 45 339 *~ 0.1;
#X obj 101 186 random 50;
#X connect 0 0 1 0;
#X connect 2 0 13 0;
#X connect 3 0 18 0;
#X connect 4 0 7 0;
#X connect 5 0 6 0;
#X connect 6 0 3 0;
#X connect 7 0 5 0;
#X connect 8 0 11 0;
#X connect 9 0 16 0;
#X connect 10 0 7 1;
#X connect 11 0 3 1;
#X connect 12 0 4 0;
#X connect 12 1 17 0;
#X connect 12 3 19 0;
#X connect 12 4 11 1;
#X connect 13 0 14 0;
#X connect 14 0 15 0;
#X connect 15 0 12 0;
#X connect 16 0 10 1;
#X connect 17 0 10 0;
#X connect 18 0 0 0;
#X connect 19 0 8 0;

Download bubblesound2.pd.

Bubbles - sound gen abstraction

#N canvas 42 508 144 226 10;
#X obj 0 184 hip~ 40;
#X obj 0 23 t b b;
#X obj 0 207 outlet~;
#X obj 0 0 inlet trigger;
#X obj 0 161 *~ 0.1;
#X obj 0 138 *~;
#X obj 0 69 *~ \$1;
#X obj 0 92 phasor~;
#X obj 0 115 cos~;
#X obj 56 91 adenv~ 10 80;
#X obj 0 46 expcurve~ 100;
#X obj 56 70 del 3;
#X connect 0 0 2 0;
#X connect 1 0 10 0;
#X connect 1 1 11 0;
#X connect 3 0 1 0;
#X connect 4 0 0 0;
#X connect 5 0 4 0;
#X connect 6 0 7 0;
#X connect 7 0 8 0;
#X connect 8 0 5 0;
#X connect 9 0 5 1;
#X connect 10 0 6 0;
#X connect 11 0 9 0;

Download bubblesound.pd.

Bubbles - round robin voice allocator

#N canvas 0 0 89 109 10;
#X obj 0 45 f 0;
#X obj 31 45 + 1;
#X obj 0 22 metro 15;
#X obj 0 90 outlet;
#X obj 0 -1 inlet;
#X obj 51 -1 inlet;
#X obj 0 68 mod \$1;
#X connect 0 0 1 0;
#X connect 0 0 6 0;
#X connect 1 0 0 1;
#X connect 2 0 0 0;
#X connect 4 0 2 0;
#X connect 5 0 2 1;
#X connect 6 0 3 0;

Download cycleround.pd.

Bubbles - simple reverb for cave drips

#N canvas 56 628 450 300 10;
#X obj 37 101 hip~ 20;
#X obj 97 101 hip~ 20;
#N canvas 0 0 731 555 cmreverb 0;
#X obj 25 22 inlet~;
#X obj 85 22 inlet~;
#X obj 397 5 inlet;
#X obj 227 148 delread~ \$0-A 100;
#X obj 257 168 delread~ \$0-B 161.8;
#X obj 287 188 delread~ \$0-C 261.8;
#X obj 317 208 delread~ \$0-D 61.8;
#X obj 173 202 +~;
#X obj 215 202 +~;
#X obj 10 273 outlet~;
#X obj 80 273 outlet~;
#X obj 158 252 +~;
#X obj 262 253 +~;
#X obj 200 252 -~;
#X obj 302 252 -~;
#X obj 157 308 +~;
#X obj 201 309 +~;
#X obj 245 310 -~;
#X obj 284 310 -~;
#X obj 244 392 *~ 0;
#X obj 202 391 *~ 0;
#X obj 157 390 *~ 0;
#X obj 285 393 *~ 0;
#X obj 284 413 delwrite~ \$0-D 1000;
#X obj 245 436 delwrite~ \$0-C 1000;
#X obj 203 459 delwrite~ \$0-B 1000;
#X obj 158 481 delwrite~ \$0-A 1000;
#X obj 227 127 * 1;
#X obj 257 127 * 1.618;
#X obj 317 127 * 2.618;
#X obj 377 127 / 1.618;
#X obj 397 31 route /feedback /delay;
#X text 187 38 Claude M;
#X obj 384 298 f;
#X obj 442 70 * 381;
#X obj 409 250 / 2;
#X connect 0 0 7 0;
#X connect 1 0 8 0;
#X connect 2 0 31 0;
#X connect 3 0 7 1;
#X connect 4 0 8 1;
#X connect 5 0 14 0;
#X connect 5 0 12 0;
#X connect 6 0 14 1;
#X connect 6 0 12 1;
#X connect 7 0 9 0;
#X connect 7 0 11 0;
#X connect 7 0 13 0;
#X connect 8 0 10 0;
#X connect 8 0 11 1;
#X connect 8 0 13 1;
#X connect 11 0 15 0;
#X connect 11 0 17 0;
#X connect 12 0 17 1;
#X connect 12 0 15 1;
#X connect 13 0 16 0;
#X connect 13 0 18 0;
#X connect 14 0 16 1;
#X connect 14 0 18 1;
#X connect 15 0 21 0;
#X connect 16 0 20 0;
#X connect 17 0 19 0;
#X connect 18 0 22 0;
#X connect 19 0 24 0;
#X connect 20 0 25 0;
#X connect 21 0 26 0;
#X connect 22 0 23 0;
#X connect 27 0 3 0;
#X connect 28 0 4 0;
#X connect 29 0 5 0;
#X connect 30 0 6 0;
#X connect 31 0 35 0;
#X connect 31 1 34 0;
#X connect 33 0 22 1;
#X connect 33 0 19 1;
#X connect 33 0 20 1;
#X connect 33 0 21 1;
#X connect 34 0 27 0;
#X connect 34 0 28 0;
#X connect 34 0 29 0;
#X connect 34 0 30 0;
#X connect 35 0 33 0;
#X restore 38 141 pd cmreverb;
#X obj 36 51 inlet~;
#X obj 97 53 inlet~;
#X obj 248 35 loadbang;
#X obj 38 187 outlet~;
#X obj 111 187 outlet~;
#X obj 170 -20 inlet;
#X msg 164 98 /feedback \$1;
#X msg 284 124 /delay \$1;
#X obj 313 -12 inlet;
#X text 222 159 Simple verb by Claude H;
#X obj 284 102 f 0.15;
#X obj 198 71 f 0.1;
#X obj 313 34 clip 0 1;
#X obj 170 34 clip 0 1;
#X obj 170 2 / 127;
#X obj 313 10 / 127;
#X connect 0 0 2 0;
#X connect 1 0 2 1;
#X connect 2 0 6 0;
#X connect 2 1 7 0;
#X connect 3 0 0 0;
#X connect 4 0 1 0;
#X connect 5 0 14 0;
#X connect 5 0 13 0;
#X connect 8 0 17 0;
#X connect 9 0 2 2;
#X connect 10 0 2 2;
#X connect 11 0 18 0;
#X connect 13 0 10 0;
#X connect 14 0 9 0;
#X connect 15 0 13 0;
#X connect 16 0 14 0;
#X connect 17 0 16 0;
#X connect 18 0 15 0;

Download cmverb~.pd.

Audio

Bubble effects

Example contains three parts. First is a single bubble. Next is a stream of bubbles of constant size, but using a random voice allocation which cuts off some bubbles early. Lastly is a stream of random sized bubbles chosen from a 10 voice source with round robin allocation.

Download bubbles.wav.