waveform~ display as a circle
Has anyone managed to display waveform data in the shape of a circle? I would like to view, edit and display buffer data in the shape of a circle. (As opposed to the rectangular boxy format included in the waveform~ object.) Thanks for any insight.
You mean, with the start of the buffer contents at 0deg, the middle at 180 and the end at 359deg?
Yes, something like that. Unfortunately, don’t have Max4 live or Abelton hoping there was a way to do it within Max 5.
I think I can safely say that, certainly in the past 3 years, this request has never appeared on the forum – and in my experience I know that this feature is not readily available in Max; the only objects that I can think of to get anywhere near a solution would be [lcd] or maybe [pictslider], but you would need a 360deg image rendered elesewhere first. Either that, or something like Processing, but your programming would need to be better than mine…..
It’s possible to do it in Jitter, but I’m not one of the ones who could put it together very easily. Search/ask on the Jitter forum, how to render a buffer in OpenGL……then do something like apply the formula for a circle to the matrix in some way….I’m being cryptic because I don’t know how lol.
All I know is that it IS doable in Max5, and not just because Nick posted a picture… :p
whoa, that is a great idea!
cassiel’s awesome interface looks like it might be an LCD… or a jit.buffer~ thang…
i do like stanrad’s original picture even more though because it is drawn(perhaps by accident) to look like a plane(over x and z axes) in 3d space where the y-axis could perhaps be used for something else(to show playback position or volume or something much much more).
brilliant idea! now if only i had the time…
Graham did a jit.buffer->jit.gl.mesh patch some time ago:
You could use this as a jumping point, then capture/jit.gl.asyncread it to a texture and then use the texture on a jit.gl.gridshape @circle. I’d probably make the initial rendering/texture extra big so it will look decent when used on the gridshape.
Coming up with a meaningful way to interact with it might be the trickier part.
(To the admins: thanks for purging the accidental double post.)
I didn’t think about a Jitter/GL solution – that makes a lot of sense – but I was starting from some older JS code which supports click-and-drag interaction, as well as additional text and/or icons.
Just for the fun… an lcd example:
----------begin_max5_patcher---------- 2087.3oc2bssjahCD8YOeErtxSalLQ2A1m186HUpTXi7LrAPT.dxjjJ629BR fMXCFYrAKmYpxWPBQqiNcqVRs6e9vhkqDuwyVZ8WVexZwhe9vhExKUdgEUee wxHu2VG5kIq1xHdVl2y7kOpJKm+Vt75o7jPu0bqrWD.FF7jWvl55H1lGxyy+ dBW8fVtz5yUEE3KuYwp+8CN100eiHNO1KRV6k+SZfWXcIIo7LdbtWdfH9Ko7 04pFzg9D3QKab4qfpW18HJasrfeHaMHpnT0ki2FEDWHVxdEpt88xW+RP7yMZ aaUaSJeEBkeA5zn4KZGU+S1PvxK9qGdn7kG0DQi4eqn+eDfFJ77KAaKD..pK 8k.eedr7IcdfKaXvUGfB1OPgQLI3Pju4JGLPfYEoXjKFmnSONAjbIJTxqbuA vD9xoSjIGlPDaIOZxPo0hnnBaIGASEs7JdpkXiUF+4xZjsrC..OZiUXGopAj AFs4pSwtbPxVWAYP3PHGXL7KIB0q08fRP0Z4Ju3m6l7fFO1gbehU7micI.Bm D.D4r+Q3HacJ3HPr.OBh1FIaqByyfNwVzUjU5Gjk6EWL+5lTQj05hpreDnI1 BFM1RckStggSCrVNoYg57DRK6C59gPD0ATY6N81vTLGkiIDvTnJ1so9jdUNW Gx8R6Tsz9J4h.oe7.hcTXfZ3GNDhzBZK36JbnBHJjlfP9q7zrBdbiZuXYCNM QYqkHo1Ll7MGbC+2J.3mCEq+JWBDf5K5y2bdshHgGu+NZYZukdjplAwMUBO7 I6sML+KcC0sKeSgC28dycNBtX4yoA9h3Rgn0cVd45GWQOVZ1qoTKKO1KoiaM WHBW4k9ZPVvpPdqQhBxqWbPjWNOOPIMHvt6KHJIsbthlsEO1qnMdIacpHLrU SoJ40NJwm+ZvZ92B7yeQ1V6wpVKtoAyokZUqqef5kjUWCc8NY2NT5.MJHt4s 1RIAznfNTTHTohBQotPqes0CpSUEYI0FBKkik0WVZXQ8gGGIZz1.aaKN4Bqv 09K6FHbad894l8agoWqt8AftRjyAHU+vGMaSeVeuR.UKqxswoOXAGOe55Cin A3gp0pPTNUhQOQGDGgyDgK4EuLdgW5axZqg1bFM3ry6nJkURE+iLyDuSAXs7 Y7PnhM+pnXWI5vbj9aRLInpr2Ut.v7W3mvpFyY1wLhZyUXTxMgdcB6ZezB8z IMrsIT30uosc6by7YaCSQJ9G3lXa6DXYyc96jXZ+vId9UmqfSpx6XpFTS3bM kK3ID8BHmz4mbRT6eS07HDn4fl+wGJjpQ6BCwc90yUbQJVomaPDy2aQAiGIc lcjDAj7PJQxMwDyAI8VkUnjeAp3D6Y2fIrx2Z0ALQvlCZ9mEx1EAl3YmZVAl XWlooj+J+sjTq2E.e+6BPV+c1ZuPuzHgOefEB1K5hI2JEeafi5rE.lC7ljxS 3w9VgAw7pyqYjv576xTMrp7lGhLHS.Idq+pEP8+HwSz0GOIZgmLj5HvfNFDd JByEq8R0vp5iCYdECtA9PoNHL0Z00CYQy0jUrmPNXnyk3gOx9V4gOU4FEy0b 3peTcjlWhG.H1MaESrJeT+8T2GxtYd8af594VqJ9WcjlmBbkghvi6eu8gfdD FeC11XfxC.IEloie.3Yao.Whc.6a1BAfLSaW8tBlUuAJ+Ta0gOhMMqpQY4hL unjr+6j.ZVvywkHyf6w27u9eWEzpb6210bLqFDuQ7eVQee01Ma3ZNsUXPVio uz7C8uCBy+ngJbCgtUyxg0vvgy7Lbr8GAJSGCrTrCmk6T6d37uCMUSw43tOh nLio3R37udVr8dc585ioX8lri1SHWOwVmWsMOWDOLmrWGsPKuL+k.61HpYse ObTAcxtsMZrgEjpaWEHglRTAcYwHk8niQJX0FmeugFC3wLYr3Axww.wC0iqu .zgNVC.Lmx4mscoZ2YAmQmceXOJ2V4tifPoTUVd2nPlXa555w75nAzpsD5yy xCh2ECneZuYwCp39emFM6FQA9Ihf37JAz5yZMtMYxcY8f2ehM69TrQlkbWZ2 5djcaempURzUtKOYaSxZhths6cJ81nPa5QfX+1.MGoloIVaaTTjRERjlRM3t SpQlEEAYqq9nYMMo1xc4g7ZRtknqNI1rllTBiZK2HyBug5J2PyBu0Vtwli6T 5pWVF1kljafNmicPCxMPjtxsY4PEDdFKF1f7CTW2WQlk2IHcm1oiN3MmlniY PyRrKkFlNnsYsDdc41lE0V2IbLKKIx0kqsCrf6vI3cMKGX00xM1r3IXc42Xy xDHS6sM1vjax4f2FzFqg9MeeiI36yMxTtxBnY4QkVaulY4bBVWdxUUtqtXQG Pk.cx7dk6+khGCec9W7xySCVsMWcvlM5.mHnUt7zNSnXkWXUh7YWc1U7fMaW oBmCu9C6QgyLMJsITDuMp2jlzt.Vq2bZFa5yuhHF8IbweDxtHegNTBTZLYfr gRvm9oaiBEhjyOCeRYiN4joBXLLzdJRwmpvZUkcmpRMYW4T749jHwwPUcjSV +dU5yqSDDtKuKpKqoNkaQq9IjC18VOcOx0KKjohntihstwneAm9zxoJGeU8S bDQl.MqKLuIRmdPn725QYxOzFUmxauIlX7hyEwiv9xUJ4shFjkvZjKC0yRgr JsCmHERcnCEU30QNR3zZAr5b5yG6+P29Nbzfm1hDSCQxA0iLAmFYhpgLwXyq LQzPlnv4UlPZHSkoDx8GRyjymZsoomRjlOJ9AiJmPlfylLwX5JSnYSlr0Qlf j4criYbVLozIVjJ9xud3+AXfMeFE -----------end_max5_patcher-----------
and with the playhead…
----------begin_max5_patcher---------- 3043.3oc2cssbihiF95jmBVW4pdbmAcDXuZ2miolJE1V1gswHW.NomdpIO6q P+XGH1.xGPVIUpx1gie5i+yRB822e2jYxeJJl38u89Cu6t6uu+t6zapZC2U+ +2MYc7OmmFWnOrIYhWky9eSlB6pT7yR8lKxh2T7rr7MOr+tcJ2VlJJK+qMB3 FLYYpLVc3+Y89SVnOU0k66Q6Ookxrxr305SYx+MOINs4dJR9kdOHzirHFJLn deYaWmjotYZLhq23l3x4Omjs5obw7R.BbB8Q+odD+npuB8q9Dq9bOlTWH.15 qDpZi+y82W8wTCIHUiTcQFfCl5MYVb1pixEAWQp.0CU3GnoBBo5K1PTA9LnB wuVDO+scf9k378sl3skxmEoadRc.61epbtpE1.zM3DxjS7AMig0stnvpunrc e1Qqy+LZccnI7s27PO14i+hjUYUsxi7bmZGUfcLCGU8U.cDTAlKWuVjUNzC9 mzb1AVRJiyK8h2tHQtWxHISLWtMqrYSqAywriFCCooLpOXCIDTetpxTahyDo Gi2zrxqIYutP95SsNpYx7Eh74xTYN.S+GIQXDKXp5WA6+EBEvopegZfW3T6f T46uAqZbw0LPqOZ15MiFq4uHsgGju1xC65patVTTDuRbfvUpTtQgMOMcV8Oc pndTUTTfkbSgzbClpcSEo4KT3UUGsKFx+Q1owIXlkraE.bBhq+h8HyZbx2Qm HkvsDkvAICP.YTnjR4pUohNa9IYGOdNxwcXiFzsDhS14P5p6VpqPWSV8143u lPsjaGfYvTBD5p8XlU4R4Kh27V+Wy1tboxSw.rzz94qqogBxv7EDcOxGMBQ1 1kkhbwlz34BOUpP9b0ip3jkmloivS0CSUa8zrZDvdOvODhMB9V5PbRk4yhJh S8vvee9dOmrXgHqoJfgDE+5PT8n3gCgXbnZ4oHh8T71yTb5EySrQmmHP.cLH ghna.MQtbwI53KNQ0IbGMZrzGR6ZOMotxyD4dxkdEhUUGQwjiP.jwWNgCFa. CPHzPbvYkTtts1a7J8U6kP73yBH5i3p.0B3cT3EUCJY8105qixRo+UyqUWBH KRT4CkobasLWt1at5PdmBaRN9VfbzYUGEMdRHcQB+RJWejFcPz3aX.jAf7an 9igVwwsedhY+Fbkb4x5lJPPUUv9vWrAqNUyKETJi61yAJzjjJdQjWjHa5R3t IueCCwZixHv4UTn1zTHuQcMpJ.Rpb9ODZhve2FWHVdZWE4FQ16mg9obqOZej IYaxEEJ4z3xZv27NGuMs7oiS0s2+RUvncdxG8I3cpn9SVHyp.QqyrZy6tcpf r01tZhZ89yh2bjSsTJSmEm+RRQxrTQqmDJ413rj0wkhxD.MX+8mWx5M4IPU+ 1uMQVr5Z7bw7bYZZqKErmWNxdVHdIYt30jEkOquVuyUs59iFRNsznZs89zrZ qcsr4VGnuPNnVvzlmb2Or5VkqyTB5Ns.sxFGR8lfqJlPSMutBR4tclifeL8L Ix1lkayjwkdoh3hROYlvaSxOEodpGlhlG6wJQ7AjJ95Spn9IUhOzyCPgZBgB eR6kT8uhjZORmndkNaVWmCnQj0kMg9uASP2DQSMLu.kYRzjtZ29CnSx0Q.QX 002q9y9Z2M1yNUpJbLwNRUuH94lbuGRP+1CIXu+Sw73z370xEBu9k25l6Brt vFGigBj.EjL3f.xFYwsdn2ROeuYdKGT0cWJNSGTzjYcShAQPA7gH8nbCXWhc X2uqhL.yt.Ecr8sLFR0zHK.XSj6HqtId9OThq5+NOce7HDDDc.ceH+y.+5pi F5P7oLsTNON2.4yAU6wL6GdIzWlbXXGXFyhsCy9MO9i3PBJ7hz8CuU59bDD3 dzWTY0H6GA.Hcxg9hz9xps6co1T6bUlP4S8VluZlJVPVk00odpDtqZ1dXUKy qJUn5B858.x6Ar2CDuGnmmMXzMf8gLPCfxDSfgBQydnZjkq6m8kEhhM4IkBu RYobp2h73WarA34wLkuuFa7Lod6aQIHnQju3PrSw7J4dfSKl5ofrLeA7u0JC WPfFH6mjAID5GHV8H3HxxT8v4z1WI.PjyMiVJCBTMzoxnsuhOozoSmuXxwIh Hqm9DFFutgPExIl3z22VoOc90TBcCT.0YdRgdgyoJ24lmiKDdxkKKZqh1rqX PVWviAZqTXDUGRsrfWeDVqdr7fwwp80QIv.xiCieDpKQU5vDkK8JeVziYMdn 04LJTIHNidSDu5wt1u6ge7BRLja+txg.i.Nd3soqb5gKaNDvNuX03D6qNWSm LnacYtSd1WbEKY1W3jBi8oZ+HtTEK+WeWgpyuawhtAwv.cCOLlfINjf4u4w7 Oelz9I9hgQILCJRIg5NLY7rBkR9kLTBBrtASDT9bJTAGJwcXyuov1EQlDqKZ h1Mco3tlR90uydo2JE+.HcZmpyd2jK1HxVzrdtmIsZ+Pl1Qq0k2BS9J0ujDr 06WxZ9rdnI7kseII92fXnf4eZ3W09kL3VEgOi3b8K4uCCn9KIBf8ysS6mwDu NF0ul59H9MKpeGT2uzal9u9cQsaPd8wu6sT61uzwPVUHLL1ZBLfkoVKcfKwV PvMKY.D20pr2Uvz5Mv..CDFYDWyx55hRYQ75MEu0Kg99Dudf57Y+Z.DATKD5 ePj6XZMIao7f4z9.ttRSJZ3ByvezcUDr+SCXtmhhp8zQLvvQncdbr8WIfoiS zWWe93reUZfovGpdTcPbmA07Fg3GmjzdmA9d84ThYN6X7iO+6GYqyy1VVJyF Vlry.svSN2tZ2uwaFIrsKI0vCMnda1A3ycrAAM65I.qqLzftrAJUvYOPopmk 7e5XiAhXldt7ANLzA4C3100fzgM4xJeZnOw3Vq+schesJtT3gN6B+a+P+Cpe 8yU+VX3bC8+84+rtL8GepDqu8U6+3bbgba97cbzNsDu1HYgnnLIa+jA+O1Or 49vw896+jlDy5jEajIYk03y6OMRn3TgMxPTW0S4JYEWA1TSwckTpCQ2jCXwN naGSJoBNjOezcU3bloT5f7sQh2tGrMR718fM1Doj.2xXRzoXDzcLdyM0UY0D I+bvc06IYV0.DPGavnzFvmTavgjYBL0hXjSgaroVDqlSmtDtYFZRTKPQbGbG cJ3F4V7suo3F6V7sw31gjuCME2L2RNwXb6VI9fLUNIf4VwXE94D2llvFxsb6 fB9jJlPLM7D7mSbSbKqIlBa9mSXicKbadMBcKo6fOoZkTSwM0sRRyzbFbqhs wM0kiSoSRLr1OANWXIXSM.5PYKXb0GbKC2Fi6pACuK4nzTcRhaY3VSiFiara w2HSwMxs3aiws6TkJpo5kT2J8LZ3oXGzgBLwz.Xwtk6Rro1AYtU00pPC2DX6 VoKXpPhaIiXpoD2pOWoQmRnI9eBMc6VcDEw3N9ysjSHlJeSbKSfbiKQkiga5 ov2NTMpvewqQEk74rlf5XFcnTFHeN6gAi0KotkdIkdJczpC42gcJczpigajo xINFtMpzft0PdjXboptlx20aT0.f0jrh3WDKdRcaDyKeJtrLOY11RXHh2nAz ync+xWIuRkyhSqWaz1eL628fW1is5h8wse+6rvItnzsLUlsccmKAc6mFkctX MxsvR.KCVTsqWj58uAKkvKx2ttZkp+zWKgY7QesDFl2DzlKnmW40R32eIkNI UNONsgvZ8J9V8KE7dWyW2M+c28c8hjyQoMD8TW6x2spExpeYF5u+qNHB50aM bDlWmFrFcOr9DZ7WdOg4bS8KaKLcDTmtvE.V13SBnH9iArcyR3ahMk3rRY1Y XPgM5FTpkP3MVEXut1StXuNQiuDB2WOlywnSWBQeHsmKZ.q7wXnp4lChcJpU nbFUWmCiY53wKcvSJSwT63m6.SQ9VESe310Q9pUAhRsKOMDlr6it1CdPiBCe 7oIpChIh6o10tmtbDLwbOLYj3jShHj4HhAyCp50sFVXv9+6BwZfg1rPVi8BM ARHq9.MzDUwPbGXBMNXxDUQN2tXxDIeFxtXBaZjBD64V1f.pB3VUDmgLklrm k.N2TLgsFlBLASH65AjwcNKlL1HCI0+7O2++AKlKfoB -----------end_max5_patcher-----------
…and I was planning on doing other things today…
How do you think this kind of approach could work with jit.gl.sketch? On the [lcd] it seems pretty snappy. Maybe the GL isn’t needed after all… with jit.gl.sketch in the past I’ve noticed pretty bad response after this many lines are drawn on there. But it would be pretty rockin especially with the handle and other goodies the GL world would provide.
New Max object: groovecirc~ !
I think there is no need for Gl, as you only need to calculate it once. To draw the playhead isn’t that expensive…
Wow. Pretty Impressive and creative solution Emmanuel. Thanks for everyone else’s valuable insight.
yummy, that is pretty damn snappy if i do say so myself. just think on what you could do with sectioning off the waveform when you have a portion of it looping.
Emmanuel bringing the pain hardcore from the brain
Thanks for the nice comments… Using sprites like in the second example makes it reasonably fast. The major problem we just take samples evenly spaced, and not because they are meaningful, one idea to go further would be to apply some filter lowpass filter, or something like that on the absolute value of the samples (or calculate a RMS) selecting the samples to display, easy to do in mxj for instance, but too complicated/slow in patch.
Nice patch. Rather than calculate an RMS value, I think I would just try and find the minimum and maximum in a given batch of samples.
Nice, Emmanuel… lighter weight than my JS/OpenGL solution, I think. I should do some CPU comparisons.
that is definetly very easy to do with [lcd] or [jit.lcd].
of course it will lack antialiasing so when you just draw lines
to lcd you might want to make the display not too small.
That is the freaking coolest thing I have seen in a really long time. Bravo. Oddly, I kinda like the java free version bettererer. That is seriously sexy and oddly relevant and helpful for the kind of thing I happend to be doing at the moment. Seriously wow.
Actually, it should be "more bettererer"
That looks much more bettererer than the rectangular waveform~ . Looks like a coffee cup stain (from Java nevertheless ;0.) I’m sure it will become of use in the future-seems much easier to navigate and lots of potential for development. nice to see so much interest in this topic.
Well paired with say named transports or loops of different lengths (or just different speeds) it just is so cool to watch the phasing and convergence points… or maybe 2 of them superimposed with waveforms in different colors. Sexy stuff.
bumping this for a colleague
This is really cool. Want to try with Elastic~ and It would be cool to be able to manipulate the loop with the playhead.
most interesting thing coming to my mind is : it really reminds me of the gamelan circular notation system
I caught this thread when it first popped up, came across the patcher again cleaning up files. Would it be possible to do this with scope~ or with an overdubbing buffer? Same idea except realtime, I suppose, but would that be too resource heavy?
Forums > MaxMSP