Flipping [phasor~] possible? (Read EDIT)
So, when I was writing my TB-303 emulator synth, I’ve done some more research on the square wave of it…
I’ve seen many different ideas on the square wave. I’ve heard about the waveshaping that I mentioned in an earlier thread, but there is another common thought:
The "square" wave is generated by one saw wave, flipped every-other cycle and divided by 2, to keep it between -1 and 1. I want to try doing this, so I’ve decided that I want to try to take 2 [phasor~] objects, one normal, one upside down, and gate the two so that one will shut off at it’s 0 amplitude and the other will start at the same time. The problem is that I don’t know how to invert the wave.
The thought has crossed my mind of simply taking a [buffer~] object, loading it with this sort of modified saw wave, and driving that with [mtof], but I see this as no challenge and, if it’s possible, I want to manually create the wave by using the description above. The whole reason I love Max is because it gives me challenges to solve. However, I need guidance with most of these challenges.
EDIT: My other, probably better idea, is to use [tri~] in the same way as I was going to use [phasor~]. I’ve tried gating the signals, but I don’t know how to gate them to every-other cycle. This is my new problem.
invert = abs(x-1)
----------begin_max5_patcher---------- 433.3ocuT00SCCBE841eEMDePS5V.V2G5a96vXLTJaikNnAnypKa+1s8RarS mKl4buTJWtbOm6gCrML.kpqDVTzCQOEEDrMLH.B0DHncd.ZMqhmyrPZHKWWH 1ih8KUXDVgxwbRs5Eif67khljLDGGQmNqY.29I541cktfqy0Fet3gio2mPnw G8ORusUvb7kR0hC.h1CHxX.poI81jpbsTkKb.6osAkYPunSWMXTWqXzkpLAr .tMDmky40gc82acA0kttJhaBtKLr4S7YIgWbwfjL4bECB85qFJwq0P2gqSTA 0GIpJL6iXo1auYNY.Y3ccYLWqbV46hlrHMMrOrmEt2JDdw.YkKTrbzIEL5Hv 8LZJHXXuWB+SBF46BFsOqTr0.3nGMxZjOpBQtbJTwRlUWqQDLF++INDBLLK4 zZywLS+EsAPAkKUe80IfoMwOTvr5RCuq6ZQO5StlIrNoBdlpeNzCRZoLKSn5 a4yjVVZd60fidxcIoy0iMzeAaFclrwexwJJ1HL11RBDo1Tux+N2jXXpT4mB2 qPFwFYW9faBwL0dRWsgrz38NUylfBavYW3G.LMchzA -----------end_max5_patcher-----------
depending on what you exactly want to achieve you might wanna add a multiply by -1 to flip to the negative side.
I get a "No such object" error for your [expr~] object.
EDIT: I understand what you were doing now, but I can’t figure out how to do it. I tried using [snapshot~] to change [phasor~] into numbers. Then, I used the [expr] object with your expression. After that, I put a [line~] object to try and change those numbers to a signal. This didn’t work. Nonetheless, I’ve run into a new problem. Please read my EDT in the original post.
sorry i didn’t realize [expr~] is an external: http://www.maxobjects.com/?v=objects&id_objet=3882&PHPSESSID=54afd061e69f4ae890b938aa7359baee
this does the same with standard objects:
----------begin_max5_patcher---------- 567.3ocyVtsiaBCDF9Z3o.Y0KZkRhvly8t9bTUUY.uIdEwFY6rktq17rWe.R HsoaIaNzbic7vfme9hme3EeOPIuiHAAeN3qAddu364YCYB30u1CrF2U0fk1z .jmqwUaAybWpEqpVQYK+tfTobaSTNbQ3rfhbyXbxvXv25uE1l0TVCQY2NTeP Zscy4kONOGrOQ9F0Plglfu56aFlMQsJq3sj8ZUPjDlBqnb1H8hJhLZDkfLSg 8C6ja4xJdCW3xMbQBpHFhlczeAGcaGALnBnqPYlIXhsTYwm.ZxFdTD7MrZh8 Bg8gpvMUU5vpw264iPF4G5JOTWEoyt+.bobGWefyTR5yDyEfFH5B6Jr5msD2 iOPRWxvMf2DQ4VnffoloHKnPg+MBA+SBkNVTL7ZasAeQP0E9nLAd4Xx7s5S. WOn.ysGPiRdanbjiMI2BnLsds3Xq5yxux8ZYmaqVzsuU6PBdoYADk7dYADc2 36P5ZEaCztOe7CO.mCW7oqP+l6EA8dPvPzIaBg9OZB0tBK4ZDACCCuZrovNl GexNQvygL1p.Znre+CVr5zD+PbI4aDUCOa8ubHXuVqIREkYcnFkS1A4rhVWS XiOtWSk3xl9Vfi921TUCbBpI4enl0z5VNko5ARJbQh9Hq9jqdBkWra09xbwj exDje5cELM1X2Qx41oFzDTSz6TMtlRba6SDgreKsBQ6V8n60WoyrKoL2RqgI PPdhNju0n.fEZyFk1oYivYKzkmB7M04U+eQ0O7M5 -----------end_max5_patcher-----------
From your edits I get the feeling your MSP knowledge is very basic. Did you do the tutorials? That should clarify a lot. For example, there’s totally no need for converting the phasor signal ‘to numbers’.
I’ve been doing the tutorials as I need them, but they are difficult for me to understand, sometimes. Maybe I just need to go over them more than once. I’ll give them a look again. Thanks.
the help files and the reference pdf/html are most of the time much more helpful than the tutorial patches could ever be.
btw, i would build simple oscillators around cycle~ or wave~, and not phasor~.
usign max objects and try things with numbers to find your way for the audio signal layout is a good idea, even experienced users do that sometimes. with numbers it is much better to have visual control over whats happening.
sure, but you probably don’t wanna model an analog synth through the message scheduler instead of the DSP ;)
I have successfully completed the synth that I was working on. It doesn’t model the actual wave very well, as it uses [phasor~] as the original oscillator, but it seems to model it better than most of the TB-303 emulators that I’ve seen. Most people seem to do no research on the synth and, unfortunately, use the antialiased [rect~] wave for the square. While this SOMEWHAT does the job, it doesn’t do it in the same way that the original accomplishes it’s "square" wave. If anyone would care to have a look at my synth and give me some feedback on what I should add etc., you can download it here: http://www.maxforlive.com/library/device/1723/tb-305
Thanks for any feedback and all the help you guys have given me! =) Hopefully, as time goes on, I won’t have to ask for so much help with my patches.
Certainly a nice analog-modeling exercise. Though to say it’s better than most emulators is a bit overarching, no? Or are you just looking at M4L emulators? Though not an expert on 303 matters I think a lot is to be gained in the filter. As Wetterberg commented on maxforlive.com, there’s the plopping and to me it doesn’t sound quite right.
Isn’t the 303 filter 3-pole (18dB/oct)? If you’re so much in recreating the true analog waveform then you should also be after the true analog filter response hé.
An awesome emulator is http://d16.pl/phoscyon
I read somewhere (can’t remember where) that the filter is a 4-pole lowpass. I may be wrong, so I’ll look into it some more. That site you directed me to seems to think otherwise, so I think I’ll change that. Also, I never really meant that my wave emulation was "better" than anyone else’s. I just noticed that most of the people posting their devices on maxforlive.com were posting true square waves, rather than even attempting to recreate what the original actually does. So, yes, I was only looking at M4L emulators.
I am, however, very concerned with that "thump" on the release phase of the filter envelope. I’ve searched for ways to solve the problem, but I haven’t found anything. At first, I figured that I would make the filter’s [adsr~] signal never go to 0, but that proved to create more problems than it solved. One question I have about this is the recreation of this bug. Under how many different circumstances will it occur and what are these circumstances? The only one I’ve found/noticed is this:
When the resonance is high and the amplitude envelope’s release is greater than that of the filter’s envelope release, it causes the filter to quickly sweep to 0 and thus creates an annoying "thump".
I think what I’m going to do is use the amplitude envelope’s release a "global" release as a quick-fix. Hopefully, I’ll be able to fix it so that both will be fully functional, but until then, I want to release a synth with as few bugs as possible.
EDIT: Wikipedia seems to suggest that it’s a 4-pole filter. This is turning out to be a more confusing project than I originally thought. I’m probably going to stick with the 4-pole, lowpass filter, because I can get fully-interactive frequency and resonance controls. I haven’t quite figured out a method to do the same with a 3-pole filter. I’ve tried using [filterdesign], but that doesn’t allow me to adjust the resonance. I’ve also used [onepole~] fed into [biquad~] to recreate a 3-pole filter, but the resonance control isn’t fully adjustable this way. If there’s any way I can recreate a 3-pole filter with fully interactive frequency and resonance controls, please, let me know. Before you ask, yes, I have done research on doing this. I’ve used the object explorer in Max, looked at references and help files, and read tutorials. I can’t seem to find this information anywhere.
From what I read, design wise it’s indeed 4-pole but with 1 detuned pole to avoid self-oscillation, which also makes it sound more like a 3-pole filter.
Thing is, biquad, onepole, etc are all specific filter designs. The 303′s diode ladder filter is another one. There is not 1 universal lo-pass filter. The challenge here is to find/develop a digital filter model that matches the 303′s sonically. I’m not enough of an MSP/DSP-ninja to advise you on that…
Oli Larkin has posted a diode ladder model. I don’t know offhand if it has the detuned pole however, but it could be modified.
Peter, have you got a link to that model? I noticed that you mentioned it in the comments of the maxforlive.com "Device Details" screen, and I’ve been looking around, but I can’t seem to find it anywhere. I’ll keep looking, but unless this forum is set up in some weird way, I’ve looked everywhere I should have.
EDIT: After re-searching the forums, I think I’ve found it. The only problem is that I don’t have [gen~], so I can’t modify that code. Is there any way I could re-write the modified bit of code elsewhere and use it in [gen~] that way? Otherwise, I’m afraid someone might have to describe the whole idea of how to implement this kind of filter using, say, [filterdesign]. Although, I’m not entirely sure how to change the frequency in real-time with this, nor can I figure out how to change the resonance at all.
Just to make sure, these are the posts that you’re talking about, right?
Yeah, those are the ones. You could write it as a C/C++ external, but gen~ is way easier.
Try it out and see how it sounds; my recollection is that it had a nice nasty edge to it. I think Ollie’s just doing some of the filter calculations at control rate (in expr) to be more efficient, but you could rewrite them using MSP objects.
Making a square geometrically is a bad idea unless you like aliasing artefacts…. The only way to get a ‘clean’ digital square is by summing sines…
You….. have…… made a 303 ? …… for max ? Speechless.
You my friend are my favorite person in this forum as of now (;
just a quick question – I am unfamiliar with amxd files and dont use live – will it work as a normal max msp object ?
You can also make alias-suppressing oscillators using other algorithms. Send a sine wave through a *~ into tanh~ and you’ll have a bandlimited square wave, depending on the multiply value which scales inverse to the frequency. (This was in an ICMC paper on distortion synthesis a few years back IIRC)
With a little trickery, you can get PWM and it will also accommodate FM!
>You….. have…… made a 303 ? …… for max ? Speechless.
>You my friend are my favorite person in this forum as of now (;
>just a quick question – I am unfamiliar with amxd files and dont use live – will it work as a >normal max msp object ?
By replacing the Live objects for regular Max/MSP objects, I don’t see why it wouldn’t work with the full version of Max. It isn’t the greatest representation of it, but I did my best with everything. The only thing that it doesn’t have that the real thing does have is an "Env Amount" knob, but I’m sure someone could let you know how to do that.
Here is the main patch:
----------begin_max5_patcher---------- 4720.3oc6cs0jaaaE94syz+CH5kLSxZUhKjTrOU2Zm3chs2VamloylLdnDgj XLEICI0tdalt+1KtPJQpkTKjDuIG5wqtPABdvG.N.muyA.+9e9OcwnoAelFO B7WA2.t3hemckKDWiekKxtvEiVY+4Yd1whDNxmdWvzeczko+VB8yIhqGr5yi mErJ7gM+jqi7Gl9qOCs4h9qW456QSDYFJ6pyC7Shc+uT9EgZi0xk5f0IYImj cY40RtOjJk8QwtK7s8FcY9O44Fmr4cvuj+Q4auRbmiddjqsG3uG34rQ.CsSl sz0ewGinyRjYOAZxDIfADIdyf+JbxXMvuHtm+2e9Owem81kmLJFBd9pvW5ea YfnArbTDeXnH7oPwSBqlfLFqeIff04uYnsEqJbSznTzICdXOLWO5sznX2.+7 h4EirCCyc8KxeSbT8WCD4kwkaulqu7ZvsWKhdqaVVns8x1QrBPBS5WGIKke1 fLJ8W4UnYxv1BHFyKRlhFAFDQ4iLQKWAjU2uvKX1mnNEdViBBo9t9gQzXpeh cxtxxHG5b60dIerPsHZb4IXt8LZ02dw5rQaRyhHWm.etfT7d4WO6QdC.pKpz zKTlDIw2NrraOlUbVGO0NhCwS8n46ZyZaGD3U721V0x5kX66txNgl3JEYj11 70cUXjqeRwGF02lkMKimEE34UL2j+zsk8SNrp+Yz6bcRVJxtBvJ6FbCypPFs EtbbWPiS14hI1Kh24REzhVn4Yd8.E+g8pOnnNAam3nGXhr7+ZX1KERXNUD3B +PAsD54+kJzTrGctpq2U721VNJnGoJcI5RsGXHWUhEdG0tWrU0aVu0FA9Ykr GpBuISpFvgGGfCUAvqS3US7FCj6F38aXMmQ5UAvv8zhF0D.7bu.6j5AeMv71 sHrX.QrYGguIQ19wdLMrfUwfX6UgdLcUU0bF0xMmqUfVaB+MnbVZMDRuhFGa ufVNTCqVwLxpkaGWmHKbBQnh.I9hQq2Dl0kzYps+hp.W81tYqPXpS.VW7ltd WMDmmqCsxA41C5hOOFiCYJl7.wnAwWAnTYKz8LLVsNTUkPfzREjd1qEuMlg6 qn9oS0skgFitCZLM62PiUC.MOMpPz6ZTQJzUAKFZJptuHrnoT+DrN7TK24rZ 1y0uRKCEh.OAUfHwAqilkUqk0b.ri7vLdMw0eCaB2rwLP.pXBW553ric6RSb i41LKopP85wFV1I8KY2PUYG0+vcrpxN2T1cSYWK7HkAdqdmvWFdVcK9dlrqL vC6eBO9P5s1uDcjxZII8PgWUYmO9cOS1gGTiFXsI6Y1gr0UCihsuk57Q1ihM wjOZmjD4NcchbRDEbWxo6M.Eb3vAwLd4Rx9jfJexK7BlZ6k5onM2cYjvuA+Z .Ww8ctdIznJ7FmtVs3Syl0abVPhzvWAE5FnAuwM3MtAuwcZVki6DixgHYOYR e0pbTSZTNB0SonA14750gMHN.mVC2iSqMGbZcq5zZn0fSqaTmVilL3z51yo0 3AmV2PNsFiGbZci4zZ7jAmV2fNslX7GHuV2TdbxTY5HM5ebXab9xCLVceGzC 4eWYtTw8PjWcWNM470yGl8N+TdPhN47TzEZj5WvNZxAI7v9kSarNjFM8LGNo rCVqWOaO3vot2gSwgLjNJHdVP314uxZh3G3ELi8Wjr5mMGPKBDNgU8OFBwlH cwm3efO66BNwYG2XrwoRSChbjN2Yi6mlsN5V5w8X3h3J1eyWbb2etomaUnbu zMWFJ4zI+Kaygx8z1ziTdVYG8IZTg6EqAsLf76.mdGZiIZXKDZOPdtYtiLmH bEkX96ZhOaRdDFRc1ol1f+OS9CyvZB6ww+jIzzfXtqHyt8YKiBVUnQ+HW+DZ zs1B2rnu4pgT6OsKvps4EXIh0wgEp5Qyb9xLJXsuSQexkICEZLvdhapM00Ml XfEfjl4DBdGovKXw7H5uUPDJzRMs7ajVDdLHTVrPZYN1jUxM0j17hD2UAOLl 1I6HaFwqhdTORKVoCR32zDV9nIJ8Z5ZVSRu6Z2W2b9Lgk4kaLrg8x8NTWdLN 4FhSsSVxYojvmSa4454dKcrStgNFcq81gEdisq+nmT2adBgMxI+Qrrg0a8iR +iV3VJkDnpT0fSWbsLsL7VnRGAQLqtiIp5NlW93Jh8.zPguMJ6AJmKwlIQru oSvzVslFLujfHXKDEuLHJoTXuPx7B7W7zoZsuaRbx863z6B4iq+m34SbkoXE qUxiHJJ2u6xdFtR0v2HRTtItkKYYP+9xi7sO1FBDMW3t7MOvzsT5Z2+bHPWR Wh95PqZSGv9zUt02OEbrld+WYokkzUwl5k5fm5Dn1mSbJLFi0n8q.7Tgs5Aw HhYy8XO0zPwb1anwkhVljZoQlVMDUYVhYTMwbHpxFhprgnJ6jbl029.GUFeD gYT0NhE03NyRwf0PF2ooKrJs1e0Wh5jH1aRmu3B2aDr7vwrpCQmIgGjDuezz .aMWSS8cd.7rm8L4n4eGmVh1K5UzpOOPqYJhhMqtZcSa1DAaaos2ZvENci4c dk87jd+a4wo9BBEd9tRmDER34oimpYmyO33o96Jc5adHWzYWXZmnyGpeLLIk NlecBTu7yIQ1O2wwMw8VZY.1jZgICj56ykmDxg0PiQBlbEflodMvrw9YN+ZG mCh3bhUCPbNu31xDmaQ5Rhyyg5UyadUIp0oM+rh07P.C2dkczp.e2Yeed+Bk uUr44fZTCqbLnCk9t9KJV8zIojdoOvq2.udsCudhoVg9BiVOHVSnivTLNpbz zFhWumZQXAqjWEqy20fEBJhjgJlPa6wP391ngImwjDl09EOowA38u+to0gra kBB82M+ttg09z9d82c+t8sURdBKz9zlC7heec6uSYZ2v8P5N0TV3I8u0Uh0A I78KBOKCOOWHZVYxZ0wCj09EFYsYpZeDkCReJBRkhs71xaXMKXsT671Xie8z cIKqzowcRDVpbvDMOZwzh1vUNUDDAyb5RJILjgpFtgh3pWdK0+oXvQ+bfAmL 5bynvA9k218koLxyfoMLFnvYfBmAJbNIJbHCT3LPgy.ENCT3LPgy.ENCT3LP gy.ENCT3LPgSsPgy9iEJNuCGTvPgMaffgJcCKnECFJjbgfzUACUdXu5ngpxT MDNT6iMsc2zCKz7UugWlmE2fCOpXfJc2d3YD4pItNBHxoYTtcHc0gZiNpdy5 lxcu0wJ0UVoUL6FHDqgeAcl88iYEOVYZuKPzIRkJlncEj5mN7qCo9fjkTvOO 553Ytdd1IAQw+7HfsuC6ZR1xYeMiv7XPR.HlRA2szN4qiAKBXxNHv+qJmHcr ZDoan2KIRWVOjFeuPIMOD8FcoKW5IWOtg65Wmag.lFaazNrplGnNef57il+Q VwIN9g1i5bzgsu+epjniks2PxsgdhQGQhtW.qm4CGwwUBtG6fBDD2Gv1.eZX f2Qc1Hi5+nKTZJlgVGgtQaWiz+qJQXUOef6WaB8oGYMvIBUD5VczljNSfnt2 RUbwnCQmwmLHH41QCDIeCp0fP9NViTDy+vR2X.6+biRlxFFFbEfYNgmC60UT v5PvctIKAtLqVnQqhAAyA1.7y3pY.yEUQiY2QRjK0ArNlabxMxKyFtmAW+xk foq2jm9ecB6lXV5XCty9dtoM1N+5Z1yj+vYCKD3a6OixeFtIrrcN39f0rT5m bo3Syr41NEEbmPbX2xMxgr+Eg0SA9d2yDAZp4UuN3tPF.vrkhUOFtlkeefcc QhBiBXyeYkrTaKd5QT927CxIEyXUrrI3TzijEr1x5HNQUZqcIgGaxU0wuTts 8Dng4l1ist2Is5PuSlNFSO9bDuYNxxRK2XIKLm2Gj3ny283did3Ijqw46A3N 578zrFdPxN7LU1GNXhu3OLGLw4H5tznUdx4y11AQWLYIS3.cqCzsNP25oY44 Ue8sTvRpcjCXks+8.WGpcLyFzkbKD4Fw8g+9yvZ3uNFD+aqsYVncGSmtzLNd RYFUx5B4wM7Ly9MoAn1fX66DIVXWnqOqaVB+GbS.7th2+r.tEefY2OyikeuJ 3N9UujkeSorr6VpzpPVpYVSxrMl62sM43bJOG4VtJ9d7R6PVVwrXMlatbbPD 2vUfCcFSDc3V35x2Ig4ffnHw9KH5d4CfkLWGv7fHPLOQtybSteqwz7Tm8D3B +JZxx.GQIZN+3HfKeNtym6Ni08f+flmAaQtKVl.hY5.Y2W7dreEBOwSGY04I T6.X.TcSWgFRiWj9QVSZAqd6yaEqU56suqRNs0O+OAawhU0DoqNgU4.rPGPU Xr04LWfvzVtRP1nqNlfiodLQJH5AlwbUtLGPZm8mTkPSg9BSXWsOgRLZ.htD ynns1jPaJfwrCY.bhU+l.P8lg.vz8NW47+6i7+YoNoBZ8NhnHJenzZ0+X.Tc gmOEmy2STWs9Guw5Gjv2uXADo7ROQeXW68OJz.tuXsl.68wZMTyvZ7DLFaR3 Nsu9B35pvq3RB1jBXVKuWXTFl.szGiSwjzCbnGY7Ra0FBg6+wqutv9NnNo1Z 8TYbl+SbBlVY+IZLX08xfIGr1282VSAyiBVAV5F+W+Y+W4Fm8abltr4w7QnG 8yYQmwVtqBChRr4eJXL3pDfsWbf7d3DNkp5CbSr8coAiwM7hM6yb1sxXxh84 UwiAugMTBvIfcu9TWNQbrKkIhh7cocLHlxWcHITvyew6eWVnXDuI6jgXh3Iw OotbSV6PqXukApUVqEy9X.vCgZRBVjMSz2DfPMQKj27i+iWA9vqd9a+g2C9v 0fW7iu3kSvlfu652Ad0UrK8ie352c0yeM352B9o2c0Gt5seO34oLx9Ufq.u+ Cu65298u9+.d2K+GW+l27x29Bws8uu5Eu7ZQF9729et9suD75qu9G32KOeyx y2yyz2PdcEKhARYUXnCoBSukpvLk6rKReCgkqteS8lo9xwYwX94oqjmaI2xQ zPO1TDDcIVGulUHtILv6dV+NWe.+SgK46SPf368SVFeon+hTo.+NDWEDylSz rDu6A7LWl9J5Ioq1hKgf6i8sLyN+QSCkTAiaFMj1WQL0kNeKd80cB+IrsdaA 0mJztwqFXpVkZVAK7bqTMlhqrGrQeD7SOsCPYfuVCtxd9maFopz01SEJ9w0+ YdPAB4Nl4KXH2UyQPAckFFM94cv6xh8wbq9ufj.doaSZ9WG1JCrIVDvPM3gr tAO8yCg7yyEldPo01KD32s8zHs50A7ip.atECbatVfKKYwgTpim6pTkO04xE d+cR3Qj9Zp+r62Smj44hZc05mPZh9I3VtaBo66lTb8BjGL+bXfeJE1XgXhwO Y+oGUWWc+I7o0eBgzzpX80uhUkKmUqZGi2hL5rriWkgPl25ErVkOT55zudNu uaqCwnz3HyTSzqTG2frk7sachaAKoZ5i86SddOo7jjNumZ4HxRnROwdZ4GyS wyNHk0nlSYMq2a5YbUJEQ5UotFuW00JpxNiQpIjrG9lUVW6bTOsE42ALWuJs zHhqF1axn+nb0ZEOYnpHOKnsV63zVeXSuA0Aa0I6etKeO2.y8LuEQzJdHcEL NkdBbMUyB7jwzJGOYSr2x.dI+SHntgk3SlHchEmSr7wZaE8gH5s5Ldx1.V5l sFnBUlESWBMT7DHvmr6R04RgNLnSb5MJM2kurl0xZ+P6YeB3BbKMp2a3ydQ9 nv0HIDlo61HM37U9KB+pUJVQNjorfN7orrae8p8xZoANjLrHQFR8N6dvwWmX zFRf+adzE1IAqBbnkOMOhVsfYmbCLEZak5N0TNYaHjakqiKScPboGDp0iuTM exojkAXk9VczMUN.X5D4Zn9objr7ycfl1M90EJktVdpFjjOjhgwVJnsazvjA cOJJXlTHzVpJ.XJFgUkD7Kb3NLfUxiy1EWfxs9PKAevE9Ztm1ihVlRaAbPEF 3SUXHGdgwPNAJcMc4jmlLN6aMWYwvTkZlIOYYoajK8cpJZKA6Iq80IGZsugA QtlyEcGmnar4aMXkOVEPF09U9PUjKHp8q7UQt1sERKHW5JoecmPQrUDLk5Fu a6v1PvHJIXv1upTIASuCpJ0TQvLIsufohbQz5D4Bpjb0tsvHVJAXsuVLReUY AQswiL6qBFouJXsemRhlxCg2ABFTIAC0tBlRiG053EVIsXvNPvLU1V21U8JV oAJMZe.Cp7jWaW.Cozz82U7aCASWYiiaYASIkEn1uSIRMKca+AJQZ8z47fT1 D71UtfJodkz90jPcksnrcG.GRT1vs1U+JTo1XVseMoRxEVqOKXsbMolxs805 gBldeEwvcPiekTudRhUpCk1YKeSHQ6tUus617VIawaUt8tIdfrW9+poLegB -----------end_max5_patcher-----------
And here are the two subpatchers you’ll need:
----------begin_max5_patcher---------- 684.3oc0X1saaBCEG+ZpTeG731kEgM1jzJsK1ywT0jCwM0cACBb5xV05y97G gLJxzPS.mzaBhCF6+me93y4Pd95qBBWjukUEBtE7cPPvyJKAFaZKA0FBByna SWSqLCLTv9U9hGCmr6YR1Vow9FQAM8m.Nfu+Y7klmnF9WHn8VEax3h0LoY5f 0VuOWHq3+gYLhlF0Xz4aj0CGUa1ZS96BlU8gbgLbh8B3tlSpflYFS32J4z06 UQAUl9.Wr5GkrTocNf33ojI.3Ln9RBTIB.JZZD3Ny672quReUcYxICqOCfNo DzMkPuOJAeSJcr3AMCavyMFvDiz2LR34SeED4hO3Ye.3STznymBdACPbRnjQ lPmLdvyz3QcTa7Nc8VIhv3KU.Um9wF+fmOh.JSle+KtnSbxfjlta5TwWITX3 nYTzLMihwlbP3wLE8Ztf8BHIZpSNQFjnHzg3jph1BpX0IyKHQSJRx3enizAv huXO1YQDZtIuTBZDQzJpjAPtK8ilOxQT5XoiFRDSNID4FSXDd.XjwCcAhjN5 A5Dqk2cBW7Neq92++No4YYLgcuKbD7Tz.4oGvMUadmU2L1WannHSj4X6oVg4 zUIGn74qc0nCmVBaaW5r3LICmyLmbBNicTlBxs+VUyZoePKWrJeSYZcbScPH nw5sjUI4BpjmKZLJ82WzbTOvWtjIdk2sjWQWrlYvTT2TenElpqU.zuBC0Ggo qq6agA6Mw76Vo9+3nIKbKL8wpygvNHwzcf34sRBr2ByuDqchfNhw7+VY6kzs vZyUeHLbuDFx6BKtWDSW412BizqDr9OFKtWkjh8OwZmH3xRXvdUq73E1t1fn EEOwJq1M0VMoZo6w7R88ISr2yE16sMqEVxdhW+J1EKjVp5RSpZQaSo8i.2lf 0cdYVP0O+CPlYnCq -----------end_max5_patcher-----------
----------begin_max5_patcher---------- 766.3oc0Z1saaBCEG+5To9Nf7kSYHer4yc21qwT0Dg303JvDAjtzUs9rOvF5 xRAMu1Ti8MDww13+meXe7wl730WsBso5HqA48Iuu5sZ0icVVIs0aY0ngUnxr i4EYMxJhDreTs4Nz5gxZYGak1+vSdX+vmsy2Js1U0OBvyVEGJ4hBVq7QQFs9 8JQaC+mrdi.wGeRsqNzNVcXzrxV6C6YJkiZ32JxJPd2b5CTjUJKG84ZdWgiE sOqMeGWb62pY4sp1SBi7Igq8HTZWe6Ezq.OB1G6cirQ+55q5+s6m0WFJASio .6FSzz.+3SvT5xfIB0xwTPnUfIKezDIMxrXZ54bX6lRAT+kOvjkORBRTbYYm uEZ4PRQmEFRQ1MjRBLEixeHuf8zjQj9uXD9cgQdeopXqNoB.IwRTA8WgDSip XW.UCoCXBT0MyK1eRRk3FoVBT4jNZz6a3ovogTpajXIfAS.I5jPhfcf4bi4V Fq.EwObAhNQ.GhTKafbBwEP0voDrvq44BnZHi7ElTTWfTpbMMTxAQSFRO0I1 dGDgMwpdAShnXmXyc.gXBDQlDQTWX4N0F7RIKXZAPnyvokM9chCvI0wycI4j zQm7nSlIw62teOueEJCj770+zj7pxRlP8FD8p8UkzlzYmIXBLsyh+mtBMLVd PpKguPtX9xXJnuRuQUKTAW7hu4mry5K3Lero5Pc93HmgjE7No61xZZ4hrVdk 3jJ0mj5o0ZGe6Vl3u7ts7lrMELIlvyScs0UhN5peXkMpq9uBgg0UrV5hZbcE g0QXoVptRrTcEao5hBVpvHDaUXXKUXfsNmDL+jxyGVOivBMtvNeX8LKSRrTg AlObAArUhokv5+WfXZgoWbLy+pDzK2UyuVInWRhQlWXwV5fe8DFw7oud9KI6 gXZILv7gKNeUPqYmaZJLyqKpsBLsDl4S5AH1JvzRXusojCm4S1982ypaFdxJ IgJytqpt+9n0p64B08pilBUytmO1DUmgxpy2waY4sGpUmS5wnf9iYR1gcW9M xqLHs. -----------end_max5_patcher-----------
Also, the way I made the "square" wave in this isn’t a geometric square. It’s two saw waves flipped every-other cycle. It still has aliased artifacts, but it isn’t as bad as a geometrical square. I don’t really see why you’re thinking that I was using a geometrical square to actually generate sound, to be honest.
There is one last question I have before I can call this project concluded; Mathematically, it seems that, by flipping this saw wave every-other cycle, the "square" wave I’m generating would be an octave down from the saw wave. However, when I multiply the frequency coming into it by 2, it sounds like it’s an octave up. What I’m saying is, it sounds like it’s in-tune, but it doesn’t mathematically make sense to me. Could anyone explain?