Transient Detector that will record only once and switch off once recorded
I’m Matt and extremely noobish at Max but desperately want to get better. I have a problem..
I found a transient detector that triggers a bang when the sound is above a certain level,
however i’ve hooked this up to my record object and it needs another bang to turn off which is a problem, and I also want it to record only once.
My aim is to record in 4 different samples for 4 different buffers. I’m making a drum sequencer with live samples basically.
Another way to do this live sampling would maybe be to beatbox a beat and then make it slice up the audio into 4 different buffers but I have no idea how to go about doing that. The first option seems simpler?
-- Pasted Max Patch, click to expand. --Copy all of the following text. Then, in Max, select New From Clipboard.----------begin_max5_patcher---------- 753.3oc4W11aaBCDG+0jOEHdcVFmefG1Klz9bLUMQBNodhXp.mt1U07Ye1mg zznDBTnUUZuAxYH1+ue24yGOMyKXY4Ch5.+u4+SeOuml44gCYGvqw1KXa1Cq JxpwWKPWtYSgHXt6QpcakpBgFeFzL3cY5U2JUa9UkXk1M2zzzEgy8o.ydiD1 d0+ll+iLGm8xk+9KT5Qyd4N8oSuaH8i2IbycfTYVkarO74YyrWl2SeQI9iYA aWMs3ATsAY4q12N35RktV9Wbo.hQ1CzuAt0USHn2G2kayNdIUYawkL3GUxrh yyCxk3Qsbix9mN7q2DbVtSqKUCNPCNWkfAZHt85473nAFmWlo1LoAZQ9FwzE oQGmjfI5LVWg5jIKTiHY96.Z99de9hgfFx0QCyUCHoKzDOTz.WYWvTBkutep HRH2AgH2lkE7KSDB8yLRxtWTkY1EYboP+ps0SztIBCvJGbLYAB6Lmgv9LSnb QQ1i6MUDfPi+DNQYPs.hxc.pySTI7+CSgnb2QPzv9jBk9YlPK2sdsnZuec4N U9RoV.1HdnOYhPEKDqLSfH2lttaOKZxN8ZcQYldbGeUHuWrXqPavyPaUgm3R Pbci5ZTC37y60P5.SCJj0SaWoFgWVkebRP6qrprnrxsrXQAi+jFBoQG+K3H2 5UYKvBdJGRhOG7ncjxvb840TFB5Lkg89V+AWRCvUm9kLntsi+ZZaHX0p1Iro 0ae3fvyE0ZoJSKMc+9x6XS.7ew6tUlmKvm2tYaqL+tRymhznAJCOU2RFyMdJ skS7KjTLDwFN0h0zt96hXsMubU0FOPwBnXItOmhRfCViTrw8PqICSqiEeo8P Rmv3qyuHJFriis2ZnIZMV0x5qZg9qVBGyIgTLLSItFBsViTsI8PrQenQ6dgu 25NaNhulPu05iPr72nXc8p0D4sViMyj2G0x9Pi1z9TZjMPBxLs4ZiytZiLNb vZjpMpGhkNzBQtR2TW+lzH1YrbegbqaYsN4n+YOO6evZO5KA -----------end_max5_patcher-----------
please help! AHH
I feel your frustration!
I’ve not done this kind of thing with Max, but I’ve been trawling the forum long enough to know that you should search maxobjects.com/this forum/google for bonk~ and analyzer~, two externals that allow you to extract info from audio (realtime or not, I don’t know); a simple solution might also be:
>~ 0.1 (or whatever value) –> [edge~]; this will give you ‘true or false’ bangs.
Get this solved first, and then repost under a different topic for details on slicing into different buffers.
Slicing up a sample based on transients is easy with rm.slice although it just sticks the times in a [coll]. I’ve used it before to slice up a single bar drumbeat and re-sequence my own patterns using the slices. It’s available here: http://www.maxobjects.com/?v=objects&id_objet=4748
It’s also relatively easy to trim off any silence at the beginning of recordings if you need to do that. It’s probably one of the most useful tools I’ve used!
ah thanks a lot guys, i’ll give it a go!
Okay guys, i had a go at making my own transient detector recorder. There may be a couple of unnecessary connections, but it has all the ingredients I believe! I just can’t get it to record!
I think it must be a small problem but i can’t figure it out.
Here’s my transient detector recorder 2.0 lol
-- Pasted Max Patch, click to expand. --Copy all of the following text. Then, in Max, select New From Clipboard.----------begin_max5_patcher---------- 876.3oc0XtzbaBCDG+r8mBFNmlgUR7p2xGfdIW6jICOjsoCHx.xMtISxm8JV gozZCFrI3zKVVhGR+18+tZEutbgYX9NdoowWM9twhEutbwBbnpAVT2egYVvt nzfR71Lixyx3Bo4M5qI46j332yixKh2OrXaV9VYJWhOjU8nqxExxjW3UiAja 2O7SAxnMIh0OVvij50BXwTW1fPspZ.argn903g5GJIFm17ve7EpiYqIPDjgS f4cEIAosVPIh8qGnZr2Vtr5matPtu69uYHyMJlV7sIH2TugfOaFvWveVMWGP +K7h7cuebrI8is9Nk+5ItlYyxj0hpUby+Zf8HVHOTeP88qZXt8Ye.qYv9jx+ IOMiK4EcXMftvNQIp5iTBC89TaaTKPPIgC63rRrmLhB2Jk4hQBSXfXcuzXit JpaiGqa+lyzId2lE1oi4nxT5PjoqRyCZ46xxi4segcSOEck1NH8PK5UuaLgQ yr2xbL1nbxYXnTDodGSS3r15by.zDT.0zDcZtSjrCFavby7VDfwmOxEAgo3i Y8eiIhX6ObSj0U1DIyWuV8zSaZPvECW.G5oybPHyBmcrmX31UqTYaLJy2JhC SjbX1Cnr.baQerAfdMVf+0q7g3fn2mrZlzBjZno8WRf6LjL8iILnV4a6c5v. v4ZFFnqH9zgAv4Ul3.xUvX5pnAVuVIxH0BzoyFEDGcMJdt19PzGxp+PkqX1A 4lBd4l2UkCY.2N2hGpEtQiqWeFGuKP5fuOyzDw+d9abMUM9eawTwQEQ64X+4 ZLflkULuTlHBjIph1acSJ0sweV6aRhi4h1IXyRheJWk0obe9E3VaUni5jmpF vytoWy634p0G9LOpMEtGdgUoAq0Due0kTVkiIt6jLiBaqIFae5no1aVo1aHP aMReslSpClFPaBn+0IKO.Z6YEZ+AHv8FGyDKDShtLxZK.1qangYGZqKD5CPf LugnNe.gn.wGEnLnULJ1qaOmymtXzpOPy4DipyLQX9M85lZ1rRMa.T6LV8JP 9z44XmmiifNNGmlNc62nyJyTqAlnAFQ1UGsL0EkoD.+NWXuto1edoFFH0jgS Mk31lZFqoWO6oXMqXSHC.a+yRgC9s2JE60C1y6dovPvt5iAbFbyp+fTs50C2 rOobCmK20ERcJtujbZFOr7sk+FfqoAah -----------end_max5_patcher-----------
Also unless I’m being stupid it seems bonk~ fiddle~ and rm.slice no longer exist. I tried with and without the tilde and the max window didn’t recognise it
here’s something using max ‘native’ objects– it does transient detection OK but I can’t seem to get it to record into a buffer (something silly you can fix yourself…(just read your post again and you can’t get it to record either – sorry I didn’t answer that question…))
hope it makes sense– it needs cleaning up and other tweaking but at least illustrates the principles of high pass filtering to isolate transients, using averaging of the signal over a time window (256 samps), use of average amplitude threshold and hysteresis, debouncing the recording trigger (or gate) using the del object
OK I better do some real work and stop procrastinating
-- Pasted Max Patch, click to expand. --Copy all of the following text. Then, in Max, select New From Clipboard.----------begin_max5_patcher---------- 3864.3oc6c08jihaD+4Y9qfxIOjrY1oPef.Rd5RkpRdI4g75co1Bavd3VL3B i2Otqt4u8.pE1fMHKvBM3a2qtx6LXfo0O0cqV8W5We7gEKy9Rz9EV+Uqez5g G90Ge3A9kptvChe+gEaC9xpjf87aawprsaiRKV7D7cEQeofe8Wh27h0tx6xZ cbRQTtUQlU79rjfhHqh7fz8wkO0dq5mKINMZU1gT9CiEWbWdz9x6JnHNK8Cs tCp3NVmkVjFrMh+m7GxiCRpegoG1FmlDUvoRTWuv7nUEvHkRIOa+jkKp5SGe 9m3mss9emdWYGJpeY10urfhUuDmto4Kh3V8vLV0md7eF623EUQt6i+EN4hre 1tCxpI4FGxGWYK+426RVTcse6wGq93IEmbRi9b4CewbSRVP31nxoFj8hwAjK 2rJKIKGF01OyHNXe5Sk+jO1g523GP8BiHIvnsCG573fIt5SjaOvn+QTDd2Ee cWD7VVr33CzDHw0CrVi.GOahOthv8PHWlC+mvUCKwXXDneehFAGBi4S0ZkI1 uhexhf3vks3igyBiHbYArMpA32KOL5H52.hYzEZDs1kD70kAq9ndQKDhKlSs I2Hb4fAobx3gKcJZuyJ3PQ1+rTK6.wKbmibb+ibhKG0vftSlipi7KESexZQb kZ8NjVYGkV4TPTt.QDPR4ej3jnOEkuuslyGVDraWiK+PiGoBG+YPv24oiWJN EtD53kxi9Tb8y6CWrb14w5urFFrOx+vn7+g50fQpRSYR1pOFE1fO5gEgQqU+ MjsKJsq69blV3NiSOe0jl+UCNjT7gtmXZ+8qCVE06C2I6zCK1jGGlkVQDsdx pKW+mqRfgyn3zjt42QZvtNd3hrrjkA4USEKShZMEWJeDjFusjUuHFnGr8wmK d6t7XvVgiWKJMn7c7x9U4YIIsdUv27oN9lvRtfUQeNNr3E965DZ0xRol7WMk baccYRvskhKrrad89w79T60+5s8INyHv7BHTSNWZVhDc2R0MknOWpl5tn95b sdBYK8ii6iRFMRh6EIwxQRv.RDfgD5MijKCR2Toire3jYH3byokUzGZdE9Rf gDYCV2fe14FQy9QQGchh7Qdung8sgFvxDXm5OaMjFjjniWSZr1Drpu8N.L.U VZDL7MAX.jzHTfaqBqAF6KANZZYk887fEl5UevhFxf8jgIU9bnm034DU022M JrO6P9pZlNg5kRq0ZQfgQ6KhSOZm1OdTa9423KwggssKBrYMbWVI+rf.gsnd 04sAS2LUoa2YEcWoYSM51YdQ29CgtQyG9DU4uqT7Lm3ucUktQZjtEWrdCkK1 G7onvOT9moTC2GBJJxiWdn.T8zZ2t8u4qqs4tN2T2n1IX4FZWFjH1O9QpYgB aT7wSnflcjI1Yd5IShK2IvHFea.LWs5JSG22bWYFFsL6P5pHqs6WbUm1i0pG 7X0NFlcxq8sb1t5dsmxZLI4BuVOs31dG1n7s2gsKixGIC8.bfGvN5wskRrOq w3.uJapeRrO0N4ScpI3xQY71CaAbr1YMUNeq9p1i.sVmjUNlmZzxgxsxj3vN gVX69QKGeGjmaePVIMGHGzn5zqvu60Rc.Xs3QXIJ6bDt7vC1jJ51fn8waRKo rNwFcFKrRMTuN09JuFYr4QzpNBK2HxHi6AgGCDUsTZvlnKvHvAL17OLDSD1i 9Lo7+PjRMxL4ZjuFd0IBgQ5LpKIAe8UqRaKSCWFWDgzhxHEjzH70p78lNIMs GJOq8Aa2kDYcCgzS4E1cP.xH7ssHpxphSMfABSmvPkaTCmjvYR7X2X3LofcT tiOblTrNwJH4QzObAJhACxu8n+BFELN3BoS3Rr81IVtpdXSFeNBPsGyvtHay ljH8nCk4HBYM2pemiedbPH02wszN3oWS0PS8ZrTDCxUjdBphxV9KYkChqFAk JMluN0nBFXjwLNp33M58CICUzoU8kjdVd3MX2AY3PDv3XC6bDQkufJdbXD13 6YtmkIv97gKX+I4RqPa46HDrJhOwE6v84By0iRPOw8HS4OP6Y4Eo64D1TN3R BB6VcLwf24Nqqct+djykab+8t1yjIMB8MdRyGh+uK8sZRi0wjFQSNaoOCOrd 4q6qLTae7dqv+to8EHg3cRmM743bEX8jGLsoUWAxbmjL3EOK86MCxWCjCYBR gWl2ateuKdobB+krjv2.lcreCCTpS+zQwrC1uiHNMxfSMwr6OEL6um3LK41c HBtcZCfTaIrtsw316MmhA18+QTQ0PdXy.NcOC3Sqn5Jh1sxMejpeh1j7GbzL rEdUUr0F2a0zTIYkLxmM2SKYXoKGJXDBrbFAyFVlIqvK42YImrHYC+dxIKIK P2YUG027QlLnzdS6Kh7z9h31vzZD61yR4yBkx4lUeQPCZkzbmI62FN6UGPe5 AN6w6RePO5D5SuPKcCCqrE5UAwfKeggokPAMEpns3pZLTTqgDMGpUZCWQCxU zhbUMI8oMQtFE4ZUjqYoasKmy6dtVlK99qososFm3zhy+N4yYxR+b44YbeZd 7ASkwz9SC8qn7Qs7Q9hbmfrn42cLExZm9aSL9+NqRS.Pu4SAzlUBfeW59G0T .jKFRmDvyfIgvHdPloTjs842TW617MadRjIQP9x3TGhgaed5LWF24Dk87Xh5 sVTACIZBhCq5Tc0EVGcwVi99LfvV.g1JeSOC3ahIfyqnGoU0ysnFQV08LZ0D Hx4jdmkDx8M9gntiC.ulIIH52BnGH+Nbz65ZHc9F.9DK.MEvG6sF9tnl1jVW axqssqTLef+NjfeMAF2uE.Fgb4vPFuuEPFgH2vPF+whLs8vwE0I4k.VW0kUG v1k0CG97xtRRMZUta4tt4NqSK40p0fXFF8XiLjwl84062rdrgF7X69YdqxBH 0Ga3e+N17uuXIGxPCcmIt4Lvos6HNR1Pm1tiVAvdHiM26pwl+PFZd2WrjCZZ aJE2Z7kMC020Jn7KhUo7PfoR315MLa2TL5jWr4JUv4sQMi1Na5MCt.2yBFo2 UPPGVivwC70HxWWcBGDZd0VfjT0SB+ppCXr0qSUXrC2M1DI8lYcYm9PRWX3x PJBkWo+7fvP0+VWeTWqA8fMALIImVhB2br.SFZ1rfFaihCIRaPJGjbs0VmhS ZNrXplEWgExz8vPQzVvHSzDCI2AcHMHtSPxwqIEZH264VFGRTqzDssRoG8NF Nvhd3q9PC18bWkSHnPPpsnExy+MdYq2f9Dqne6fsaFZGjLcrjanQwZLbbo0Z Su7OFp9bVihv8l.x5U+uLelZsrkugvz2Ygd1zMKVAj54oIH8JPomgfxvkEYA lVPWfkPwAQ7tYao5OopMEGITEKUsBIaT0GjQBojQq6TXvechBeQeaQRcpLJi 0b+cMCJrDDrk0IkA0TaYRjhmXmVVQ0WxcZDMpPQ+.sHNJsqb4bL0aQucfYCA zAeJJOnbG+UPsUvx8YIGZ2Yyag4DSahEzViAFanZBodSmRBjw5Axp1hXwyqV DKBMD5d9zRdYCgrwyJxFoJYSlMjcGLs8EqK+YE6cGbscS3j4GYiUoQYOqHaU aK4n4UWxVUUIyJplbWR0J2PxmWKR5pJm87pe6q5Z6yqS2.hpmR.Du4GciTkt mOlRQ7F.ax7wTJLa.jM59irmYb27fAo1JNyKk2XkUm3Oy.bk2ii+2O8NTHgp llSuid6q3SdK8DJBYQ+SDJBS2wbDk1YGDWm8xy+xz20WEtUh.EHBwdzc809Z KR3Q0SeyCBiy1jmcXmd5quhgIlbr488jkGVVe8s6d7zwlLW1506i.mudrQFW Dss9ETesZjq9nI+SAIGZ1MOVDFuupkaDJZBJOU++ipUcE8KgAqdc.LF1x5Dx nFI+EHxPaD26ypdQ8wzuOJojHxxe0hNX1emwx9CmxKDn5X0c+8EQmO8t1Fc2 ZQi9SdaP8zG1WsArsLKOLJucCoyF4yfNmZG+zoWXmm263FGYpTOi2xT8OcRJ EjVRdk2WKQ2xUzKuTRK48RlfrxgPR7pOxuU8IVD8kc4V6x97e5OtF8S+zS3+ 76v1S8IJQ8TfnucBcQuwcbd2obwn5x8aKsDIdeRb3IgiA0UXEbUhjst9D3RQ Q.Bum.e7lWUN7CCJBF0gGDUTNz9mnDZSrUYF4VmCvsxEgicFyx0pJgnRbTnG 3TLl0YGg7kcqGo8Jm2HHqa.mLJAQbu4CbMlnA9RNk7BZWIOYt28GgFtKSjMr B68F3wR+0eGeu2O9MWue78uZ5T5RblI50nwqIOiYZeJ9nuHhOAogPVZztrjn W4GrVOa8u9ESCtdnF8sXwh9SN5hMD5ZddUQmOiXaRdUamuU3VYzKMQcxwWGz cPd7CkYkrtsyH3qX2y04A3RiggHRvB264xZ.b0Al5qXYMXOnJ7YRxTLNhqbr 6Q2cQSliwyo.oX6bWlWJpS2yqb7.O.zdFwcqrToybivYCgvsuCI7tjDdKobG zfHbz2CM6rJzrU96v5myR2j70oNtjDr8oCrMw180VPZc044fM5IqjrrcSenZ wvIbAXwFbFZoOHQmgsd+Z9Qe8Te9oicA1BHHET1s5UWoGc5KZn5P7X+g+S0i bbvx8COpxS919LHJtbOy+2Vn0CYre3+9usJxrfi4yo9L8Eignk.mvm9Jexd1 jwZTA+rxU4IaiJhxeUOgxBK5pF9Mh9CaTGruXm25CoXbqCoX3POf3OpwBVih 8KOrdc47ktOw6knAfIpCUQ3cDc3iwb7dA0zqTM.57vqqYZZbSpGkcdbiYf2N .tD2QH6hZsPI+Aaued.BN2JPAPbYNr2ZCN8kLgsrX8Ri951fuKlVTklZ2QR6 yZTZyD3cxoIhqpzDwb3DUEZx0rycJSSHiQSsK3KYycFDmTkjF.Lg8X7TETnW Aae72tQhkpJwRMF9QUglL7TpJpRolklHpnJkfMJMwvyOZBqBMwLKMwO7RaH+ KgnPlcx6ZzDdf.EE6vCAqmeciw+heC4A4GU49Cp+sabj3nxJ5Nl0xmy9y0Wa pkYzob03CaWgOFhntpVD24mgqXyxRgUxRCypYiRTbw6YGStYMbEor1f41ly3 DEdds78Y1BMSzPQL6x2Lkm8Lms7L0W0ybatl4ohEglU1yUkMxxL75KJoOvrR dpL0clSAlEpxMrBJkoIz7hl7MqUcDkTOYVV74mPm6DSQk+xu83+G.TEQ8 -----------end_max5_patcher-----------
i need the patch in my last post to record when a transient comes in and then allow me to turn it off without turning off the dac ^
or if this can’t be done, can someone show me how to slice silence from the beginning of a recording?
oo some interesting objects Terry, thanks!
And yes people I have looked at max objects and I just can’t seem to find any use out of it. Seeing as some of the objects don’t exist
rm.slice seems to still be available at the link I had above. To trim silence: generally the second time it puts into [coll] will be where you need to trim. On a patch I worked on recently, I programmed it to get that time and give it to my playback objects as soon as recording was finished, it’s pretty efficient and may eliminate your transient detection need.
I’d really like to use that, but max isn’t recognising rm.slice
it can only find zl.slice for lists.
Would you be able to copy the object in here?
would be much appreciated
And yes people I have looked at max objects and I just can’t seem to find any use out of it. Seeing as some of the objects don’t exist
While maxobjects.com does list objects that are included with Max, it also lists 3rd party objects that you need to download if you want to use them (each object listing on maxobjects.com should have a download link—sometiems they are old, but many of them are good).
You should be able to find
rm.slice from the maxobject.com link dickmedd provided, or you can follow this link to my download page: http://www.rothmichaels.us/roth-moves
See this thread for some info about some warnings
rm.slice will print to the Max window that can be safely ignored (you can also download the a zip containing
rm.slice from that thread, but the download link I provided or maxobjects.com is the way to go because I will be updaing that object sometime next week).
A few brief thoughts on this issue: while it is good to detect an attack and sync the triggered recording with a zero crossing, your use of
zerox~ is not accomplishing this. You have the output of
zerox~ going into
record~ which will just record a series of numbers (representing the number of zero-crossings) into the
buffer~. Check out this thread for some thoughts on syncing recording to zero-crossings: http://cycling74.com/forums/topic.php?id=36777
You are on the right track using
thresh~ vs the use of
>~ in the original example you linked because to detect a transient, you need to see when a signal goes above and below a threshold. You may want to think about using
edge~ to covert the output from
thresh~ into something you can use to trigger your recording. The problem with using
edge~ is you are not working at signal rate and so the actual recording could be triggered sometime after the threshold was crossed (again, see this thread for some discussion about managin that: http://cycling74.com/forums/topic.php?id=36777).
Also, as in your Terry’s example and the original, some sort of averaging/envelope following of the signal you are analyzing for transients could be useful but may not be necessary depending what you are trying to accomplish. If you do no envelope following, you sould at least run your signal through
abs~ to get the absolute value of the signal you are processing (because if you have a threshold of 0.5, you want -0.6 to still trigger recording).
Something else to keep in mind is that after you have detected a transient, that transient you wanted to record will have already passed, so you will need some sort of delay on the signal being recorded to compensate (it won’t be possible to get this delay exact, but this could work well combined with techniques for starting recordings at zero crossings I linked above).
What you are trying to accomplish involves a few steps and I would take them one at a time.
1. You need a some sort of gate system to prevent recording for being triggered more than once. Get this working first just with some toggles and using your mouse.
2. You need some way of deciding when to stop recording, either manually, with a fixed time delay, when your signal goes below a threshold, or some combination of crossing below a threshold and a timed delay.
3. You need the actual transient detector
4. If you want to trigger recording at signal rate, you will need to manage that (again, see the link posted above
5. Delaying the signal being recorded so you can capture the transient your are using to trigger the recording
or if this can’t be done, can someone show me how to slice silence from the beginning of a recording?
As I’ve outlined this certainly can be done, but if your goal is avoiding silence at the beginning of a recording, it is probably simpler and more effective to do it post-recording with something like
It’s probably one of the most useful tools I’ve used!
Thanks :) stay tuned for updates on
rm.slice coming soon! (I mean it this time, after Christmas have some time to work on my own projects)
Wow, I guess not so brief—I’m sometimes more verbose than normal when I’m tired.
Wow lol thanks for your time. It’s a shame rm.slice is a download because I would have to provide my lecturers with it when I hand in my work. The gate system is what I’m working on at the moment. Quite a pain to figure out.
I’ll take a look at the links you provided.
Thanks a lot.
Hope I’m not trying to accomplish too much lol. All I want to do is live sampling! Never thought it would be this hard
Are they really not letting you include externals in your patch? So many of the projects I work on in Max require at least one external at some point, I find it hard to believe your lecturers wouldn’t understand that fact!
We can give them externals, it’s just a bit of a pain to tell them where to install them etc. If that turns out to be the best option though, i’ll definitely do that!
That’s good news. I’m sure they can handle it ;)
yea I think they can haha :P
i don’t want to put these files in the wrong folders, so just to check the java file goes into:
Max 6 > Cycling 74 > Java > Lib
and the help file into: Java > help
I’m not at a computer right now, so I cannot say for sure, but Max6/Cycling ’74/Java/lib should work (I don’t know I sure just because normally I have other folders I put my external java stuff in and set the path Max6/Cycling ’74/Java/max.java.config.txt).
You can also put any external patches or objects in the same folder as your patch which may be more convenient to hand in a folder with a patch and any external objects you require (although putting things in a more general location like you suggest may be more convenient since any patch you work on would be able to access those objects). Putting a java external in the same folder with should be no problem for simple objects like
rm.slice but for more complicated Java libraries with many objects that depend on each other you may need the library to be in a general library location like you suggest (loading Java objects from the same folder as your patch uses a special work around with the Java class loader that can behave a little differently than the normal class loaders use for tha lib folder or other folders you list in max.java.config.txt but off the top of my head I don’t remember what the differences are and when they matter but I know the same folder trick works for
rm.slice because that is how the included help patch works).
Unless your teacher had asked you not to, I wouldn’t worry about uses 3rd party objects in your class work because that is a fairly normal workflow for using Max. I often teach
pitch~ to my students and encourage them to browse the forums and maxobjects.com and sometimes they have found some interesting externals I had not heard of.
I’m really loving rm.slice… its super useful. I’m wondering if there would be any way of reversing the calculation process somewhat, ie specify the number of slices that you would like to be calculated from a particular audio file. Would this be possible?
rm.slice works really well, thanks for that!
It looks like the key to writing a really intelligent object will be to automatically detect the relative silence threshold. For example, sometimes a signal has noise from an instrument amp or reverb or delay or release tails from previous notes which may always be above a static threshold value. This might produce a waveform like the attached screenshot from Ableton Live.
Notice in the screenshot how Ableton has somehow calculated the transients even though there is a significant amount of signal noise between the transients. Does anyone know how they did this? Is it possibly just the minimum amplitude in the buffer plus a little extra to account for variation? Feeding a dynamic threshold value to rm.slice would make for a really intelligent recording algorithm.
Thoughts? Abjections? I’m feeling this out as I go.
It’s all about volume differential and not an absolute threshold. So the change between whatever is happening and what’s coming next. That way you can have a loud noise floor and still detect onsets.
This is what I use for nearly everything (tweaked from a Peter McCulloch patch):
-- Pasted Max Patch, click to expand. --Copy all of the following text. Then, in Max, select New From Clipboard.----------begin_max5_patcher---------- 3088.3oc6c0zbihiF9bxuBJW6gYp0iKz2vdXqcutUsW2K8LUJrQNgowfKPNI 8L0je6q9.HfsAjSaKS5jCcRZIr8idz6WRuRu9Ou8lYKyelWNy6e38Euat4Ou 8lazMoZ3lp++My1D87pznR8iMaU9lM7Lwr4l9D7mE51+e7z7UIhuU2Qo3aob cO0srNOSrNZktQPq1JS9Cca3fE9UMmsaSRVJWT19YkMluST2Z8itMRr5gjr6 uqfuRXFHTBcA.Rl6A.x2QOPHT8Kp+Beueq5UkDqgV9xe+WvgsAXVzFCp+2EI QoyTc7W2dq5Gy+NIn+ytRgWjPDs5qS.NhEpoFMAAofAIn.2PPOZkDTMS.fma oElOSQCDCmzGYPOujA+OhiV8R+C4NiM3oN1BfA5ACfrPN.wD0+Q8yiMx.f2B 9Wp+T4E038wD9SOlTlrLIUMU1ZBIe85RdEt7U.oMCKm4+JONtH59xUE4oosG WqRSV8UwCE46t+g1syyhVlxe3vWfoiGOrik2uIOl2ok7hXI3a0RyTZLeSdY9 tr3ExArbTVOBiJtuxf4r+UZd91YR0n4x+dchbpSJ9zLl5L04ezoNv.hkXsUK lYBDpm5.98M2AqQm4MW7ss7JLVlbelTzz62NiZpwKcrNJCAWnTQwPfRPFRGR EEPci8JmyBA9FEXqHAlaHAodIu7g7zXu04E64dKMIiuRpAIZa6xURLDrhdPA TEWYbvgP8vUAWCtpfmxiJ4SAxhF3qUupYqfAYKGEuzi4o61v8hSVulWHe.4a umqM6.0QIgv9KzQSNXjAvyrYm0o4RfddFwR4sMQ5AE8nb.bHEov1ldwFqNvd 3.Vu9gjtFmsLJ69YMutiPSMvnP1tfWbmwUtdZ58KERCXm.EFLonvL9SRTcfx 4eWF812GuBO0.hXnJAw.7B4R5BjAcgBGjIC6kIkBFp4xe6rpv1CUsLOKN+Rv U1HwQzRbgfg3IDbPINGQSai9pTlh3gcrXUMUQ.zEAADJTFy8vzEpe5xMT0tr sxnr7V6s9R3OzBwJBNbAgEfQxXEvCxU3QTAm6VcQSDXunEzHemFvPuwUzQBL QS3aLm0K0QFeIctfx9mu3dS8ULk5W5nRGTDiNM3oUOH8Lye4RnQZASAzLEgM HSwlFLUYZRL+EoBfGFC7uNJgPSH8ACF.AJXZPX+xKWG8up08Ts3v9XIr+zfk hD4wKcs9GyGYV4ruTAD3yvv4l8nue5B7AltpErrmsfSLaV99d.GaxpVFCJiK k3SPL4JeBfCxZ3IhL1xxqjDFzWuSVnAcHhcdHV61r70Tk3pf180YaoN6V9Cw H.+2Ca9vVuySpBOc+hFpjJUDYgH+PP8NK2aDD8arOISXGUZRulgjpXI4KHIk +HunLIOqEluYVz1ssZ9lVuDE096452H17llRxxam8KYSEbU56LudXSqQERtP HIhcEFP9bPcb2p2l7XdQ1tDMTLMJmjus9Mrl9P50JZx7LBn2ELrRprlFTIny jHv1PZV9VdVR1V4J23YhHQE1Z5NluNZWp3tiOi2s+5TqezNO5DvMytuHINOS AhNLsp45Otu3AL4mizdvnehrnsG4EKkMjrROcVJGj6JWFUnyipQttdlXlHOO saWMutT9ZQU2aSxx1iEE4a6uyhj6eXfW6xbYmaF58V2S4c6xL8dmTEVbWYzi cYaQTZZkNc229mixR1DI3hDyT.zuoyCxxKnaOOdjdhkxvq3OkDKLILtsvf7w S1VKDMqYVNN4ddonaahHSldeskCryHaZWcJvuSv2rMUNJ59.cNgMsUHaa8qS 6ClfjtlBUpKRSK5DJQ72T19gNDr8aXrW+L8mvj9LRFhzVDY5eEFteJS12DIY evcD2r2T65nxxxEfHKWEkx22ux0jFAHimZesQyp38FfGwtiG63VtKMxedag2 17m9o+1Zvu9qykqe7mcAWBFlKgnVTIvjE81trOHLn1nq+c48JKx9TThQwORZ 1IQrKl6Ix8VoF9d61p967rRtvKlqbbqr305coS5lQS.w8PyFISMSQlfCX8OE AmDh6w7znuIWVXfu5emOIc3aURGPgUlK.XDESmWaNd.o8lC.oUKEZBP3ROcS .pthXCCV36SjqtRt1J5XTMBNHU2Y8UWWhNOiqPiGvELMzJy2sXZJaTlFMNSO eRw3IS.YZCSiPlcoSmSgAI4fAI41Kw85xsBukMIK8h5kyNIYJYQ.Ep2+.KH4 Pqjj6lF0qKcaBl1egGXgmzyXyoB5LP8zuyX.Q3ELP.hfZVaxPdFYSl.AGfsM Yd70rzdQEvQ1vx.lTplgoLko5wi+XXqHJgakkj4SICJpsto7gbwKtwAoUx1x H9VfQxXmklUXiFJBY3E4LoLmD8vKSGVFfW.CXHHRseeAiQyT+2OAWWHWHY4l 7bg5DxHCx1+LFlM56i0asfF.DOFoy.ueH8V4H65uEIDS7eiFcMCNwHXMCLNM drqjya1PfgkH0+r2cp.cxbU8t9ng+6UVpZqHrllBmLzj4C+D4o27NeUslKJV ZgKDiI1PVnNVlGiGdMkTpc8qmbQnQlp+iSPk46JVUOYTaBvqK.i4khjrlLz8 kWMFu2C9PRbLOaetINoTkPm3lrEO5z4IiYfkXV40dhf4i.kiiYxzgmI1xypP +mHXVsKn1Ka.lFXNvRLOcDMTKo1JHiBmLXVCEfMXNvRQiMIwaykqlsxVb0MB RcMM.XfZgEzE.eLEf6qUDjs.xnXRX88I50V5BT2vNVMihlNyn1p3flNNBNB8 MfT36MLCmNXFdJxySCGAPa0AwSGqpPakMXSGYCqiqgclfrorMzbZ5loNRUw2 YN9X2EIDEIK2ILgz293AdRGyo6SyWFkVcHlZVh9Pm4oWOXT29JdmTE9DHyrF JefEE9jOq6ISn5dh4J4XWYOghuHk8DoJkn4zxLlnI3MN.MGFVS1Qn8TpEP8e brqRb8YrdKXpcGd+j5c9mcbgV.PL2wHFQWnhBFrPK.H+fVeW.rpa3tOa7B7R 3Onj.j.qOX3ixAAerqwMJua5sqGNdMtg8AuD2.flqtdMYMXIt4LWIW54Zrr2 YYyUWhkp8kmFZtxvCVLRXvwb.4BhZ+yhlqphFFO0UDEcvqRFCLLQM+xPX8oF 9eSxR1raim59T3sjKdhyy73QqdvpBP44W4KLvbe9Q5JevgWJfNGGDjaLU0bY Ibl4ZrVDhR8G2yFJ7GxhIU0TeEEL7cQj7d3pHxiuP07gwMKY3P7v0ekIkUoI PEcCvp1rbpMUzseH0AUWM5VqxX3pQF..+rhtcrKmE9T3PzmkzsiSiAUhhLe6 Joa..9CaMcqQlCwFultA.jOxE0sZth3CsqntA.zOrU0sFxBQrqptA.rOKqa6 ENFgRsoptA.AebKqaUAtBCFuptA.gejKqaUxTgAiWU2.P+OKqaMExM53U0sP 7Gzp5lgVpV5yHE0sPxG3pTVc1nfAAVVlxBoefoqJ0M6IK1m0zsFQLowc6poa gAeXqoaFALfYe3GtjtEdtBaP+XcOu7FRa+iLTE0cvQEJryIspmyIjxWTqG5f yHzgmOnClDsFOA1fGp6vCyF7PbGdn1hGfavCwB7nWNgqHHrMDzX3YuS9rIBW npL06CoApq2GIbAqSau9Q53wByYba2i33PWjF2H708hxX04x75imtmU6KJdn VI+DNsvCX5AG2HMSrUX1MvAaCdPtyvN1lYKr6jdv1XLD6NkcLvV73H4Geaje bWjSHahrDiOs.Cnjpuj6HMQFvjKnf0osKPjA1MXbmmOjMgIibWX6HaBSF4Na 6HqLl5tH4PXaUNAtCO.avCzM3AYC+3tkEirwYydf9piGX3IZLMjpsbhYrEHL E6qNp83f8Z6RXMEZgzGLzcZC13JG3tPKP1trO2.GXnsJCtY5BZiyXj6bFCY1 hG2vO5b+YwlD4tEhBrJ1cxzBOHvaJ1TPHaQPHknJYKT+vtMcALlZ0XA.lVbK vcgBtubdOS1tie.1X9Zec3KKhXVuox.GhHfUHB5HDQshiXNbVytTAPmbH5DW yup.VpCIkhZBSEDR1qsKgkU.wJoPrC0KvVOm6JDgrBQNz2tkNfdqK11jB389 FURAl89lTZuuEkN7aPo9+1SZ+u4jjex+0s+e.rL.KA. -----------end_max5_patcher-----------
A follow up. I use rm.slice for when I want to retroactively determine when attacks happen in a recorded file, and the onset detection above to detect when onsets are happening in REALTIME to trigger stuff.
Thanks Rodrigo! Yeah "volume differential" is what I was grasping at with the phrase "relative threshold," but I don’t really know what I’m talking about …yet.
There are a few objects.concepts that I’m not familiar with in there, like slide~. Some questions:
– Would you mind giving an english summary of the "just attack" side? Does it just compare an initial amplitude as the low value and look for an increase above the threshold?
– What kind of latency can we expect when using the final bang to trigger a record~?
– If record-start latency is an issue, could you give some tips to use this in a post-processing situation? For example I’m not sure how to step through the buffer’s waveform performing these calculations? Maybe it’s more practical to just trigger record-start with a little latency?
Thank you so much! Great thread!
Well, it turns out that the real-time attack detection is fast enough to pass for my sampler. I didn’t even adjust the attack and release thresholds. It obviously works well when there are reverb/delay/release trails from previous notes as well, which can lead to some interesting creative stuff.
Very cool! Thanks!
Forums > MaxMSP