[sharing if fun] waveform morphing

Apr 1, 2009 at 10:47pm

[sharing if fun] waveform morphing

This patch uses jit.buffer~s to mix 8 buffers into a single buffer~. I wanted to create an arbitrary mix of different waveforms for LFOs (or synthesis). This also has an example of linearly mixing between the waveforms, too.
Has anyone out there come up with better ways (i.e., less patching) to do this? It would seem there are, but this is what I came up with.

This patch uses Lror and Lmask from the Lobjects. Although I’ve attached both, you should probably just download the set
http://arts.ucsc.edu/ems/music/research/Lobjects.readme.html
Windows users will need to download the set, since I’m too lazy to start up my XP box and grab those for you.
Also worth noting, the patch assumes the examples directory is in your search path, since waveforms from the examples/synths/FMsynth/lib
are used for many of the buffer~s

Pboer

– Pasted Max Patch, click to expand. –
#43148
Apr 2, 2009 at 5:01am

How exactly does one read this? I checked out the lookup~ help file and all, and I’ve had success using the g17 Cheby stuff with peek~/lookup~ from the Percolate pack. Here’s a patch that doesn’t work, though.

– Pasted Max Patch, click to expand. –

I tried it with a cycle~ instead of a phasor~ and that also didn’t work–everything sounded like a sinusoid, whereas phasor~ even makes a sine wave (cosine, I think?) sound like it has a few harmonics. Very cool, though. I promise to use it.

Andrew

#154712
Apr 2, 2009 at 5:17am

cycle~ should make it easy. but, I am noticing that, at least in my beta version of max, the buffer “interp” that cycle~ plays doesn’t update, even though I alter its contents (and the display window for “interp” updates).

– Pasted Max Patch, click to expand. –
#154713
Apr 2, 2009 at 6:39am

Right, but even when I toggle dac~ to re-load the accurate waveform, I end up with a sine wave (if I have that full-power) that also has some higher harmonics, and they sound like just a blip every 512 samples. But when I begin with a sine wave-loaded buffer, then decrease the volume of “sine” on the multislider I get a pure sine wave, and “interp” reads a flat line.

It seems that the buffer takes the waveform articulated in the multislider when you START the dac and adds that to the waveform that is currently visible in the multislider. This would be the only coherent explanation for why booting the dac with sine full (which gives a sine wave buffer to cycle~) gives a wave with harmonics, while then after decreasing the sine slider to 0 (giving a flat-0 buffer) causes a sine wave output (as 0 + sine = pure sine). This is from about 10-15 minutes of button-mashing, and I’ve never used Jitter, so who knows if there’s not a stupid mistake in there.

I’m on Max 5.0.6, latest public stable release
OSX.5.6, MacBook Pro 2.4 Ghz
PreSonus FireStudio through some nice speakers

Andrew

#154714
Apr 2, 2009 at 3:39pm

That’s all very odd.

Quote:
But when I begin with a sine wave-loaded buffer, then decrease the volume of “sine” on the multislider I get a pure sine wave, and “interp” reads a flat line.

This doesn’t happen for me! What do you see in the o-scope? What do you see in the interp window? Does this match what you hear?

P.

#154715
Apr 2, 2009 at 10:13pm

hmmm…well, this could be a source of a problem on my end, using cycle~. I got this response from c74:
Quote:Maybe we should document this, but you’ve never been able to use cycle~ for dynamic waveform interpolation, because, for optimization purposes, its wavetable is only updated when you turn on the audio. Use wave~ instead.

So here it is with wave~:

– Pasted Max Patch, click to expand. –
#154716
Apr 2, 2009 at 11:14pm

Fantastic. Yeah, I didn’t realize how it would just sound like multiple waveforms combined, and how “noise” and “rand” would actually sound like a tone because of repeated playing of the same wavetable. I guess I should learn something about waves or whatever. Also, the artifacts are fixed in the sine wave. Thanks for your help.

Andrew

#154717

You must be logged in to reply to this topic.