buzz~ 0.1 [was: Re: [PD] buzz opcode]

Frank Barknecht barknech at ph-cip.uni-koeln.de
Sat Jan 26 15:25:48 CET 2002


Frank Barknecht hat gesagt: // Frank Barknecht wrote:

> Miller Puckette hat gesagt: // Miller Puckette wrote:
> > Moorer, J. A.,
> > "The synthesis of complex audio
> > spectra by means of discrete summation formulae," Journal of the Audio
> > Engineering Society, 24/8, 1976, pp. 717-727. 
> 
> Thanks for this reference. I couldn't find the document on the net,
> but looking for it at NEC's citeseer led me to John Lazzaro and John
> Wawrzynek's "Subtractive Synthesis without Filters", which describes the
> buzz opcode as used in SAOL.

Using this last text as reference, I implemented Equation (3)
from Lazzarro/Wawrzynek in a buzz~ like abstraction using lots
of fexpr~ and expr objects. I do not yet fully understand what
I implemented ;), but I think it does indeed sound quite like
the buzz from Csound, without using any of its code.

Attached is the buzz~ instrument and a testpatch, buzzrun.pd , which in
turn needs my nice graphical ADSR wrapper "gadsr". 

bye,
-- 
                                                 __    __
 Frank Barknecht       ____ ______   ____ __ trip\ \  / /wire ______
                      / __// __  /__/ __// // __  \ \/ /  __ \\  ___\	
                     / /  / ____/  / /  / // ____// /\ \\  ___\\____ \	
                    /_/  /_____/  /_/  /_//_____// /  \ \\_____\\_____\
                                                /_/    \_\ 
