wrap~ (Was: Re: [PD] wave morphing)
On 15/01/2007, at 14.37, Steffen wrote: On 15/01/2007, at 11.49, Roman Haefeli wrote: exactly, and since [wrap~] gives you the difference between the largest integer not exceeding X and X, it will always give you 0, when X is an integer. That's how i read it too. But following that: If 0 (zero) is an integer (it normally is, right?), then the largest integer not exceeding 0 is 0, and the difference is 0-0=0. Problem being that wrap~ of the signal 0 gives 1, not 0. I'd like to know too, as i find the description from the help patch confusing (when the input is integers). As i understand what wrap~ does (again, on the integer domain), it's like a function f: Z - {0,1} where f(N)=0 and f(Z\N)=1 (where N is the numbers 1,2,3,.. and Z is the numbers ...,-1,0,1,...). the output of [wrap~] is always = 0 and 1. Again, i agree that from the description it would make sense if that intact was the output domain. But it doesn't match the experience using wrap~. Can someone give an explanation of why wrap~ behaves as it does for 0 and negative integer signals? If it is meant do behave like it does, i think it would make sense to changed the help patch so it matches the behavior. - As the functionality is described now, i find it expected that it works on signals as wrap from zexy does on the numbers (when wrap from zexy is called without arguments). That said. Why does wrap~ of fx. the signal -0.99 return 0.0099? and wrap~ of fx. -5.99 return 0.012? wrap~tests.pd Description: Binary data ___ PD-list@iem.at mailing list UNSUBSCRIBE and account-management - http://lists.puredata.info/listinfo/pd-list
Re: [PD] wave morphing
Hallo, Roman Haefeli hat gesagt: // Roman Haefeli wrote: i can't quite follow, what you mean hear. you CAN use [wrap~] to build your own [int~] (see attached patch). Well, the problem is, that this will give you -1 if you apply it to [sig~ 0], whereas int(0) is 0 as is the equivalent message algorithm using [wrap] (see attached again). Ciao -- Frank Barknecht _ __footils.org_ __goto10.org__ #N canvas 754 157 470 377 10; #X obj 86 242 wrap~; #X obj 70 202 sig~; #X obj 69 268 -~; #X floatatom 110 86 5 0 0 0 - - -; #X obj 129 308 print~; #X obj 129 202 b; #X obj 267 305 int; #X floatatom 267 333 5 0 0 0 - - -; #X obj 363 276 wrap; #X obj 333 305 -; #X obj 333 243 t a a; #X floatatom 333 333 5 0 0 0 - - -; #X msg 110 51 0; #X msg 144 51 1; #X msg 175 51 2; #X floatatom 195 333 5 0 0 0 - - -; #X obj 195 306 snapshot~; #X obj 110 116 t a b a a; #X obj 129 178 del 10; #X connect 0 0 2 1; #X connect 1 0 0 0; #X connect 1 0 2 0; #X connect 2 0 4 0; #X connect 2 0 16 0; #X connect 3 0 17 0; #X connect 5 0 4 0; #X connect 5 0 16 0; #X connect 6 0 7 0; #X connect 8 0 9 1; #X connect 9 0 11 0; #X connect 10 0 9 0; #X connect 10 1 8 0; #X connect 12 0 3 0; #X connect 13 0 3 0; #X connect 14 0 3 0; #X connect 16 0 15 0; #X connect 17 0 1 0; #X connect 17 1 18 0; #X connect 17 2 6 0; #X connect 17 3 10 0; #X connect 18 0 5 0; ___ PD-list@iem.at mailing list UNSUBSCRIBE and account-management - http://lists.puredata.info/listinfo/pd-list
Re: [PD] wave morphing
On Mon, 2007-01-15 at 11:49 +0100, Roman Haefeli wrote: the output of [wrap~] is always = 0 and 1. which is wrong, when the input is 0. i din't read carefully, sorry. ___ Telefonate ohne weitere Kosten vom PC zum PC: http://messenger.yahoo.de ___ PD-list@iem.at mailing list UNSUBSCRIBE and account-management - http://lists.puredata.info/listinfo/pd-list
Re: [PD] wave morphing
On 15/01/2007, at 11.49, Roman Haefeli wrote: exactly, and since [wrap~] gives you the difference between the largest integer not exceeding X and X, it will always give you 0, when X is an integer. That's how i read it too. But following that: If 0 (zero) is an integer (it normally is, right?), then the largest integer not exceeding 0 is 0, and the difference is 0-0=0. Problem being that wrap~ of the signal 0 gives 1, not 0. I'd like to know too, as i find the description from the help patch confusing (when the input is integers). As i understand what wrap~ does (again, on the integer domain), it's like a function f: Z - {0,1} where f(N)=0 and f(Z\N)=1 (where N is the numbers 1,2,3,.. and Z is the numbers ...,-1,0,1,...). the output of [wrap~] is always = 0 and 1. Again, i agree that from the description it would make sense if that intact was the output domain. But it doesn't match the experience using wrap~. ___ PD-list@iem.at mailing list UNSUBSCRIBE and account-management - http://lists.puredata.info/listinfo/pd-list
Re: [PD] wave morphing
Hello, I didn't try this freeware, but it looks like very good, the info.html is explicitly show the fonctionning,then we could deduce how to proceed for doing something similar with this. Also I am not sure how one hundred of waveforms would be stored into the patch. I didnt looked into your patch yet but usually these waveforms are stored in one table as one sample. Your tabread object should run through one waveform at a time, I have to look up how much bytes they are but assume 256, so it runs from 0 to 255 and to switch to another waveform you add n*256 where n is the waveformnumber. When you switch with a line object over several waveforms, you get the wonderful crude ppg sound but you should make sure that it goes only whole numbers without fractions so it really jumps a whole waveform each step. It can be done by sending the moving number through an int object. Even in the boring rompler 'synthesizers' of the 90s all samples are usually stored in one big memorychunk. The Emu line of Proteus and Morpheus Synthesizers even let you change the wavestart, -end and loop settings beyond one sample borders so you can create rather sick material. http://en.wikipedia.org/wiki/Wavetable Cheers, Malte -- Malte Steiner media art + development -www.block4.com- ___ PD-list@iem.at mailing list UNSUBSCRIBE and account-management - http://lists.puredata.info/listinfo/pd-list
Re: [PD] wave morphing
Malte Steiner a écrit : I didnt looked into your patch yet but usually these waveforms are stored in one table as one sample. Oops, fortunately you didn't looked into the patch, there was, again, a missing abstraction which is attached. It's a kind of autorange but that outputs values between zero and one for a given pair of input range. This abstraction permits to slide between waveforms by adding them progressively Your tabread object should run through one waveform at a time, So the functionning seems different because my patch is about getting the average between to successive waveshapes, instead of passing from one to another without transition. I have to look up how much bytes they are but assume 256, so it runs from 0 to 255 and to switch to another waveform you add n*256 where n is the waveformnumber. Good, then the amount of samples won't get truncated with using one hundred of different waveforms. http://en.wikipedia.org/wiki/Wavetable thanks, PC. Cheers, Malte #N canvas 0 0 339 233 10; #N canvas 29 318 179 311 fade-morph 0; #X obj 42 8 inlet; #X obj 41 267 outlet; #X obj 42 114 change; #X obj 41 245 /; #X obj 42 157 -; #X obj 109 50 \$2; #X obj 127 118 / 2; #X obj 42 178 abs; #X obj 42 200 -; #X obj 42 222 abs; #X obj 42 135 - \$1; #X obj 42 30 t a b; #X obj 80 72 + \$1; #X obj 42 91 clip \$1; #X connect 0 0 11 0; #X connect 2 0 10 0; #X connect 3 0 1 0; #X connect 4 0 7 0; #X connect 5 0 6 0; #X connect 5 0 12 0; #X connect 6 0 4 1; #X connect 6 0 3 1; #X connect 6 0 8 1; #X connect 7 0 8 0; #X connect 8 0 9 0; #X connect 9 0 3 0; #X connect 10 0 4 0; #X connect 11 0 13 0; #X connect 11 1 5 0; #X connect 12 0 13 2; #X connect 13 0 2 0; #X restore 163 121 pd fade-morph; #X text 161 47 \$2 = ending fade out; #X text 161 26 \$1 = begining fade in; #X text 148 66 \$2/2 = top level; #X text 86 44 inlet; #X text 72 189 outlet = value between 0 and 1; #X obj 163 94 inlet; #X obj 163 145 outlet; #X connect 0 0 7 0; #X connect 6 0 0 0; ___ PD-list@iem.at mailing list UNSUBSCRIBE and account-management - http://lists.puredata.info/listinfo/pd-list
Re: [PD] wave morphing
I do something simular with wavetables in the spirit of PPG or Waldorf synthesizers (stepping through a bunch of single cycle waves), its great in combination with the moog~ filter and it sounded well on a concert yesterday. There are two windows applications out there which can generate wavetables and I managed to run them on my Linuxbox with Wine. Its the freeware Tranzilon http://www.xs4all.nl/~avg/tranzilon/info.html and the shareware wave256 http://www.sonicspot.com/wave256/wave256.html Opensource solutions would be cool but I dont know any, I guess a pd patch should be possible and I tried something in csound some years ago. Cheers, Malte -- Malte Steiner media art + development -www.block4.com- ___ PD-list@iem.at mailing list UNSUBSCRIBE and account-management - http://lists.puredata.info/listinfo/pd-list
Re: [PD] wave morphing
Hi Andy~ Did I miss this post? I'd like to take a gander at your useage of wavecycles too! ~Kyle On 12/28/06, Patco [EMAIL PROTECTED] wrote: [EMAIL PROTECTED] a écrit : Couldn't quite follow what you were doing there Pat. I forgot to put the comments in my first commit, so it make the patch hard to understand with all mistakes there was inside... Here's my take on a way of fading between two waveshapes stored in tables that might help. What I am looking for is a little bit more complicated because it's about fading between more than two waveshapes, but the principle is the same. It isn't very well commented but in a few words: Neat composition! I finally enjoy my mistakes, which has driven my hears to listen to this piece. there's two tables, the crossfader exchanges back and forth between the two, each one is written randomly with a wavecycle (a random set of values times a curve to smooth the ends) when it has zero volume - so we get a continuously morphing pad sound. This is a way very interesting to study, for generating waves, very astonishing. I was planning to do something similar in some uncertain future, but filling tables with voice formants. PC. ___ D�couvrez une nouvelle fa�on d'obtenir des r�ponses � toutes vos questions ! Profitez des connaissances, des opinions et des exp�riences des internautes sur Yahoo! Questions/R�ponses http://fr.answers.yahoo.com ___ PD-list@iem.at mailing list UNSUBSCRIBE and account-management - http://lists.puredata.info/listinfo/pd-list -- http://theradioproject.com http://perhapsidid.blogspot.com (()()()(()))()()())( (())(())()((( ))(__ _())(()))___ (((000)))oOO ___ PD-list@iem.at mailing list UNSUBSCRIBE and account-management - http://lists.puredata.info/listinfo/pd-list
Re: [PD] wave morphing
Yes, please post the patch, Andy. This is something I've wanted to do for some time. I got something nice with an additive synth made up of individual [osc~] objects, by constantly shifting the levels of the harmonics. Even doing random harmonic values generated pretty cool results. But, doing this with a wavetable would be MUCH more CPU efficient, not to mention that I could calculate, say 64 partials instead of the much lower number I was using. ~David On 12/29/06, Kyle Klipowicz [EMAIL PROTECTED] wrote: Hi Andy~ Did I miss this post? I'd like to take a gander at your useage of wavecycles too! ~Kyle On 12/28/06, Patco [EMAIL PROTECTED] wrote: [EMAIL PROTECTED] a écrit : Couldn't quite follow what you were doing there Pat. I forgot to put the comments in my first commit, so it make the patch hard to understand with all mistakes there was inside... Here's my take on a way of fading between two waveshapes stored in tables that might help. What I am looking for is a little bit more complicated because it's about fading between more than two waveshapes, but the principle is the same. It isn't very well commented but in a few words: Neat composition! I finally enjoy my mistakes, which has driven my hears to listen to this piece. there's two tables, the crossfader exchanges back and forth between the two, each one is written randomly with a wavecycle (a random set of values times a curve to smooth the ends) when it has zero volume - so we get a continuously morphing pad sound. This is a way very interesting to study, for generating waves, very astonishing. I was planning to do something similar in some uncertain future, but filling tables with voice formants. PC. ___ D�couvrez une nouvelle fa�on d'obtenir des r�ponses � toutes vos questions ! Profitez des connaissances, des opinions et des exp�riences des internautes sur Yahoo! Questions/R�ponses http://fr.answers.yahoo.com ___ PD-list@iem.at mailing list UNSUBSCRIBE and account-management - http://lists.puredata.info/listinfo/pd-list -- http://theradioproject.com http://perhapsidid.blogspot.com (()()()(()))()()())( (())(())()((( ))(__ _())(()))___ (((000)))oOO ___ PD-list@iem.at mailing list UNSUBSCRIBE and account-management - http://lists.puredata.info/listinfo/pd-list ___ PD-list@iem.at mailing list UNSUBSCRIBE and account-management - http://lists.puredata.info/listinfo/pd-list
RE: Re: [PD] wave morphing
I studied the solution to what you were trying to achieve and I understand it now. I also missed the context of your earlier post explaining that you wanted a single fader to shift between several sources, sorry. Kyle, here's the patch again, or for anyone else who wants a play. cheers, Andy Hi Andy~ Did I miss this post? I'd like to take a gander at your useage of wavecycles too! ~Kyle On 12/28/06, Patco [EMAIL PROTECTED] wrote: [EMAIL PROTECTED] a écrit : Couldn't quite follow what you were doing there Pat. I forgot to put the comments in my first commit,so it make the patch hard to understand with all mistakes there wasinside...Here's my take on a way of fading between two waveshapes stored in tables that might help.What I am looking for is a little bit more complicated because it'sabout fading between more than two waveshapes,but the principle is the same.It isn't very well commented but in a few words: Neat composition!I finally enjoy my mistakes,which has driven my hears to listen to this piece. there's two tables, the crossfader exchanges back and forth between the two, each one is written randomly with a wavecycle (a random set of values times a curve to smooth the ends) when it has zero volume - so we get a continuously morphing pad sound.This is a way very interesting to study, for generating waves, very astonishing.I was planning to do something similar in some uncertain future, butfilling tables with voice formants.PC.___ D�couvrez une nouvelle fa�on d'obtenir des r�ponses � toutes vos questions !Profitez des connaissances, des opinions et des exp�riences des internautes sur Yahoo! Questions/R�ponses http://fr.answers.yahoo.com___PD-list@iem.at mailing listUNSUBSCRIBE and account-management - http://lists.puredata.info/listinfo/pd-list-- http://theradioproject.comhttp://perhapsidid.blogspot.com (()()()(()))()()())((())(())()((())(___())(()))___ (((000)))oOO tablemod-experiment.pd Description: Binary data ___ PD-list@iem.at mailing list UNSUBSCRIBE and account-management - http://lists.puredata.info/listinfo/pd-list
[PD] wave morphing
Hi list, I am trying to fade beetween waveshapes, doesn't find how to get an average of the morphed signal between 0 and 1, Anyone has an idea? #N canvas 0 0 454 304 10; #X obj 117 74 noise~; #N canvas 454 176 514 430 module 0; #X obj 139 23 inlet~; #X obj 176 343 outlet~; #X obj 233 71 osc~; #X obj 232 50 / 100; #X obj 197 94 ~ 0; #X obj 140 122 samphold~; #X obj 232 24 inlet; #X obj 283 23 inlet; #X obj 318 63 fade-morph 63 128; #X obj 176 234 +~; #X obj 195 194 *~ 2; #X obj 176 267 +~; #X obj 324 87 fade-morph 0 126; #X obj 334 114 fade-morph -63 126; #X obj 195 173 *~ 0; #X obj 177 151 *~ 0; #X obj 234 209 *~ 1; #X obj 176 298 /~ 2; #X obj 189 213 -~ 2; #X obj 235 239 +~ 3; #X connect 0 0 5 0; #X connect 2 0 4 0; #X connect 2 0 16 0; #X connect 3 0 2 0; #X connect 4 0 5 1; #X connect 4 0 14 0; #X connect 5 0 15 0; #X connect 6 0 3 0; #X connect 7 0 8 0; #X connect 7 0 12 0; #X connect 7 0 13 0; #X connect 8 0 15 1; #X connect 9 0 11 0; #X connect 10 0 18 0; #X connect 11 0 17 0; #X connect 12 0 14 1; #X connect 13 0 16 1; #X connect 14 0 10 0; #X connect 15 0 9 0; #X connect 16 0 19 0; #X connect 17 0 1 0; #X connect 18 0 9 1; #X connect 19 0 11 1; #X restore 141 137 pd module; #X obj 243 102 hsl 128 15 0 127 0 0 empty empty empty -2 -6 0 8 -262144 -1 -1 0 1; #X floatatom 235 64 5 0 0 0 - - -; #X floatatom 132 272 5 0 0 0 - - -; #X obj 133 178 unsig~ 50; #X text 121 13 waveshape morphing; #X connect 0 0 1 0; #X connect 1 0 5 0; #X connect 2 0 1 2; #X connect 3 0 1 1; #X connect 5 0 4 0; #N canvas 0 0 339 233 10; #N canvas 29 318 179 311 fade-morph 0; #X obj 42 8 inlet; #X obj 41 267 outlet; #X obj 42 114 change; #X obj 41 245 /; #X obj 42 157 -; #X obj 109 50 \$2; #X obj 127 118 / 2; #X obj 42 178 abs; #X obj 42 200 -; #X obj 42 222 abs; #X obj 42 135 - \$1; #X obj 42 30 t a b; #X obj 80 72 + \$1; #X obj 42 91 clip \$1; #X connect 0 0 11 0; #X connect 2 0 10 0; #X connect 3 0 1 0; #X connect 4 0 7 0; #X connect 5 0 6 0; #X connect 5 0 12 0; #X connect 6 0 4 1; #X connect 6 0 3 1; #X connect 6 0 8 1; #X connect 7 0 8 0; #X connect 8 0 9 0; #X connect 9 0 3 0; #X connect 10 0 4 0; #X connect 11 0 13 0; #X connect 11 1 5 0; #X connect 12 0 13 2; #X connect 13 0 2 0; #X restore 163 121 pd fade-morph; #X text 161 47 \$2 = ending fade out; #X text 161 26 \$1 = begining fade in; #X text 148 66 \$2/2 = top level; #X text 86 44 inlet; #X text 72 189 outlet = value between 0 and 1; #X obj 163 94 inlet; #X obj 163 145 outlet; #X connect 0 0 7 0; #X connect 6 0 0 0; ___ PD-list@iem.at mailing list UNSUBSCRIBE and account-management - http://lists.puredata.info/listinfo/pd-list
Re: [PD] wave morphing
Patco a écrit : Hi list, I am trying to fade beetween waveshapes, doesn't find how to get an average of the morphed signal between 0 and 1, Anyway, I've resolved this, it's attached #N canvas 0 0 793 557 10; #X obj 115 76 noise~; #X obj 301 79 hsl 128 15 0 127 0 0 empty empty WaveShape -2 -6 0 8 -262144 -1 -1 3800 1; #X text 121 13 waveshape morphing; #X obj 192 59 nbx 5 14 -1e+037 1e+037 0 1 empty empty Frequency 0 -6 0 10 -262144 -1 -1 2000 256; #N canvas 0 0 450 300 graph123 0; #X array \$0-lfo1 1 float 2; #X coords 0 1 1 -1 100 50 1; #X restore 491 18 graph; #X obj 219 170 tabwrite~ \$0-lfo1; #X obj 299 97 t b a; #X obj 192 99 t b a; #X text 389 103 the square signal is between 0 - 1 \, the sin and random signal is between -1 and 1; #N canvas 454 176 526 442 module1 0; #X obj 139 23 inlet~; #X obj 176 343 outlet~; #X obj 233 71 osc~; #X obj 232 50 / 100; #X obj 239 93 ~ 0; #X obj 140 122 samphold~; #X obj 232 24 inlet; #X obj 283 23 inlet; #X obj 315 55 fade-morph 63 128; #X obj 176 234 +~; #X obj 176 267 +~; #X obj 324 106 fade-morph 0 126; #X obj 325 157 fade-morph -63 126; #X obj 195 173 *~ 0; #X obj 177 151 *~ 0; #X obj 234 209 *~ 1; #X text 327 36 Random; #X text 336 87 Square; #X text 335 136 Sinus; #X connect 0 0 5 0; #X connect 2 0 4 0; #X connect 2 0 15 0; #X connect 3 0 2 0; #X connect 4 0 5 1; #X connect 4 0 13 0; #X connect 5 0 14 0; #X connect 6 0 3 0; #X connect 7 0 8 0; #X connect 7 0 11 0; #X connect 7 0 12 0; #X connect 8 0 14 1; #X connect 9 0 10 0; #X connect 10 0 1 0; #X connect 11 0 13 1; #X connect 12 0 15 1; #X connect 13 0 9 1; #X connect 14 0 9 0; #X connect 15 0 10 1; #X restore 141 137 pd module1; #N canvas 508 62 444 466 module2 0; #X obj 139 23 inlet~; #X obj 176 343 outlet~; #X obj 233 71 osc~; #X obj 232 50 / 100; #X obj 140 122 samphold~; #X obj 232 24 inlet; #X obj 283 23 inlet; #X obj 315 55 fade-morph 63 128; #X obj 176 234 +~; #X obj 176 267 +~; #X obj 324 106 fade-morph 0 126; #X obj 325 157 fade-morph -63 126; #X obj 216 97 *~ 0; #X obj 177 151 *~ 0; #X obj 234 209 *~ 1; #X text 327 36 Random; #X text 336 87 Square; #X text 335 136 Sinus; #X obj 252 264 t b; #X obj 248 295 tabwrite~ \$0-lfo2-square; #X obj 218 162 -~; #X obj 216 120 ~ 0; #X obj 247 120 ~ 0; #X connect 0 0 4 0; #X connect 2 0 14 0; #X connect 2 0 12 0; #X connect 3 0 2 0; #X connect 4 0 13 0; #X connect 5 0 3 0; #X connect 6 0 7 0; #X connect 6 0 10 0; #X connect 6 0 11 0; #X connect 6 0 18 0; #X connect 7 0 13 1; #X connect 8 0 9 0; #X connect 9 0 1 0; #X connect 10 0 12 1; #X connect 11 0 14 1; #X connect 12 0 21 0; #X connect 12 0 22 0; #X connect 13 0 8 0; #X connect 14 0 9 1; #X connect 18 0 19 0; #X connect 20 0 8 1; #X connect 20 0 19 0; #X connect 21 0 4 1; #X connect 21 0 20 0; #X connect 22 0 20 1; #X restore 116 268 pd module2; #X floatatom 136 243 5 0 0 0 - - -; #X obj 178 241 hsl 128 15 0 127 0 0 empty empty WaveShape -2 -6 0 8 -262144 -1 -1 0 1; #N canvas 0 0 450 300 graph123 0; #X array \$0-lfo2 1 float 2; #X coords 0 1 1 -1 100 50 1; #X restore 337 236 graph; #X obj 200 297 tabwrite~ \$0-lfo2; #X obj 184 268 t b; #X obj 214 271 t b; #X msg 283 22 63; #X msg 285 3 0; #X msg 283 43 127; #X text 321 5 sin; #X text 316 23 square; #X text 315 41 random; #N canvas 0 0 450 300 graph123 0; #X array \$0-lfo2-square 1 float 2; #X coords 0 1 1 -1 100 50 1; #X restore 475 240 graph; #X floatatom 105 387 5 0 0 0 - - -; #X floatatom 84 465 5 0 0 0 - - -; #X obj 84 442 unsig~ 50; #X obj 147 385 hsl 128 15 0 127 0 0 empty empty WaveShape -2 -6 0 8 -262144 -1 -1 6300 1; #N canvas 0 0 450 300 graph123 0; #X array \$0-lfo3 1 float 2; #X coords 0 1 1 -1 100 50 1; #X restore 306 380 graph; #X obj 153 412 t b; #X obj 183 415 t b; #N canvas 0 0 450 300 graph123 0; #X array \$0-lfo3-square 1 float 2; #X coords 0 1 1 -1 100 50 1; #X restore 444 384 graph; #X obj 169 441 tabwrite~ \$0-lfo3; #X text 42 141 wrong; #X text 43 271 wrong; #X text 27 420 right; #X obj 135 481 + 1; #X obj 135 502 / 2; #X floatatom 135 523 5 0 0 0 - - -; #X msg 114 336 63; #X msg 116 317 0; #X msg 114 357 127; #X text 179 519 mission accomplished; #N canvas 508 62 452 474 module3 0; #X obj 139 23 inlet~; #X obj 176 343 outlet~; #X obj 233 71 osc~; #X obj 232 50 / 100; #X obj 140 122 samphold~; #X obj 232 24 inlet; #X obj 283 23 inlet; #X obj 315 55 fade-morph 63 128; #X obj 176 234 +~; #X obj 176 267 +~; #X obj 324 106 fade-morph 0 126; #X obj 325 157 fade-morph -63 126; #X obj 242 160 *~ 0; #X obj 177 151 *~ 0; #X obj 234 209 *~ 1; #X text 327 36 Random; #X text 336 87 Square; #X text 335 136 Sinus; #X obj 252 264 t b; #X obj 220 144 -~; #X obj 216 120 ~ 0; #X obj 247 120 ~ 0; #X obj 248 295 tabwrite~ \$0-lfo3-square; #X connect 0 0 4 0; #X connect 2 0 14 0; #X connect 2 0 20 0; #X connect 2 0 21 0; #X connect 3 0 2 0; #X connect 4 0 13 0; #X connect 5 0 3 0; #X connect 6 0 7 0; #X connect 6 0 10 0; #X connect 6 0 11 0; #X connect 6 0 18 0; #X connect 7 0 13 1; #X connect 8 0 9 0; #X