morphing waveforms


    Apr 10 2007 | 9:17 pm
    I found a morphing waveform patch a while back based on 2d wave on the list but it sounds like crap when you FM it so im trying to make a new one from the built in waves such as saw~ and rect~, now Im trying to figure out how to have 1 number that mixes them all or a way to turn up "sineness, sawness" without signal exceeding 1. and -1. and keeping it relatively normalized. Is there a way to either make the 2d wave one sound decent with FM or do this distribution thing? Im leaning more to the built in waveforms cause I like the fact they are bandlimited.
    Heres the patch so far

    • Apr 10 2007 | 9:51 pm
      It sounds like you want a constant-power crossfade between two source waveforms. This is achieved by roughly:
      Total = wave1 * log(faderVal) + wave2 * log (1 - faderVal)
      do you happen to have the source for the original morphing waveform patch? I'll search the archives for it, because it sounds neato :)
      _Mark
      On Apr 10, 2007, at 2:17 PM, Nicholas C. Raftis III wrote:
      > > I found a morphing waveform patch a while back based on 2d wave on > the list but it sounds like crap when you FM it so im trying to make > a new one from the built in waves such as saw~ and rect~, now Im > trying to figure out how to have 1 number that mixes them all or a > way to turn up "sineness, sawness" without signal exceeding 1. and > -1. and keeping it relatively normalized. Is there a way to either > make the 2d wave one sound decent with FM or do this distribution > thing? Im leaning more to the built in waveforms cause I like the > fact they are bandlimited. > > > Heres the patch so far > > #P window setfont "Sans Serif" 9.; > #P flonum 214 61 35 9 0 0 0 3 0 0 0 221 221 221 222 222 222 0 0 0; > #P flonum 106 191 35 9 0 0 0 3 0 0 0 221 221 221 222 222 222 0 0 0; > #P flonum 170 187 35 9 0 0 0 3 0 0 0 221 221 221 222 222 222 0 0 0; > #P flonum 226 186 35 9 0 0 0 3 0 0 0 221 221 221 222 222 222 0 0 0; > #P flonum 293 185 35 9 0 0 0 3 0 0 0 221 221 221 222 222 222 0 0 0; > #P user ezdac~ 374 99 418 132 0; > #P window linecount 1; > #P newex 262 206 35 196617 *~ 1.; > #P newex 204 209 35 196617 *~ 1.; > #P newex 146 212 35 196617 *~ 1.; > #P newex 90 210 35 196617 *~ 1.; > #P user scope~ 116 248 246 378 256 3 128 -1. 1. 0 0. 0 0. 102 255 51 > 135 135 135 0; > #P newex 226 105 55 196617 phasor~ 2; > #P newex 263 167 40 196617 cycle~; > #P newex 205 163 40 196617 rect~; > #P newex 146 166 40 196617 tri~; > #P newex 93 166 34 196617 saw~; > #P connect 0 0 6 0; > #P connect 15 0 0 0; > #P connect 14 0 6 1; > #P connect 9 0 5 0; > #P connect 8 0 5 0; > #P connect 7 0 5 0; > #P connect 6 0 5 0; > #P connect 4 0 0 1; > #P connect 15 0 1 0; > #P connect 1 0 7 0; > #P connect 13 0 7 1; > #P connect 4 0 1 2; > #P connect 2 0 8 0; > #P connect 15 0 2 0; > #P connect 15 0 4 0; > #P connect 12 0 8 1; > #P connect 4 0 2 2; > #P connect 3 0 9 0; > #P connect 11 0 9 1; > #P connect 4 0 3 1; > #P window clipboard copycount 16; > > -- > -=ili!ili=- www.Axiom-Crux.net -=ili!ili=-
    • Apr 10 2007 | 10:03 pm
      this works ok, but its not anti-aliasing
    • Apr 10 2007 | 11:07 pm
      how are you going to use those (very nice sounding) objects for FM synthesis? you can't drive them by phase, so the pitch of your oscillators will go haywire when you modulate them. unless thats what youre looking for.
      morphing the various waves by crossfading won't morph the harmonics properly, it'll just mix across to the new harmonics. i think. you need the peaks of a sine to shift together to form a saw wave. you can't do that by adding the waves...
    • Apr 10 2007 | 11:52 pm
      This patch was built to morph between window functions. It could easily be adapted to morph wavetables being read by a cycle, or some such other, object.
      It is currently set to read a directory of wavetables in a subdirectory of the patch called "windows".
      Note: requires jitter.
      b
      -- barry threw composition : sound : programming http://www.barrythrew.com bthrew(at)gmail(dot)com 857-544-3967
      Today, Noise is triumphant and reigns sovereign over the sensibility of men. - Luigi Russolo, The Art of Noises
    • Apr 11 2007 | 12:01 am
      Both of these are very cool, I like the phasor one but Im wondering how to band-limit things so that I don't get aliasing at high frequencies, and also if its possible to get "triangleness" :P
      Ill find the 2d wave in a minute and post it. Its really cool and does exactly what I want but sounds like crap when you freq mod it, not at all sure why.
    • Apr 11 2007 | 12:17 am
      i'm not sure how the antialiasing oscillators work. is it simply band limiting? i guess you need to know how to make a basic antialiasing oscillator first. (dont ask me!) preferably make one thats phase driven so you can be pitch stable when you modulate it
      in the meantime this patch has primitive triangleness
    • Apr 11 2007 | 12:59 am
      this is probably the one you mean. its not really morphing the oscillators though. it just crossfades between them, the transition from square to saw is a mess
      max v2;
    • Apr 11 2007 | 1:26 am
      if you look at a spectroscope when you fade from a sine to a saw in the 2dwave patch, the harmonnics all get introduced at the same time, its a straight mix. if you look at the way using kink~ to skew a phasor driven sine affects the spectroscope, it introduces the lower harmonics first, the high ones last, so it seems to actually morph the harmonics. maybe more musically useful?
    • Apr 11 2007 | 1:50 am
      for synthesis of bandlimited oscillators, read this: http://www-ccrma.stanford.edu/~stilti/papers/blit.pdf
      or for even more in depth (more than just oscillators): http://www-ccrma.stanford.edu/~stilti/papers/TimStilsonPhDThesis2006.pdf
      mark
      On 4/10/07, Nicholas C. Raftis III wrote: > > Both of these are very cool, I like the phasor one but Im wondering how to band-limit things so that I don't get aliasing at high frequencies, and also if its possible to get "triangleness" :P > > Ill find the 2d wave in a minute and post it. Its really cool and does exactly what I want but sounds like crap when you freq mod it, not at all sure why. > > -- > -=ili!ili=- www.Axiom-Crux.net -=ili!ili=- >
    • Apr 11 2007 | 1:58 am
      BIN you rule! Now I just need to find a way to map this all to one slider, or not, shooot this is a wicked waveshaper! Throw in some chebyshev and you got yourself a party!
      Sorry just watched Teladaga nights hehehehe
    • Apr 11 2007 | 3:04 am
      how did you make this triangleness???? Im very confused, it looks like just another float plugged into the overdrive?
    • Apr 11 2007 | 3:59 am
      ok i get it, overdrive does waveshaping both ways, inward and outward, interesting..
      As far as this bandlimiting thing, sorry IM an art student, didn't take calcutrigonomitrie 501, so I don't really undersand these equasions or how to translate them into msp. Im getting great results with FMing this thing BIN gave, Thanks so much!!
    • Apr 11 2007 | 8:52 am
      if you could get a nice short sample feedack delay going cheaply (let me know if you do), you could make your sawness by feedback, and your square/triangleness using overdrive~ this will only work at small vs sizes, pref 4 samples or less
    • Apr 11 2007 | 10:13 pm
      FWIW, here's another way to do morphing waveforms using a 2D jitter matrix to store 8 wavetables with interpolated values. I can't remember if I published this patch somewhere yet, but whatever. For more of this kind of Jitter audio trickery, check out the Noisy Matrix article on the website.
      Andrew B.
    • Apr 13 2007 | 7:37 am
      YOu guys both rock! Good work Andrew! Bin, I think I had a dream that you ended up being the owner of this insane club around here called the 7th circuit. And then I put my foot in this flowerpot and fell through it into another dimension.. strange..
      I checked out your tunes, good work, check mine if you have the time.
      www.myspace.com/axiomcrux
    • Apr 13 2007 | 7:39 am
      man that feedback saw is strange as hell!
    • Apr 13 2007 | 9:07 am
      ha. i need someone to dream me up a new job. 7th circuit...thats something to do with neurogenetic programming... more fun stuff to try at home!
    • Apr 13 2007 | 7:48 pm
      this patch does phase distortion to create square or saw waves. the phase driven squareness is alot less CPU hungry than overdrive~ or arctan distortion.
    • Apr 13 2007 | 8:02 pm
      although the way the sine changes when you increase both sawness and squareness is kind of strange... not really like overdrive~
      CZ101 used this kind of synthesis ..supposedly most dancehall riddims use the CZ101 bass, or sample it......
    • Apr 14 2007 | 1:46 am
      Damn that one is pimp too, when you increase them both it makes it like duty cycle for the square!!!!!! wicked!
    • Apr 14 2007 | 2:15 am
      do you think bandlimiting using low pass filter at half the sample rate would work??? Im gonna do some tests..
    • Apr 14 2007 | 2:49 am
      Man freq and phase modding that one is nuts. sounds like circuit bent!!!
    • Apr 14 2007 | 10:38 am
      if you want to FM the patch i posted you'll have to add a pong~ 1 0 1 before the sqaw object to wrap the phase between 0 and 1
    • Apr 14 2007 | 9:00 pm
      cant I just FM the phaser?
    • Apr 14 2007 | 9:29 pm
      yes you could, i didnt think of that.. as long as the input to that object is between 0 and 1, it doesnt wrap phase (like cycle~ does) with out a pong~ in there
    • Apr 14 2007 | 9:56 pm
      heres another CZ101 type phase distortion, i think it was supposed to sound like a resonant filter
    • Apr 14 2007 | 10:39 pm
      bin ray skrev: > heres another CZ101 type phase distortion, i think it was supposed to sound like a resonant filter > ...
      Haha, that one's great - try setting the top cycle~ to 172.4 - then it's really interesting actually! Thanks a lot for uploading these, I've never bothered doing them myself, and I'm definitely getting into my own PM sounds now.
      Andreas.
    • Apr 14 2007 | 11:24 pm
      Damn Bin your a never-ending barrel of phase driven treats!!! this tread rules!! thanks BIN and Andrew!
      Im going to experiment and try and make a new one :D
    • Mar 18 2008 | 11:53 pm
      This thread is amazing.
    • Mar 23 2011 | 3:58 pm
      I implemented Barry Threw's suggestion and it is exactly what I have been looking for. I have some bugs with it though. I wanted to use larger samples so I increased the buffer sizes and the size of the dimension list in the jit.matrix object (I am not familiar with jitter). This works fine as long as you don't change samples too quickly, anything over a 1 second gap between sample selections causes a crash. I have modified the original patch slightly so that you select which sample to load and then send a bang to zl reg to load it. While this works I sometimes have to send it 2 bangs to get the bottom buffer to recognize the current sample. So while it works, sort of, I perform live a lot and would like to make this run smoothly without fear of crashing. Any suggestions