I can't remove clicks
I couldn’t find a solution to remove clicks while using short, percussive envelope with function editor.
I learned that one can use line to make slow ramp but it doesn’t work since function outputs already line format and if I add another line than it kills the attack time significantly even if I put 10ms.
is it possible to use function with short env without click? or I should go for vst~??
thank you very much.
----------begin_max5_patcher---------- 1023.3oc2Y00aaBCE84jeEHzdZKCgu9CL6s86XZZhj3lwVhoJPzZ2z1u84Of VRaiiaf3krJUGvwAN93y8dOX90zIwyqtSTGG8gnOEMYxulNYhoKcGSZOeR7l h6Vrtn1LrX4tMyEaimY+paKZV70R4purUrnwdYP43jzYQ45FZptEwSRi9b6u 3lJYirXivbw931xh0cWqxkl9pl+s2Sxh6M75xeZFNRe0rcqPQobsnwfIzicV sqoqWnsWaWM2eqvhu3RYS7rn34ExUwQeVOneOcptYlmTvFQccwJQGDaD2Yl5 w0hlkUaJJkQuA4ff.F0vJFFJCYNl8pYH5qggfWjgPGhgFWZYwZQgKACI2vDH P2hgD5ovGP5EGeLeWSSkzUjRF2LkY5VHsq8gIduoG5gkaOT9Gbdb5Rdo3GJX 7rk10kRwebLCwYFoNP6u19pyFfPCessq2a2JpExlhlxJYeMHGrYpLqBcMO.y mwj0kqjZrNDN8lcxEZX3JzfPzPgXSihs4MRIurFI2oDwlYR2CMcOlqGIQNBI 0GMGmitYcUgISa2+sTU63KVt71JUt31pOsWOBGkhvpiTpFRBNOEHjta1rHNM AynbJn6Rc..bS+HFKgo9KCdbr1oY6oAUzCl.ZTFYHhd13o4+WodAazOg4i5E FM06V0bRzSTAiuJ0pvvYI.ljRTxUVBwJDonDZNMijqNNI0nIshYFNAxy3b3w ACLdBCkkhUBDvneaGLlp+sXt9JqJKxOu5YkZvkbF.r0th4CH+zbzgGAGcnin mCHofrNaAT1fHE10Eo7Vm5Dt0GCFOjzd3you1fSInVUR9fnDx0EkTKVqPWpC dI256M2Zm.eZAO.5LVgzTDX1o57+.Dy2E26hTr1ErtFn4mnUY9qgTbWG8PO3 7y+XLIoE2qddQmAU31movxWmXpWT1EZPkxOh5t3rdr0HECFxNrfXmwcX4AOU i9Cb5NcK0VMlOnJPHx0px.YCIPLxfTFoWkJi24tPrshSJZHJC9+SVSvY1mke PVStxLqc7ZKVm7XLZH0VtTSfzTsZ0Zgyst2N8saFl6cjDOFaH4XadXYwB2hd v53jMnBDCe4Ms2T1byMapzSdOLlIft+84g5pcaWzQfcurjnGmCKE0MkRyd20 ePz8FzWKWtTH66AbS4dazwAVU7FSTOvT9kGjffBI8FaeTHogMJXPJeu61Kin m.6y9BmmjT3Pj9kMcgotQzqSHE1.NlGHBG1.Nvi.NVPIIrGjTXy.PuZQT3zQ beLAD13eeRbyCJIg7wpDJvzjOqbPXk2fOFSvgMqjOpomr9dQfIbX8lfo9JwC XXmO9kvAtJmWdAHWdXhG1rSdQSANrKy2ktSUhqN42S+q.TBVq -----------end_max5_patcher-----------
Beginning a lineramp with function at any value other that 0. can cause clicks as the signal output will go to that value immediately; if you need a very short attack from [function], send a number to a [setdomain $1] message into [function], and you can ‘zoom in’ to very short time values.
so it’s a constant battle between desired env and clicks.
start env from 0 isn’t a solution at all. it gets clicks anyway, it depends on other factors. (if one triggers env before it gets to the end, or even immediately it gets to the end. it depends on sounds, but for the percussive sounds, you bet it will get clicks even if you start after the env is finished, unless it’s more than 50ms or something…)
so it seems that the only way is to do the battle, while adjusting setdomain and various function editing…until one gets the less click and the more similar to the desired envelop…
this is very disappointing though..one of the thing that attracted me to buy max was function editor…how could I know that it was click generator!!?
anyway, thanks for the help…
Amongst other things that Max does, signal processing is one of the things it’s GOOD at. There are objects such as [slide~] and [rampsmooth], and envelope generators such as [trapezoid~] and [curve~] which can allow you to impose user-defined shapes at the signal output stage – don’t be downhearted. If you say you are still getting clicks even with the envelope beginning at 0. then your patch may need re-examined; if you can describe what you want your patch or algorithm to achieve then i (and others) will do our best to suggest better patch design.
Here’s a suggestion, although it uses [curve~] on its own without a function generator so I guess that doesn’t solve your problem about [function]
----------begin_max5_patcher---------- 778.3oc0X01aaBCD9yoR8+.C0OM0vv1XfreH6KSUSNfaJqfIJ3r0Wzxu8Ye. ooKgTaRJzIEYBmcLO2y8b2YxyWdwD24kOvqbc9py2clL4YkkIfMskIsFl3Vv dHImUAKzMornfKjtW2Loj+frdh0q9Eeq4aKExprm35oPXO+V6YovhKm+yoD7 1UKVWjIx4R3QfZstjIStKSr3Gq3IxZTRhz6kSPrdjhziX0nyM6rSkqksak+t vQvJ.339M9pTlf4By8mKuPeUc4Zi4fayKUOGq7Uz1Uq7zrB0uVM0TeOLsubP D38T+2hCvGkCZmr9GHebIu9gn8QlJJ63NmIV39xlqHhV366E0aJrJobIei6A nJb7gkE3iPInXJPCwft.Sf6PQA6xJqT9QiyMEnNjGpScSu8qNSOXx6+xJdtM hFZj8IHX+YfrHBFIiTBhf+akCrOI7ooJQiMT.Nzdw.lFBgWLDkCdyhDnSIAw 4lArJBl1CAQCaD.4DgnApbQuYk4qkxRwAKLfr26aJLfPP9.wuc7M0B64fmpe 0UJwRVx8pjhserROzQGz.CXj51GHL8cJ8XfyLH8oTIHJhh9+HwnfWUwVv2WA 46o6k4bE14JhVCo+RfUjWT+635WKiH.Ihl8gRF0UJGbR0MVwPyNLCQLfgv0s hCdmzWUYKDr7yg.qK55yaTpJpMzEpGcso0kkBfRzT76TUoF15DXI9SorjCdv Up8Nc.bXMBFb55Nz5wy+wR6N1Z0awz2vJNBtPHeXCqcVq3wjb9Fmf.eqR.5M QE+RKoAjmpeLt4Yh896..npm3eXupx0qRZ221ZjN6.3TdkLSvjYpSysyphe8 ptKKMkKd0qhTjktrLSHaPxwBpmYvoz2NnAGa5+a.CHN0Y8bH1.NRLxipbnv5 hL99auaHgcnsw6VX6Cu2BNjt8tyiRHxHXOabjogFAN53.Npw5T7vCNrQfKZb XNyyvGAvQLFbVUaDiBqK3.oyX7LuXBgfiaLcVvNJzzx5COuZTLGENJXynPNc b5FZJzNMVSaPc4u.m0pdl. -----------end_max5_patcher-----------
i like to cheat and just use a quick ramp to 0 using ramp-time of 0.1ms(line~/curve~/etc. can use floating point times, remember, which means it will get ‘closer’ to sample-rate accuracy if you need it… but whatever you do is still dependent on scheduler’s overdrive/audio-interrupt and signal-vector settings in DSP Status… window)
here’s how i cheat with your function patch:
----------begin_max5_patcher---------- 1081.3oc2YssbahDD8YouBJp8oMrTSO2YeKeGakJERZrB6h.WBTE6jJ9aemK nXYGDdT7vTxVOvkgAnmSe5S2z56KWjtp8NUWZxem7OIKV78kKVXGxLvhgyWj tq7t00kc1ok1n9Z6p+MMycod0c81g6SpSPInb33UZNrqpoV0auKXXvaZa5aJ 2or2xG2WUVexzaOzeb9jgQusre8WpZ1948p08NqjfD4nrDfyM6n1sfLGk7og 6w8X5u+Vk6FRSyRRqZ5M6totsT+bNN0pMVCQud9K.mdhM1U8M6cCnbjYzerb oYS1aDLhZr6rDLhDTLRDRH5vtUp8AAHvmGHvHoEHnlsLzKiCCXvpxlsiBAzP hA6TcckaU+BOoS0uocWYUSxeLNUAegHDLABIsnBwhPBvEZMISYTXgEAXYcsp b+biGLvhDXqHCAmy9svCLJf3wpC88sMSFp38xCJrRBLvoObb64WdmMR.XogS YrtpQ8PPbsSHFPJbqW9o91IUC5p11XdQSACP.8z2bnYce0E4qoSjEfUX80La PMwsCQmZA6z9yb4ClbcWbzFcJUlwYHC95Fsbylaa0hoCkVXAdTNUBHfnOxJI q8GXJMa3hYIRVNgyjLrYH8AXrzNtIUOW+Sfebtt20voIe5sFSj5DZkEAjIxu NHh601m5Du9SjWFKAjKpjCyAKE+6vRcLLhHGSnHpltxyoNhnV1jUvDzB8w4H KmzQl4jbbgPJwONYLWlyAAhn8sXK+cXxDi3KmHMOY.mKmW9rl37PPpxZpZHH tprFJ1p3kKyZfNOlKiHl+BwiAn.bKUFqitC.nvmeP4OeXtqshfbkcPkWnr2n PB68.jfwCrDZHfDZDBcT05mHZtyPBf6SWQ13FJ4kidr4.xNW83v7iL+m59QQ EzEhJSTQG3fChqtAc4cLO+d1ec2n0xJmeTZ885Oia9CqXCk56vqWm3KDxLR5 ZWzqhYuuGTWuNDBea7wOqo57eoy6hbPXwP93PjCBnu4XFfKj.DEAjYflelwG lelAwlkg.7.vLjuKhUX1XEJNDEmvd2jag5fCWa0ek4VBo.Re61s0pvzmPrqM njBguMJ7bEUPBXaB2TtNLtWzTtW6Rl5ZQ5Hj9SE97v6YuOaakd1eyl8caF+o 3PW6g8qOBpG+moRd70uQ00W0TZ6NyiSh+j47kpMaTMmtP2U8jNcblNLbQlDb 8YRXOLIHZljOfzybtysII7.jLczNhnjvGTBhNJgttLoBOPIQTsHhOnjoiDQj KAberoHiS9XSxqOSx55hn9MxGaJt4TLsX7kEBhKE+YtkyfSr3hS9XSPbC6vf O3Tbo3ROLIbbyq.Beo3QzlndpXFunNe7bwEj7RZJpXjuVTD0kt5rHtuh2Qrl Ie7aw8qT7xjJha5DzUmI4iJYbqC..OMo3wtoWera50G6l5SU.zWCYRexOV9+ .sNhjqB -----------end_max5_patcher-----------
but it’s true, sometimes you don’t want even 0.1ms of latency or any latency even shorter than that. in which case, you might try reading Miller’s book here, ‘Theory and Techniques…’:
in it, he refers to a switch-and-ramp technique which might be of some help(i don’t know for sure, but it’s worth a try if you use function/envelope generator for synthesis in particular):
It’s a ‘bit’ advanced but shouldn’t be too much so to figure out. Anyways, hope something here helps.
*Never fear, Noob4Life was never here!*
thanks for the sincere helps, both noobs.
~slide and rampsmooth were the first thing I’ve tried for click problem but it dramatically reduces the global gain of sound, thus change the timbre character of sounds. noob4life’s "cheat" is indeed super clever, but it does the same thing: change the character of sound.
If you’re curious, use preset number 3 of tutorial synth (simple FM from tuto 11) then just bang it with various solutions that have been thought. you will hear not only it changes the envelope character of the triggered sound but changes timbre of the sound. those solutions are not better than just use various filter setting, spending lots of time to edit your filter setting to remove clicks and get the timbre right…but then it’s whole another story…
The only thing that I can think of now, as noobmeister suggested, is to use audio rate envelops. well, then the function editor is gone…but it’s life.
If you say you are still getting clicks even with the envelope beginning at 0. then your patch may need re-examined; if you can describe what you want your patch or algorithm to achieve then i (and others) will do our best to suggest better patch design.
however, it’s very encouraging to hear above comment. my idea is just to make simple FM percussion (not more than this simpleFM~ from tutorial) instruments to use alongside a sequencer that I wish to design using JSUI. I love the FM percussion sounds because of this digital sharpness/harshness/crystal cleanness of timbre, so that’s why precise and sharp envelope editing is so important. And also I want to learn how to generate "fm-feedback" to make my percussion sounds even better. But f**king clicks are getting on my way. so I’m a bit lost. Speaking of audio rate env gen, I could use supercollider but then all my plan to use my FM sounds along with custom JSUI sequencer gets complicated. (I hate OSC) anyway, I’ll check out curve~ and trapeziod~ this afternoon and shall we overcome.
It’s strange that [function] should exhibit this behaviour, as you would imagine that the audio-rate [line~] envelope it generates should help avoid initialization clicks – I think that’s what’s happening in your patch, so I was wrong to blame the clicks on ‘poor’ patch design: it IS the [function] object that is creating the clicks, I tried a few solutions ([trapezoid~] [curve~] [rampsmooth~] etc) and you’re right, they either change the timbre or don’t cover the clicks. I would have thought that using the [setdomain] message to zoom in should fix this, kind of like noob4life’s suggestion. I’ll look at this later.
here comes the first solution, for now, very satisfying.
it’s nothing more than using slide~ and rampsmoothy~ with curve~, instead of troublesome line~ and function editor. as you can compare changing the option form umenu, you don’t hear timbre changes (depends on sound, but not really perceptible) and clicks removed or become smoother. (ramp time should over 20ms though..) and the most important thing is, there is NO global gain reduction! so…now the question is how to use curve~ effectively and dynamically as one can expect by using graphical function editor. anyway, sound is ok. thanks.
----------begin_max5_patcher---------- 1664.3oc0Zk0iiZDD9YO+JZwiQdQ8cCQQQJJRqxK4WPzpUXbaaxxgCG6o142 d5CvGyXvs8fY7XMiACUCU8U2E7iGl4sn3qxJOvuB9GvrY+3gYyLGRefYs+dl WVzWiSipLj40jIya7laOSQScprt9aak1KgWRds2bfm4evGZoZaTc7lj70erT FWaIDIH9v4.BwrAAglMA9vcKJYo41Ur3eeGizc+VUjWmGkYtad+QYRTZ2Yxa xRxU7hgIQGPdUx2Mjiz2B6g07aqLu+1UKyZOlWwpUZAXt9qMxzzc+nJMYob2 uJix1VkUn9Tu466kVEmXgEykinO3Oe3A8WycDhiKxTfbcmnUK+pA07hxq0vH HUVUAp2DkC9bTZiDfgfujjlBhiZpjf3zj3OUMGrnoFj0DuAjUTJAeJIeInHW V4662cgSSxkwEM4lqNoekEQP0pGLgYzRLixhh5QYgGWk0wvI7JfS0UXgr7bl rKhxWOnIKEILnP.VugMnEKMbbAgskxJkEQTcRQdurDr8qdrDwudPGgSr7I47 PGCNIP2wrz8KzwvbCeFxcvpK3V558JBBTA1BBBG.A9cGHH+hhwdVz7tzG0ad Tc+T+0KLUkrNWw7ChPDnMeJ1g7oT5EBQjKAhPiGDUISURXQ4i.xKAbPgAFvw VyAlQGDbPWH3Pes.GcwHOp7F.rWjoCAwrlNlMb1ffC7dyxISUKTzZ4yPGjJd tBXfpn5rdQmAwk1TCXRnAWrEpxOMtPtz783aMtzWMjqJKxTXBnt.f7AqJJUU OlUoperdCHtoT9Yo4raj4f0EZpfVpHgAPfhP89J5Tj8NnufcokRRYFWQpvgJ IIh6sJIWkVntH8ZNoNcjaIzZMpPLGRnQH2aIz5ymSKD95tQT1Lp+LlLGYkbY NfTdfMdsAcrk51qCH5dyArmn1FemGOW7ZmrgBY1JXMlRT9P1PXwsLt8HVTjR 9e7EkpGiLfBzrwVMDF1iMyX3Wg7YgLTf3lms+EBLThy3B8tDWL8wsKeV01n3 DsCxdO4mgJcqXWeFGefAqIxFdFg26ZgOz0JKpbcR9gU+cXGrcL4hlEKRkcPR v3fczC6qs9iKipi5Fe2NjytHcmW6uEpismV1713BHMZzkVaeFLjpch.XXXXv 78zBOMsp.7PwdxzoqNEYX+1q0ukj+4HUsq+t9rcMH1oiHfOX4VqgwokH7UHQ 1JNbPV3mWTTlEgikrPtFYw1d24DFjO1E0BzAQA6hnPuFCMGkDnSZkQSTXWiV A6hnf84HGjEpO2EYY+URO1iSPvAbjd5PCSACd1qQ3oovELkeEXZXnSlGscUb VT0MCj2RfpX.PsWWd3ShezC3SBcxh1LME5SQ0UM4w5Qtp2ONUFokL9PDEsbo mo.VBMfiIsyj0gkPEpP6bJFFZheyb69v0O4Irfx4WxpTYD80YEEAs72qobqp +mhvAHTqksK2Fb.0mBILN0H1AHrq3UfxESPH1EhUUmbcPlKF0A2PiZNRI+pO XWBUyFOErg4B7cDt4bnOiAoHld.TttJDjx7CDHphVguyZHBS3KT8pGxM4icd cLppBi.JQikH2WlP0JBBEhnJ6Vhq1ssVQBFejc7f6d7ONPLg6yCEXpvcONkW suxsNv5uAIN6vcnVA5yEt6wIz13bgPXClbAN4OAk26qZ2ajFA4eEUlUjmDmT +Mug5j2NwUaiqhA6XEwt4srdMiKT98kQwO5ctlxI1pWHjtuOoHxGbLVivSI+ zyc3WFioNXenBDS.0d0gixHzG8wNb7HeWrNtHsnzJbpPkb0Gw7St2gC09ELo 31AZg319WCelavFsp5XtR.YAlrsOeudF0NFdycf5TW0kIUwQolU.U8Q2h4I4 IYJb1bP3aP8DkLEpIzac0TuS2Laap78+8XDro8UJq8cVpmnMX7XLP7QOZSeo L+ynxxDYI38kx+yenDJrCyYxGDAHSZNSCKXdLgO4sMzHE5ieLrTUzTF2o76d I.A6kjkxp5jbya0yADoe38GPzljkKklyC2Y.ubagpA6cu9emTI4JOY5b+r7D zN0oIhmLyavIdBMc3TfK7DcRwIyrcbhmlPbh5pMNYx3I8iNzMbBdmwSvoMV. zUcG9NCmPSqMNxAdR2LvDxSFbBcFdhDNo1SDWxs7DE7slmPtvS5NUmPcm67z Dp6boVEcInSXr.mYoIzsykPljoMyB10nSSXlEW0bSHL4RP7WRMApe7yG9e3Y TRsE -----------end_max5_patcher-----------
‘sorry, it works with function and line~ too.
I made mistake of connecting object when I tested slide~ with line~.
what a shame! ‘sorry..
so it seems that [slide~] with < 50ms ramp setting is the way to go.
clicks are there, but it’s quite o.k. kind of clicks.
for the better, perfect solution, I have no idea.
for my purpose, it is ok. thanks for helps and ‘sorry again to confuse you on gain reduction with line~/slide~ matter.
I made one small change to your patch above, with the following curve coefficients in the message:
[0., 1. 5 -X 0. 100(arbitrary value) X]
where X is a value between 0. and 0.5, the greater the value the steeper the curve;
I like how you turned the [curve~] object into its own little metro or pulse, nice one.