sinesum function a la PureData
hi
is there any way to add sinewaves together and write them into an array (buffer) in msp, like in puredata? (explanation here -- http://en.flossmanuals.net/PureData/GeneratingWaveforms)
i was surprised i couldn't find anything similar in max/msp! i'm using v.4..
any help would be greatly appreciated
thank you
.klive
My "Sine Wave Explorer" project I did awhile back does just this, plus some other goodies. Look for it a ways down on this page:
Max 5 only though, sorry...
No doubt there are many many ways to do add sines, but uzi--> peek~ certainly works if you're making the sines with math expressions, and seems very fast. But if you want to just grab what's coming out of some cycle~ objects (like if you've got some cool modulations going on), look to poke~, count~, etc. to sample and write-to-buffer~.
You'll need to experiment with the timing of when you start and stop your sampling, and choose the exact buffer~ size beforehand. sampstoms~ will help here, since you specify the buffer~ size in msec and you'll want exact control over the number of samples.
Sorry, again Max 5, but here's a patch that is equivalent to the sumsine message.
Hey Chris,
Thanks for your sinesum patcher. I've been playing around with it and comparing the output to the sinesum message in Pd. I was never great at math--I'm a drummer, you know--so I'm not completely clear on the formula. However, sometimes, when I put the exact same values into your patcher and into Pd, I get different results, and at other times, they are identical. I'm attaching a couple of screen grabs that illustrate what I mean. The Example1 one is with the numbers you use in your example above (512 0.25 0 0.25 0). Example2 is with (512 1 1 1 1 1 1 1)--it has been normalized in both versions of Example2. As you see, the second examples look identical, but the first examples look quite different. Quite honestly, I have no idea which one is correct. Can you help me understand a bit better how this works? Thanks so much.
-Brian
Nevermind, I found the problem. The [bondo] object was carrying over previous values from each pass. That's why the (512 1 1 1 1 1 1 1) worked, because all the values were the same. I took bondo out and it works perfectly! Again, thanks for your work on that, it was really educational for me.