[PD] up-down saw-wave

Frank Barknecht fbar at footils.org
Sat Nov 25 12:46:50 CET 2006


Hallo,
Chris McCormick hat gesagt: // Chris McCormick wrote:

> > I wonder how hard it would be to implement the BLOP LADSPA algorithm  
> > in Pd, so that there would be native anti-aliased oscilators.  Its  
> > something that Pd sorely needs.
> 
> I am a big fan of these ones, by Günter:
> 
> <http://lists.puredata.info/pipermail/pd-list/2006-05/038681.html>
> 
> So juicy.

Another way to get alias-free waveforms is through summation formulas.
Attached is an implementation of the gbuzz opcode. Note that this
isn't actually bandlimited, but when choosing the harmonicity value
"a" not too high, high frequencies have reasonably low amplitue ...
and it's a patch I had here. The classical paper on this is James A.
Moorer's "The Synthesis of Complex Audio Spectra by Means of Discrete
Summation Formulas" available here:
http://www.jamminpower.com/main/articles.jsp

Ciao
-- 
 Frank Barknecht                 _ ______footils.org_ __goto10.org__
-------------- next part --------------
#N canvas 384 121 780 602 10;
#X obj 257 361 +~;
#X obj 132 89 phasor~;
#X obj 132 112 *~ 1024;
#X obj 257 160 tabread4~ \$0-cos;
#X obj 131 350 tabread4~ \$0-sin;
#X obj 132 421 /~;
#X obj 132 132 +~ 1;
#X obj 480 250 *~ 1024;
#X obj 480 278 +~ 1;
#X obj 410 311 tabread4~ \$0-1+a2;
#X obj 544 310 tabread4~ \$0-norm;
#X obj 133 444 *~;
#X obj 380 258 *~ -2;
#X obj 257 311 *~;
#X obj 134 473 outlet~;
#X obj 379 45 inlet~;
#X obj 489 66 table \$0-1+a2 1027;
#X obj 489 85 table \$0-norm 1027;
#X obj 132 46 inlet~;
#X text 133 503 out = sqrt[(1-a^2)(1+a^2)] * [sin(x) / (1+a^2 - 2a*cos(x))]
;
#X obj 489 105 table \$0-cos 1027;
#X obj 489 127 table \$0-sin 1027;
#N canvas 0 0 702 442 init-tables 0;
#X obj 125 75 until;
#X obj 125 104 f 0;
#X obj 153 105 + 1;
#X msg 164 75 0;
#X obj 125 53 t a b;
#X obj 55 204 expr 1+$f1*$f1;
#X obj 125 150 / 1024;
#X obj 125 127 t a a;
#X obj 55 234 tabwrite \$0-1+a2;
#X obj 125 12 loadbang;
#X obj 547 122 s \$0-cos;
#X obj 509 175 s \$0-sin;
#X msg 509 148 sinesum 1024 1;
#X msg 547 97 cosinesum 1024 0 1;
#X obj 509 67 loadbang;
#X obj 188 236 tabwrite \$0-norm;
#X msg 125 33 1027;
#X obj 188 206 expr sqrt((1-$f1*$f1)/(1+$f1*$f1));
#X text 79 350 writes f(a) = 1+a^2 rsp. normalization into tables;
#X connect 0 0 1 0;
#X connect 1 0 2 0;
#X connect 1 0 7 0;
#X connect 2 0 1 1;
#X connect 3 0 1 1;
#X connect 4 0 0 0;
#X connect 4 1 3 0;
#X connect 5 0 8 0;
#X connect 6 0 5 0;
#X connect 6 0 17 0;
#X connect 7 0 6 0;
#X connect 7 1 8 1;
#X connect 7 1 15 1;
#X connect 9 0 16 0;
#X connect 12 0 11 0;
#X connect 13 0 10 0;
#X connect 14 0 13 0;
#X connect 14 0 12 0;
#X connect 16 0 4 0;
#X connect 17 0 15 0;
#X restore 489 45 pd init-tables;
#X text 131 550 cf: James A. Moorer: "Synthesis of Complex Audio Spectra"
and Dodge/Jerse: "Computer Music" page 163f;
#X connect 0 0 5 1;
#X connect 1 0 2 0;
#X connect 2 0 6 0;
#X connect 3 0 13 0;
#X connect 4 0 5 0;
#X connect 5 0 11 0;
#X connect 6 0 3 0;
#X connect 6 0 4 0;
#X connect 7 0 8 0;
#X connect 8 0 9 0;
#X connect 8 0 10 0;
#X connect 9 0 0 1;
#X connect 10 0 11 1;
#X connect 11 0 14 0;
#X connect 12 0 13 1;
#X connect 13 0 0 0;
#X connect 15 0 7 0;
#X connect 15 0 12 0;
#X connect 18 0 1 0;
-------------- next part --------------
#N canvas 274 60 691 629 10;
#X floatatom 111 36 5 0 0 0 - - -;
#X obj 111 484 ezdac~;
#X obj 238 478 tabwrite~ \$0-scope;
#N canvas 0 0 450 300 (subpatch) 0;
#X array \$0-scope 4410 float 2;
#X coords 0 1 4409 -1 200 140 1;
#X restore 375 354 graph;
#X obj 238 452 metro 100;
#X obj 238 431 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 1
1;
#X obj 325 280 throw~ \$0-asig;
#X obj 326 210 vline~;
#X obj 326 82 b;
#X obj 326 234 *~;
#X obj 326 253 *~;
#X obj 128 340 vline~;
#X obj 128 364 *~;
#X obj 128 383 *~;
#X obj 112 418 *~;
#X msg 128 319 0.9 100 \, 0.8 300 100 \, 0 1000 400;
#X obj 111 63 mtof;
#X obj 326 154 f;
#X obj 360 81 hsl 128 15 0 0.9 0 0 empty empty empty -2 -8 0 10 -262144
-1 -1 12700 1;
#X obj 357 111 moses 1;
#X obj 111 168 gbuzz~;
#X obj 149 134 catch~ \$0-asig;
#X text 440 279 Harmonicity-Env;
#X text 169 381 Amplitude-Env;
#X text 428 113 don't go equal or over 1!;
#X floatatom 365 135 5 0 0 0 - - -;
#X msg 326 179 \$1 200 \, 0.1 1000 200;
#X connect 0 0 8 0;
#X connect 0 0 16 0;
#X connect 4 0 2 0;
#X connect 5 0 4 0;
#X connect 7 0 9 0;
#X connect 7 0 9 1;
#X connect 8 0 15 0;
#X connect 8 0 17 0;
#X connect 9 0 10 0;
#X connect 9 0 10 1;
#X connect 10 0 6 0;
#X connect 11 0 12 0;
#X connect 11 0 12 1;
#X connect 12 0 13 0;
#X connect 12 0 13 1;
#X connect 13 0 14 1;
#X connect 14 0 1 0;
#X connect 14 0 1 1;
#X connect 14 0 2 0;
#X connect 15 0 11 0;
#X connect 16 0 20 0;
#X connect 17 0 26 0;
#X connect 18 0 19 0;
#X connect 19 0 17 1;
#X connect 19 0 25 0;
#X connect 20 0 14 0;
#X connect 21 0 20 1;
#X connect 26 0 7 0;


More information about the Pd-list mailing list