wrap~ (Was: Re: [PD] wave morphing)

2007-01-17 Thread Steffen


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

2007-01-15 Thread Frank Barknecht
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

2007-01-15 Thread Roman Haefeli
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

2007-01-15 Thread Steffen


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

2007-01-14 Thread Malte Steiner

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

2007-01-14 Thread Patco

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

2006-12-30 Thread Malte Steiner
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

2006-12-29 Thread Kyle Klipowicz

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

2006-12-29 Thread David Powers

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

2006-12-29 Thread padawan12

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

2006-12-28 Thread Patco

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

2006-12-28 Thread Patco

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