Attached is the base KS synth that I am using. It sounds like a PVC pipe Being hit which was my goal. The delay is excited with a cosine enveloped bandlimited noise pulse. If you add some spikes to the table, you can change the excitation sound.
Preloading the table, gets more low frequency energy into the table faster, allowing better generation of low frequency sounds. (I am a bass player!!) mcg -----Original Message----- From: derek holzer [mailto:[EMAIL PROTECTED] Sent: Thursday, December 07, 2006 12:26 PM To: Michael Garrett Cc: [email protected] Subject: Re: [PD] Pre Loading a Delay Line I was wondering how you arrived at this idea of "preloading" the delay line. From reading this I would say definitely trigger your waveforms as samples into a delay line with feedback. The waveform should be the same length as your delay line. By setting your feedback and playback readpoints to the same, you can change the functional length of delay without changing it's actual (or theoretical maximum) length. So you'll need to be able to call up the length of the waveform (unless they are all the same in your implementation) in miliseconds and send that to the [vd~] used for playback and for feedback as a starting point, from which you would adjust to change pitch. The first thing you would hear then is the sampled waveform, and then after that iterations of that waveform decreasing in volume. Classic KS. Or am I missing something? It seems you're taking a more complex approach to this than basic KS, and I wonder what the aim is in terms of sound... best, d. Michael Garrett wrote: > A little better explanation: > > The idea is to read from the table, and feedback with and attenuated delay, > back into the table, thereby modifying the table, the table at any given > time, being the KS 'waveform' at that instant. So, reading attenuating and > feeding Back the signal at varying rates, is equivalent to modifying the > 'speed of sound' inside the 'waveguide'. > > So something like this: Read out from the table at the current (or delayed) > index, send that to the output, take that sample attenuate it, and write it > back to the using the delay index, increment the indices (with modulo) > thereby replacing the original table with the time modified data at each > time (or sample index). The read .. modify.. feedback rate, is equivalent to > the 'propagation' of waves in the 'waveguide' (or the KS 'delay' unit). > > So of you were watching the table in real time, you would see the internal > guts of the KS algorithm, modifying the wave (table)in real time. > > Once the energy in the table has decayed to zero, silence would be output... > > Another note would be triggered, by copying the table back into the > 'waveguide' (or table or delay line depending on the implementation). > > mcg > > > > -----Original Message----- > From: derek holzer [mailto:[EMAIL PROTECTED] > Sent: Thursday, December 07, 2006 10:16 AM > To: Michael Garrett > Cc: [email protected] > Subject: Re: [PD] Pre Loading a Delay Line > > Hi Michael, > > technically, reading from a table and changing the playback speed isn't > really KS. That's more like wavetable synthesis with en envelope. I > always thought KS was dependent on attenuated feedback. But if it works > do it! > > I don't have a handy example of tabread/tabwrite as a delay, > unfortunately. Frank Barknecht has a [pluck~] abstraction in CVS: > > "/abstractions/footils/foo/pluck~.pd" > > But I'm sure it uses [vd~]. Might be interesting to have a look at. And > this abstraction from Orm Finnendahl adapted by João Miguel Pais: > > http://lists.puredata.info/pipermail/pd-list/attachments/20060412/75593d59/k > s.obj > > (textfile...save as "ks.pd") > > Another idea, why not preload the delay line in realtime by triggering a > sample when you need the note? That seems much more like "textbook" KS, > which is usually triggered by a burst of noise (though I prefer a mic > input). > > best, > d. > > Michael Garrett wrote: >> Thanks or the feedback!! I have a good KS synthesizer patched up >> That gives me good results, with the block size for the waveguide set >> At blocksize one as you suggested. >> >> The table is a good idea, instead of time dialating the excitation > waveform >> or changing the delay time to get different pitches, I can just read / > write >> the table (delay line) at different rates (in modeling terms, changing the >> speed of sound). Easier, and only requires a constant length table copy > for >> each note. >> >> I have been peaking into the source with the intent of creating an > external >> which performs the same function as the current delay object (with vd~) > but >> has an input to preload the delay line from a table. >> >> Is there an example that you know of that uses tabread and write as a > delay >> line?? >> >> Thanks!! >> >> Michael >> >> -----Original Message----- >> From: derek holzer [mailto:[EMAIL PROTECTED] >> Sent: Wednesday, November 29, 2006 8:01 PM >> To: Michael Garrett >> Cc: [email protected] >> Subject: Re: [PD] Pre Loading a Delay Line >> >> Hi Michael, >> >> Michael Garrett wrote: >>> I need to pre fill a delay line, in a Karplus Strong oscillator. That >>> data will then be overwritten during the duration >>> >>> Of the 'note'. Is there a 'built in mechanism for accomplishing this, or >>> do I need to construct something using a table. >>> >>> I need the delay line to be interpolating. I am setting the delay based >>> on the incoming note, and ideally would fill the >>> line with the same waveform, time dilated to fit the required length. >> Short answer: no, there is no way to "pre fill" the delay that is native >> to the [delwrite~] object. >> >> You're on the right track to use a table, however. You could also go a >> step further and build your own delay line using two tables, which >> transfer back and forth to each other with [tabwrite~], and could be >> preloaded with whatever you need. The [tabread4~] object should read >> your tables with enough interpolation for Karplus Strong synthesis. >> Otherwise, [delwrite~] and [vd~] are normally used for this, and [vd~ ] >> seems to interpolate well enough. You'll have to set a very low >> blocksize with the [block~] object to synthesize high frequencies in any >> case. >> >> In the past, there's been quite a bit of discussion about KS synthesis >> on the list. And it sounds like you have a rather complicated approach >> to it (or at least more so than standard KS synthesis). If you're >> interested, it might be worth checking some of these threads for more > tips. >> best, >> d. >> >> > > -- derek holzer ::: http://www.umatic.nl ---Oblique Strategy # 82: "Honor thy error as a hidden intention"
#N canvas 0 0 640 438 12; #X obj 77 274 +~; #X obj 242 175 *~; #X obj 312 44 inlet feedback; #X obj 198 44 inlet~ delay; #X obj 93 306 hip~ 10; #X floatatom 327 97 5 0 0 0 - - -; #X obj 78 368 outlet~; #X obj 77 44 inlet~ input; #X obj 242 222 vcf~; #X floatatom 298 138 5 0 0 0 F - -; #X floatatom 366 138 5 0 0 0 R - -; #X obj 274 174 sig~; #X obj 485 43 loadbang; #X msg 454 92 0.59; #X msg 414 93 250; #X obj 308 297 block~ 1; #X obj 198 98 vd~ \$1-tube; #X obj 94 332 delwrite~ \$1-tube 100; #X connect 0 0 4 0; #X connect 0 0 6 0; #X connect 1 0 8 0; #X connect 2 0 1 1; #X connect 2 0 5 0; #X connect 3 0 16 0; #X connect 4 0 17 0; #X connect 7 0 0 0; #X connect 8 0 0 1; #X connect 9 0 11 0; #X connect 10 0 8 2; #X connect 11 0 8 1; #X connect 12 0 14 0; #X connect 12 0 13 0; #X connect 13 0 10 0; #X connect 14 0 9 0; #X connect 16 0 1 0;
#N canvas 104 3 462 678 12; #X obj 35 20 notein; #X obj 35 97 pack 0 0 0 0; #X floatatom 89 22 5 0 0 0 - - -; #X floatatom 135 23 5 0 0 0 - - -; #X obj 7 216 poly 4 1; #X obj 35 159 unpack 0 0 0 0; #X floatatom 130 212 5 0 0 0 - - -; #X floatatom 192 212 5 0 0 0 - - -; #X obj 42 280 pack 0 0 0 0 0; #X obj 41 337 pvc_synth_001 A; #X obj 171 307 route 1 2 3 4 5 6 7 8; #X obj 46 589 output~; #N canvas 725 116 368 444 generate_impulse 0; #N canvas 0 0 450 300 graph6 0; #X array impulse 515 float 1; #A 0 3.7649e-005 0 3.7649e-005 0.00015059 0.000338807 0.000602271 0.000940942 0.00135477 0.00184369 0.00240763 0.00304651 0.00376023 0.00454867 0.00541174 0.00634928 0.00736117 0.00844724 0.00960734 0.0108413 0.0121489 0.01353 0.0149843 0.0165117 0.0181119 0.0197847 0.0215298 0.0233469 0.0252359 0.0271963 0.0292279 0.0313304 0.0335035 0.0357469 0.0380602 0.040443 0.0428951 0.0454159 0.0480053 0.0506627 0.0533878 0.0561801 0.0590393 0.0619649 0.0649564 0.0680135 0.0711356 0.0743223 0.0775731 0.0808875 0.0842651 0.0877052 0.0912074 0.0947712 0.0983961 0.102081 0.105827 0.109631 0.113495 0.117416 0.121395 0.125432 0.129524 0.133673 0.137876 0.142134 0.146446 0.150812 0.155229 0.159699 0.149934 0.149934 0.149934 0.145173 0.140411 -0.735774 -0.742917 -0.778631 -0.778631 -0.778631 -0.792917 -0.792917 -0.792917 -0.792917 -0.792917 -0.792917 -0.792917 -1.03577 -1.03577 -1.03577 -1.03577 -1.03577 -1.03577 -1.03577 -1.03577 -1.03577 -1.03577 -1.03577 -1.03577 -1.03577 -1.03577 -1.03577 -1.03577 -1.03577 -1.03577 -1.03577 -1.03577 -1.03577 -1.03577 -1.03577 -1.03577 -1.03577 -1.03577 -1.03577 -1.03101 -1.02625 -1.02149 -1.02149 -1.02149 -1.02149 -1.02149 -1.02149 -1.01434 -0.964344 -0.959582 -0.954821 -0.721489 -0.716727 -0.711965 0.521361 0.499999 0.506135 0.51227 0.518403 0.524533 0.53066 0.536782 0.542898 0.549008 0.55511 0.561205 0.56729 0.573364 0.579428 0.58548 0.591519 0.597544 0.603555 0.60955 0.615528 0.621489 0.627432 0.633356 0.639259 0.645142 0.651002 0.65684 0.662654 0.668444 0.674209 0.679947 0.685658 0.691341 0.696995 0.70262 0.708214 0.713777 0.719307 0.724805 0.730269 0.735698 0.741091 0.746448 0.751768 0.757051 0.762294 0.767498 0.772662 0.777784 0.782865 0.787903 0.792898 0.797849 0.802755 0.807615 0.812429 0.817196 0.821915 0.826586 0.831207 0.835779 0.8403 0.84477 0.849187 0.853553 0.857865 0.862123 0.866326 0.870475 0.874568 0.878604 0.882583 0.886505 0.890368 0.894173 0.897918 0.901603 0.905228 0.908792 0.912294 0.915734 0.919112 0.922426 0.925677 0.928864 0.931986 0.935043 0.938035 0.94096 0.943819 0.946612 0.949337 0.951994 0.954584 0.957104 0.959556 0.961939 0.964253 0.966496 0.968669 0.970772 0.972803 0.974764 0.976653 0.97847 0.980215 0.981888 0.983488 0.985015 0.98647 0.987851 0.989158 0.990392 0.991553 0.992639 0.99365 0.994588 0.995451 0.99624 0.996953 0.997592 0.998156 0.998645 0.999059 0.999398 0.999661 0.999849 0.999962 1 0.999962 0.999849 0.999661 0.999398 0.999059 0.998645 0.998156 0.997593 0.996954 0.99624 0.995452 0.994588 0.993651 0.992639 0.991553 0.990393 0.989159 0.987851 0.98647 0.985016 0.983489 0.981888 0.980216 0.978471 0.976653 0.974765 0.972804 0.970773 0.96867 0.966497 0.964254 0.96194 0.959558 0.957105 0.954585 0.951995 0.949338 0.946613 0.943821 0.940961 0.938036 0.935044 0.931987 0.928865 0.925678 0.922428 0.919113 0.915736 0.912296 0.908793 0.90523 0.901605 0.897919 0.894174 0.89037 0.886506 0.882585 0.878605 0.874569 0.870477 0.866328 0.862125 0.857867 0.853555 0.849189 0.844772 0.840302 0.835781 0.831209 0.826588 0.821917 0.817198 0.812431 0.807617 0.802757 0.797851 0.7929 0.787906 0.782867 0.777787 0.772664 0.7675 0.762296 0.757053 0.751771 0.746451 0.741093 0.7357 0.730271 0.724807 0.71931 0.713779 0.708216 0.702622 0.696998 0.691343 0.68566 0.679949 0.674211 0.668447 0.662657 0.656843 0.651005 0.645144 0.639262 0.633358 0.627435 0.621492 0.615531 0.609552 0.603558 0.597547 0.591522 0.585483 0.579431 0.573367 0.567292 0.561207 0.555113 0.549011 0.542901 0.536784 0.530662 0.524536 0.518406 0.512273 0.506138 0.500002 0.493866 0.487731 0.481598 0.475468 0.469342 0.46322 0.457103 0.450993 0.444891 0.438797 0.432712 0.426637 0.420573 0.414521 0.408482 0.402457 0.396446 0.390451 0.384473 0.378512 0.372569 0.366646 0.360742 0.35486 0.348999 0.343161 0.337347 0.331557 0.325793 0.320054 0.314343 0.30866 0.303006 0.297381 0.291787 0.286224 0.280694 0.275196 0.269733 0.264304 0.25891 0.253553 0.248233 0.242951 0.237707 0.232503 0.227339 0.222217 0.217136 0.212098 0.207103 0.202152 0.197246 0.192386 0.187572 0.182805 0.178086 0.173415 0.168794 0.164222 0.159701 0.155231 0.150814 0.146448 0.142136 0.137878 0.133674 0.129526 0.125433 0.121397 0.117418 0.113496 0.109633 0.105828 0.102083 0.0983977 0.0947728 0.091209 0.0877067 0.0842665 0.080889 0.0775745 0.0743237 0.0711369 0.0680148 0.0649577 0.0619661 0.0590405 0.0561813 0.053389 0.0506638 0.0480064 0.045417 0.0428961 0.0404441 0.0380612 0.0357479 0.0335045 0.0313314 0.0292288 0.0271972 0.0252367 0.0233477 0.0215306 0.0197854 0.0181126 0.0165124 0.014985 0.0135306 0.0121495 0.0108418 0.00960786 0.00844773 0.00736162 0.0063497 0.00541213 0.00454903 0.00376055 0.0030468 0.00240789 0.00184392 0.00135496 0.000941105 0.000602401 0.000338905 0.000150656 3.76816e-005 7.04153e-012 3.76165e-005; #X coords 0 1 514 -1 200 140 1; #X restore 75 177 graph; #X obj 41 8 loadbang; #X msg 73 124 \; impulse cosinesum 512 0.5 -0.5; #X msg 73 32 \; impulse xticks 0 10 10 \; impulse yticks 0 0.1 5 \; impulse xlabel -1.1 0 100 200 400 500 \; impulse ylabel -6 -1 0 1 \; ; #X connect 1 0 3 0; #X connect 3 0 2 0; #X restore 229 21 pd generate_impulse; #X msg 147 113 30 127 2 5; #X msg 238 113 46 127 2 5; #X obj 177 83 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1 -1; #X msg 333 113 49 127 2 5; #X obj 11 63 stripnote; #X obj 42 367 pvc_synth_001 B; #X obj 41 400 pvc_synth_001 C; #X obj 40 428 pvc_synth_001 D; #X obj 40 457 pvc_synth_001 E; #X obj 40 484 pvc_synth_001 F; #X obj 40 512 pvc_synth_001 G; #X obj 40 541 pvc_synth_001 H; #X connect 0 0 17 0; #X connect 0 1 17 1; #X connect 1 0 5 0; #X connect 2 0 1 2; #X connect 3 0 1 3; #X connect 4 0 8 0; #X connect 4 1 8 1; #X connect 4 2 8 2; #X connect 5 0 4 0; #X connect 5 1 4 1; #X connect 5 2 6 0; #X connect 5 2 8 3; #X connect 5 3 7 0; #X connect 5 3 8 4; #X connect 8 0 10 0; #X connect 9 0 18 0; #X connect 10 0 9 1; #X connect 10 1 18 1; #X connect 10 2 19 1; #X connect 10 3 20 1; #X connect 10 4 21 1; #X connect 10 5 22 1; #X connect 10 6 23 1; #X connect 10 7 24 1; #X connect 13 0 5 0; #X connect 14 0 5 0; #X connect 15 0 13 0; #X connect 15 0 14 0; #X connect 15 0 16 0; #X connect 16 0 5 0; #X connect 17 0 1 0; #X connect 17 1 1 1; #X connect 18 0 19 0; #X connect 19 0 20 0; #X connect 20 0 21 0; #X connect 21 0 22 0; #X connect 22 0 23 0; #X connect 23 0 24 0; #X connect 24 0 11 0; #X connect 24 0 11 1;
#N canvas 656 80 531 547 12; #X obj 194 246 sig~; #X obj 246 159 noise~; #X obj 99 323 *~; #X obj 246 205 lop~; #X obj 246 244 lop~; #X obj 132 109 mtof; #X obj 161 211 /; #X msg 117 175 1000; #X obj 99 19 inlet; #X obj 99 62 unpack 0 0 0 0; #X obj 35 19 inlet~; #X obj 34 465 outlet~; #X obj 35 421 +~; #X msg 351 177 0.993; #X msg 309 178 511; #X obj 309 11 loadbang; #X obj 57 277 tabplay~ impulse; #X obj 98 361 waveguide_pvc \$1; #X floatatom 182 107 5 0 0 0 - - -; #X obj 77 109 t b b; #X floatatom 242 96 5 0 0 0 - - -; #X connect 0 0 17 1; #X connect 1 0 3 0; #X connect 2 0 17 0; #X connect 3 0 4 0; #X connect 4 0 2 1; #X connect 5 0 6 1; #X connect 6 0 0 0; #X connect 7 0 6 0; #X connect 8 0 9 0; #X connect 9 0 5 0; #X connect 9 0 19 0; #X connect 9 2 18 0; #X connect 9 3 20 0; #X connect 10 0 12 0; #X connect 12 0 11 0; #X connect 13 0 17 2; #X connect 14 0 3 1; #X connect 14 0 4 1; #X connect 15 0 13 0; #X connect 15 0 14 0; #X connect 16 0 2 0; #X connect 17 0 12 1; #X connect 19 0 16 0; #X connect 19 1 7 0;
_______________________________________________ [email protected] mailing list UNSUBSCRIBE and account-management -> http://lists.puredata.info/listinfo/pd-list