-------------- next part --------------
#N canvas 92 132 1070 678 10;
#X floatatom 493 51 5 0 0;
#X text 501 29 H;
#X text 549 131 N;
#X text 430 154 S1~;
#X text 464 154 S2~;
#X obj 24 98 mtof;
#X obj 233 313 -~;
#X obj 628 320 -~;
#X obj 440 463 -~;
#X obj 440 519 /~;
#X obj 24 141 phasor~ 10;
#X obj 24 195 send~ \$0-phi;
#X obj 253 220 receive~ \$0-phi;
#X obj 125 249 fexpr~ $x1*cos($x2);
#X obj 307 249 fexpr~ $x1*cos($f2*$x3);
#X obj 463 223 receive~ \$0-phi;
#X obj 518 255 fexpr~ $x1*sin($f2*$x3);
#X obj 674 224 receive~ \$0-phi;
#X obj 737 255 fexpr~ $x1*sin($x2);
#X obj 865 228 receive~ \$0-phi;
#X obj 674 330 receive~ \$0-phi;
#X obj 628 390 *~;
#X obj 233 385 *~;
#X obj 276 330 receive~ \$0-phi;
#X obj 24 168 *~ 6.28319;
#X text 393 30 a*100;
#X obj 782 474 receive~ \$0-phi;
#X obj 542 500 fexpr~ 1-2*$x1*cos($x2)+pow($x1 \, 2);
#X obj 440 555 outlet~;
#X obj 24 72 inlet;
#X obj 559 51 inlet;
#X obj 378 50 inlet~;
#X obj 378 75 *~ 0.01;
#X obj 328 126 send~ \$0-a;
#X obj 802 330 receive~ \$0-a;
#X obj 674 357 fexpr~ $x2*sin($x1);
#X obj 418 330 receive~ \$0-a;
#X obj 276 357 fexpr~ 1-$x2*cos($x1);
#X obj 542 473 receive~ \$0-a;
#N canvas 0 0 600 400 calulations 0;
#X obj 252 83 fexpr~ pow($x1 \, $f2);
#X obj 521 65 s \$0-H;
#X obj 387 37 r \$0-H;
#X obj 387 60 + 1;
#X obj 252 180 abs~;
#X obj 45 170 fexpr~ 1-$x1;
#X obj 45 73 abs~;
#X obj 205 248 /~;
#X obj 252 204 fexpr~ 1-$x1;
#X text 219 271 S1;
#X obj 334 282 + 2;
#X obj 334 258 r \$0-H;
#X text 342 300 N;
#X obj 82 248 /~;
#X text 96 271 S2;
#X text 297 179 |a^H+1|;
#X obj 210 182 /~;
#X obj 171 205 -~;
#X obj 136 156 fexpr~ 1/$x1;
#X obj 77 335 outlet~;
#X obj 205 340 outlet~;
#X obj 334 332 outlet;
#X text 91 16 a;
#X obj 521 35 inlet;
#X text 366 228 avoid null division;
#X obj 45 19 inlet~;
#X obj 269 230 sig~ 1.5e-20;
#X connect 0 0 4 0;
#X connect 0 0 16 1;
#X connect 0 0 18 0;
#X connect 2 0 3 0;
#X connect 3 0 0 1;
#X connect 4 0 8 0;
#X connect 4 0 16 0;
#X connect 5 0 7 0;
#X connect 5 0 13 0;
#X connect 6 0 5 0;
#X connect 7 0 19 0;
#X connect 8 0 7 1;
#X connect 10 0 21 0;
#X connect 11 0 10 0;
#X connect 13 0 20 0;
#X connect 16 0 17 1;
#X connect 17 0 13 1;
#X connect 18 0 17 0;
#X connect 23 0 1 0;
#X connect 25 0 0 0;
#X connect 25 0 6 0;
#X connect 26 0 7 1;
#X connect 26 0 13 1;
#X connect 26 0 18 0;
#X restore 417 125 pd calulations;
#X text 115 167 *~ 2*PI;
#X obj 538 154 s \$0-N;
#X obj 385 224 r \$0-N;
#X obj 596 224 r \$0-N;
#X connect 0 0 39 1;
#X connect 5 0 10 0;
#X connect 6 0 22 0;
#X connect 7 0 21 0;
#X connect 8 0 9 0;
#X connect 9 0 28 0;
#X connect 10 0 24 0;
#X connect 12 0 13 1;
#X connect 13 0 6 0;
#X connect 14 0 6 1;
#X connect 15 0 14 2;
#X connect 16 0 7 0;
#X connect 17 0 16 2;
#X connect 18 0 7 1;
#X connect 19 0 18 1;
#X connect 20 0 35 0;
#X connect 21 0 8 1;
#X connect 22 0 8 0;
#X connect 23 0 37 0;
#X connect 24 0 11 0;
#X connect 26 0 27 1;
#X connect 27 0 9 1;
#X connect 29 0 5 0;
#X connect 30 0 39 1;
#X connect 31 0 32 0;
#X connect 32 0 33 0;
#X connect 32 0 39 0;
#X connect 34 0 35 1;
#X connect 35 0 21 1;
#X connect 36 0 37 1;
#X connect 37 0 22 1;
#X connect 38 0 27 0;
#X connect 39 0 13 0;
#X connect 39 0 18 0;
#X connect 39 1 14 0;
#X connect 39 1 16 0;
#X connect 39 2 41 0;
#X connect 42 0 14 1;
#X connect 43 0 16 1;
-------------- next part --------------
#N canvas 232 162 635 490 10;
#X floatatom 91 356 0 0 100;
#N canvas 159 26 516 274 output 0;
#X obj 338 160 t b;
#X obj 338 110 f;
#X obj 338 60 inlet;
#X text 344 29 mute;
#X obj 338 185 f;
#X msg 396 182 0;
#X msg 338 85 bang;
#X obj 338 135 moses 1;
#X obj 391 110 moses 1;
#X obj 83 148 dbtorms;
#X obj 391 85 r master-lvl;
#X obj 83 42 r master-lvl;
#X obj 338 210 s master-lvl;
#X obj 20 182 inlet~;
#X obj 199 41 inlet;
#X text 199 18 level;
#X obj 199 104 s master-lvl;
#X msg 96 65 set \$1;
#X obj 96 90 outlet;
#X msg 214 65 \; pd dsp 1;
#X obj 83 198 line~;
#X obj 20 207 *~;
#X obj 20 232 dac~;
#X obj 83 173 pack 0 50;
#X text 20 159 audio;
#X connect 0 0 4 0;
#X connect 1 0 7 0;
#X connect 2 0 6 0;
#X connect 4 0 12 0;
#X connect 5 0 12 0;
#X connect 6 0 1 0;
#X connect 7 0 0 0;
#X connect 7 1 5 0;
#X connect 8 1 4 1;
#X connect 9 0 23 0;
#X connect 10 0 1 1;
#X connect 10 0 8 0;
#X connect 11 0 9 0;
#X connect 11 0 17 0;
#X connect 13 0 21 0;
#X connect 14 0 16 0;
#X connect 14 0 19 0;
#X connect 17 0 18 0;
#X connect 20 0 21 1;
#X connect 21 0 22 0;
#X connect 21 0 22 1;
#X connect 23 0 20 0;
#X restore 53 384 pd output;
#X msg 129 356 MUTE;
#X text 170 355 <-- output amplitude;
#X obj 303 263 buzz~;
#X obj 53 306 *~;
#X obj 53 176 gadsr 1 10 40 0.7 100;
#X obj 361 112 * 0.00781;
#X floatatom 457 229 5 0 0;
#X obj 303 88 notein 17;
#X obj 361 178 gadsr 1 10 40 0.7 100;
#X obj 361 227 *~ 100;
#X floatatom 464 110 5 0 0;
#X text 397 197 "a" envelope;
#X text 509 229 "H";
#X obj 464 139 * 0.01;
#X text 92 195 amplitude envelope;
#X text 446 81 "a" max level;
#X obj 543 151 loadbang;
#X msg 543 176 2;
#X obj 201 87 metro 500;
#X obj 201 62 tgl 15 0 empty empty empty 20 8 0 8 -262144 -1 -1 0 1
;
#N canvas 0 0 600 400 stupid 0;
#X obj 219 133 t b;
#X obj 219 203 unpack 0 0;
#X obj 219 156 del 300;
#X msg 224 180 66 0;
#X msg 134 180 set \$1 100;
#X msg 203 112 66 100;
#X msg 134 202 set \$1 0;
#X obj 123 150 + 50;
#X obj 125 125 random 20;
#X obj 124 60 inlet;
#X obj 220 276 outlet;
#X obj 270 280 outlet;
#X connect 0 0 2 0;
#X connect 1 0 10 0;
#X connect 1 1 11 0;
#X connect 2 0 3 0;
#X connect 3 0 1 0;
#X connect 4 0 5 0;
#X connect 5 0 0 0;
#X connect 5 0 1 0;
#X connect 6 0 3 0;
#X connect 7 0 4 0;
#X connect 7 0 6 0;
#X connect 8 0 7 0;
#X connect 9 0 8 0;
#X connect 9 0 5 0;
#X restore 202 112 pd stupid;
#X text 458 66 Fake Filter:;
#X connect 0 0 1 1;
#X connect 1 0 0 0;
#X connect 2 0 1 2;
#X connect 4 0 5 1;
#X connect 5 0 1 0;
#X connect 6 0 5 0;
#X connect 7 0 6 0;
#X connect 7 0 6 1;
#X connect 7 0 10 0;
#X connect 8 0 4 2;
#X connect 9 0 4 0;
#X connect 9 1 7 0;
#X connect 10 0 11 0;
#X connect 11 0 4 1;
#X connect 12 0 15 0;
#X connect 15 0 10 1;
#X connect 18 0 19 0;
#X connect 19 0 8 0;
#X connect 20 0 22 0;
#X connect 21 0 20 0;
#X connect 22 0 4 0;
#X connect 22 1 7 0;
-------------- next part --------------
#N canvas 345 295 743 348 10;
#X obj 140 75 vsl 20 128 0 100 0 0 \$0-a \$0-ain attack 20 -8 1729
8 -355 -260818 -143491 1270 1;
#X obj 219 75 vsl 20 128 0 200 0 0 \$0-d \$0-din decay 20 -8 1729 8
-355 -260818 -143491 12700 1;
#X obj 289 75 vsl 20 128 0 1 0 0 \$0-s \$0-sin sustain 20 -8 1729 8
-355 -260818 -143491 6350 1;
#X obj 362 75 vsl 20 128 0 500 0 0 \$0-r \$0-rin release 20 -8 1729
8 -355 -260818 -143491 7620 1;
#X floatatom 140 213 5 0 0;
#X floatatom 219 213 5 0 0;
#X floatatom 289 213 5 0 0;
#X floatatom 362 213 5 0 0;
#X obj 24 434 inlet;
#X obj 24 484 outlet~;
#X obj 539 71 hsl 128 15 0 1 0 0 \$0-level \$0-levelin level 20 8 1729
8 -62784 -228992 -262144 12581 1;
#X floatatom 536 93 5 0 0;
#X obj 233 461 inlet;
#X obj 332 461 inlet;
#X obj 404 461 inlet;
#X obj 476 461 inlet;
#X obj 547 461 inlet;
#X obj 233 486 s \$0-levelin;
#X obj 332 486 s \$0-ain;
#X obj 404 486 s \$0-din;
#X obj 476 486 s \$0-sin;
#X obj 547 486 s \$0-rin;
#X floatatom 140 38 5 0 0;
#X floatatom 219 38 5 0 0;
#X floatatom 289 38 5 0 0;
#X floatatom 362 38 5 0 0;
#X obj 349 388 loadbang;
#X obj 349 435 unpack 0 0 0 0 0;
#X obj 349 411 pack \$1 \$2 \$3 \$4 \$5;
#N canvas 0 0 600 400 envelope 0;
#X obj 173 134 r \$0-level;
#X obj 252 135 r \$0-a;
#X obj 307 134 r \$0-d;
#X obj 361 133 r \$0-s;
#X obj 413 132 r \$0-r;
#X obj 117 169 inlet;
#X obj 176 292 outlet~;
#N canvas 231 224 600 400 adsr 0;
#X text 52 50 This patch is used as an abstraction in 25.envelope.pd
;
#X obj 95 108 inlet;
#X obj 298 111 inlet;
#X text 91 79 trigger;
#X obj 95 138 sel 0;
#X obj 144 138 t b;
#X obj 104 334 f \$1;
#X obj 104 359 pack 0 \$2;
#X obj 362 112 inlet;
#X obj 309 301 del \$2;
#X obj 371 422 line~;
#X obj 338 324 f \$4;
#X obj 371 369 pack 0 \$3;
#X obj 410 112 inlet;
#X obj 459 111 inlet;
#X obj 504 111 inlet;
#X msg 95 191 stop;
#X obj 517 360 pack 0 \$5;
#X text 378 86 Traditional A \, D \, S \, R;
#X text 296 88 level;
#X obj 364 346 * \$1;
#X text 32 302 ATTACK;
#X obj 371 449 outlet~;
#X text 7 325 recall level;
#X text 7 345 and pack with;
#X text 8 365 attack time;
#X text 28 124 if zero;
#X text 29 141 release;
#X text 17 183 and cancel;
#X text 17 199 decay;
#X text 148 120 bang if attack;
#X text 183 294 on attack \, set a;
#X text 147 307 delay to go to sustain;
#X text 189 324 recall sustain value;
#X text 185 347 multiply by overall level;
#X text 220 370 pack with decay time;
#X text 510 386 on release ramp;
#X text 511 403 back to zero;
#X text 63 12 adsr - arguments: level \, attack time \, decay time
\, sustain level \, release time;
#X text 17 487 When you send this patch a nonzero trigger it schedules
a line~ to do an attack and decay \, and if zero \, it starts the release
ramp.;
#X text 18 533 Objects such as "f" and "pack" can be given dollar sign
arguments to initialize their contents from adsr's creation arguments.
Inlets are supplied to update them on the fly.;
#X connect 1 0 4 0;
#X connect 2 0 6 1;
#X connect 2 0 20 1;
#X connect 4 0 16 0;
#X connect 4 0 17 0;
#X connect 4 1 5 0;
#X connect 5 0 6 0;
#X connect 5 0 9 0;
#X connect 6 0 7 0;
#X connect 7 0 10 0;
#X connect 8 0 7 1;
#X connect 8 0 9 1;
#X connect 9 0 11 0;
#X connect 10 0 22 0;
#X connect 11 0 20 0;
#X connect 12 0 10 0;
#X connect 13 0 12 1;
#X connect 14 0 11 1;
#X connect 15 0 17 1;
#X connect 16 0 9 0;
#X connect 17 0 10 0;
#X connect 20 0 12 0;
#X restore 176 238 pd adsr -----------;
#X connect 0 0 7 1;
#X connect 1 0 7 2;
#X connect 2 0 7 3;
#X connect 3 0 7 4;
#X connect 4 0 7 5;
#X connect 5 0 7 0;
#X connect 7 0 6 0;
#X restore 24 459 pd envelope;
#X connect 0 0 4 0;
#X connect 1 0 5 0;
#X connect 2 0 6 0;
#X connect 3 0 7 0;
#X connect 8 0 29 0;
#X connect 10 0 11 0;
#X connect 12 0 17 0;
#X connect 13 0 18 0;
#X connect 14 0 19 0;
#X connect 15 0 20 0;
#X connect 16 0 21 0;
#X connect 22 0 0 0;
#X connect 23 0 1 0;
#X connect 24 0 2 0;
#X connect 25 0 3 0;
#X connect 26 0 28 0;
#X connect 27 0 17 0;
#X connect 27 1 18 0;
#X connect 27 2 19 0;
#X connect 27 3 20 0;
#X connect 27 4 21 0;
#X connect 28 0 27 0;
#X connect 29 0 9 0;


More information about the Pd-list mailing list