#N canvas 0 26 650 407 10; #X obj 34 45 metro; #X msg 34 20 bang; #X floatatom 76 20 5 0 0 0 - - -; #X obj 34 327 dist~ 1; #X obj 24 359 dac~; #N canvas 11 6 262 403 systemparams 0; #X floatatom 81 47 5 0 0 0 - - -; #X floatatom 125 47 5 0 0 0 - - -; #X floatatom 81 74 5 0 0 0 - - -; #X floatatom 125 74 5 0 0 0 - - -; #X floatatom 81 102 5 0 0 0 - - -; #X floatatom 125 102 5 0 0 0 - - -; #X floatatom 81 129 5 0 0 0 - - -; #X floatatom 125 129 5 0 0 0 - - -; #X floatatom 81 157 5 0 0 0 - - -; #X floatatom 125 157 5 0 0 0 - - -; #X floatatom 81 184 5 0 0 0 - - -; #X floatatom 125 184 5 0 0 0 - - -; #X floatatom 81 212 5 0 0 0 - - -; #X floatatom 125 212 5 0 0 0 - - -; #X floatatom 81 239 5 0 0 0 - - -; #X floatatom 125 239 5 0 0 0 - - -; #X obj 28 65 bdft 1; #X obj 27 93 bdft 2; #X obj 28 120 bdft 3; #X obj 28 175 bdft 7; #X obj 28 202 bdft 11; #X obj 28 230 bdft 17; #X obj 28 257 bdft 30; #X obj 28 319 outlet; #X text 20 23 frequency detune and damping; #X text 49 283 bdft argument = harmonic; #X obj 28 147 bdft 5; #X connect 0 0 16 0; #X connect 1 0 16 1; #X connect 2 0 17 0; #X connect 3 0 17 1; #X connect 4 0 18 0; #X connect 5 0 18 1; #X connect 6 0 26 0; #X connect 7 0 26 1; #X connect 8 0 19 0; #X connect 9 0 19 1; #X connect 10 0 20 0; #X connect 11 0 20 1; #X connect 12 0 21 0; #X connect 13 0 21 1; #X connect 14 0 22 0; #X connect 15 0 22 1; #X connect 16 0 23 0; #X connect 17 0 23 0; #X connect 18 0 23 0; #X connect 19 0 23 0; #X connect 20 0 23 0; #X connect 21 0 23 0; #X connect 22 0 23 0; #X connect 26 0 23 0; #X restore 89 76 pd systemparams; #X obj 34 93 bdiag~; #X obj 34 232 dynwav~; #X obj 34 283 vol~; #X floatatom 57 257 5 0 0 0 - - -; #X floatatom 78 168 5 0 0 0 - - -; #X obj 78 196 phasor~; #X text 258 168 the [eig ] message sets the eigenvalue for the corresponding block. there are n/2 blocks \, with n the dsp blocksize.; #X text 259 223 you can use [timefreq <60dB time> ] for a more appropriate initialization of the eigenvalues using decay time in milliseconds and oscillation frequency in Hz.; #X text 256 18 bdiag~: parallel block diagonal state space model (parallel 2d rotations) see bdiag.c for more info. the state equations for one block are:; #X text 300 70 state1 = real * state1 - imag * state2 + input1; #X text 300 85 state2 = real * state2 + imag * state1 + input2; #X text 258 121 this module is intended to "filter" spectral data produced by bfft or other short time spectral transforms like dwt.; #X text 256 279 [bang] or [random] set the state vector to a random value. [reset] sets it to 0; #X text 256 327 this patch uses of bdiag~ \, ibfft~ and dynwav~ to build a 32 voice harmonic modal synth \, with the state excited with white noise on bang.; #N canvas 379 254 494 344 META 0; #X text 12 135 HELP_PATCH_AUTHORS "pd meta" information added by Jonathan Wilkes for Pd version 0.42.; #X text 12 45 DESCRIPTION parallel block diagonal state space model (parallel 2d rotations); #X text 12 75 INLET_0 bang signal random reset timefreq eig; #X text 12 95 OUTLET_0 signal; #X text 11 5 KEYWORDS signal; #X text 12 25 LICENSE GPL v2; #X text 12 115 AUTHOR Tom Schouten ; #X restore 600 386 pd META; #X obj 34 129 ibfft~; #X connect 0 0 6 0; #X connect 1 0 0 0; #X connect 2 0 0 1; #X connect 3 0 4 0; #X connect 3 0 4 1; #X connect 5 0 6 0; #X connect 6 0 21 0; #X connect 7 0 8 0; #X connect 8 0 3 0; #X connect 9 0 8 1; #X connect 10 0 11 0; #X connect 11 0 7 1; #X connect 21 0 7 0;