sysex hijinks / custom UI elements / perl
Fact: bombarding synths with randomish parameter changes leads to fun and otherwise crashing hardware in hilarious fashion.
See attached example – this overly complicated mess of spaghetti allows you to map CC parameters to sysex data that drives a dave smith mono evolver … I can’t stress _overly complicated mess of spaghetti_ enough…
I’ve made similar patches for quite a few synths, and it’s a tedious PITA, leaving me longing for a streamlined solution – in other words, some sort of interface that allows me to abstract the process and easily switch between parameters and synths, etc.. a full fledged midiQuest/unisyn-but-not-a-piece-of-crap type deal would certainly be nice, no?
I had hoped that there would have been at least 1 psycho out there who had similar thoughts – that there might be some library which would help streamline the development process … at the very least, some lib of UI primitives that would save me from crying myself to sleep each night as I wasted weeks writing tedious jsui-based tools. While something like the iceUI jams look interesting, it’s a no go for me due to my using Max on both Mac and PC.
So, ehm… Suggestions? :) Greatly appreciated…
Also, I’m a Perl programmer by profession. I see that we have nice implementations of Ruby and Python, but nada for Perl. I realize that Ruby is similar, but … what can I say, I want my binky. I spent a good day checking out the ajm.ruby’s source and attempting to find a working java-perl solution that i could think about hacking in (Inline::Java seems like it might work… but so far my attempts to get it working in vista have been a no go) … Any suggestions regarding making this a reality would also be greatly appreciated.
Oh, and I’ve made quite a few other tools (that fortunately look nothing like the attached) that I’ll likely release in the future – Among them a super in-depth midi LFO generator, robust ‘zero-config’ IP midi networking tools, etc…)
----------begin_max5_patcher---------- 5138.3oc6c01aiabD9yW.5+AFi9Qa28cxMHH.ooMnEHWS.tTfVTDXPKQ6iI5 sJQe8bC5+8RtyPYRZQqcUWtTtGufXoghhZmYm8Ym21c+0eym8lKtc8Gy1cQz WD8Ohdya90xq7Fy0ptxapuvatXY5GmsHcm4FuXY1tco2mcwk3GVj8wByGP1e oUOrLe0hrByWfUe074laa8s+7Uzl255GJpuWZ8kua8phc4+6rpKpulTeY3VK dbSFzlu3hnep9y1jVL684qt+lsYyJfOlxjjxubjfFW8BUY9q7ZxSeqpenUoK MOuK95s4oKtv7I+meymU8Z4KWZsj41GJJVu5vRA5AjBriIEdF6da5p6OBKyE FdkmnMLaR8ei9oSlu5sGmQDI12oyCTmt.XZTBvzCam9pr+UIy8bYyWYufQ3K AS9pBa0NLhHFLrHdnjMyVubYVYa5YBmu+ghMOTD8c4KyKJagQe6CNLrQ1i3h bDw0gjGzXClfRV8WM64hipl7r0KVuE9BjqEWV+mjx6skja682ZwcE.cu6SKx rW8SEnwkbNEFJpBgtmqfwwCBXLK4ZYIWR1CBUCE4evXGl9MIv83bRHl9sWIy p0QEuOc0urK5mSm8KU2t0RJcnjTLCfbB27Ww4kcJTxPL1fIXAarA0ASSClso B44vfiG1kEMaw5Y+RT9pcoqxKdzAYEKXxJV3Fd3mYUo7f4iCCLoSdNNsJULH yqFC7rTbt4jCUFpYLzbPDHGSub9RGjLpv6lCneLziIJYmay15vXhmr078Oy+ hjXhLI4xC9tVNRb68s+dpx+Ee4AeWquWagO6TD9W5VjH5EXpXa9tYoKLOZx0 5yB7pjg.uRv.EQs+BJiyJc5OoT5..QtbTT55CszXmUecZGByjQ7El4cKVmdL TSgDlRgfFTbdgZxneZn.qo.bIeLUfcsug8IQei.PUXwhWS8M7OM5aTwuBG2H 9jnuQRTmAia5aR40OrpHaaDo7+nr3C24IOTmWet5INQIY8+eb+aDDXRBgYNZ Pke.motGI2trEUMAGLmoOW.cV2ynzc4wSEHJmXjPXQiy4+cPx4.xyTH9.9wW idT.1VjuJJ0AFNIbg.nsX.iOx4SWudXBotAfUngDfqq+6+Cc8txX7gIWAPzs 7mFsyrEcvXqXo23pdy29tEq+WYa+7nqt5qbfmY9LQ6PVeohl77fMbb2h74G0 Nr5VdU.depw2T.vctS+Hc3DNDvZpY9nDPslzTJrdadYOXZQdo1Y0uT3zvECY R9.F9rIIe7PEkdZcFvoiZR9xVkd6hrncaxxlGs.q5FGDWgpDQnXZvMiRzxyq zfyGDy0Hr3pQHLJ0aiP50d8pt+xdeG53CUkhPgD5wTP8ZJOuB8H+SiXmSX.9 TB6LzMc2x9tfDHE2ZYlL4bL66B5v.YofI0omUU0lfEr9bvaRNaTmT+1G2TdO m7j5BdXGhfSpqOulTWHFlXv.rLe3mTeVwh7UQOFwiZWwQGgskgrXLPggYtco bjBV4Gua81koEQLAIhFwYk+gJJohcPpoBuTCrHhBEPvHTp96de9cEQvvpnu+ a+VGjVwdL9AbvlvDBn9PHmYSzNLkMBvswRRvfQXtAinC4.BPXHzmcvHb2fQj jvK0h0mSvH+EGDVTuhhX3+XTLbtghHYCCJhgaUpjfghPcBEQxC43ATXDetgh 3nsHRQ3EZZv8Vpdj.Q1lsKqFDwAIkzqHHljPoDrySDD0vffX3VYhJXHHD2PP hC4fATXHO6rCg4HDRRvkZJT4YnsCoOw1lsYaxVMOpDGwA4TfVEfBX4JHXfl0 .GKQejGMEITRFcUDGEXRjG3Ht067Oeya+C1q0n7ngqHiKfUqtjNNCdpwlupD pQ4fffcgeSkwQQaDwfotvx5WdlU1WJ9.LGsffrr+lh1Y9ZHBkJOFK4Z13wWx Agu.OQiG9Tn3PAZpBTh9w0CUs15Xgm+tr+4CYqlksM5GR2V9iU3RRgUdL7lB vqBpfFDuJ5UUQ6fpRfJM.tV1D.XrTUdaZ4TemhVh1mVA.XgXJmGMsDGLPLlD JsDivHNH3I1XejzgcdFZvsORCqGCYPrOp2wT+g0ydX49pczd4kOqKUIrZQ6O qRuJ2.nLbZ4zZ+R1i2rb87rd1waNTQuFy8mzE21NvY2z141RqmW1Vj8q4+xu R9hrOjscWcExdY8GzZg5Y9cg8KDNTswrpfXs+WtpbrLqF24M4s2bw7r6b74r dS1pm9JFMnV+oysluZSUXLaTius9wSeXQwMMkvlhD+P2vcoyx5+qeXg5at39 s4yWuppgz96Vc85ex+QKCRaeKqR2bnudw50KtMc6Gx2keKTdXO0uTpCmtJeY ZQVQ9Rrhqe5alubyVCfUyGW4jroySKRgVSyNsl6WkMUKZMVo8GzYLycaxmsW dzKfSu6XkuvHi9FFbEtHjLJQJrffUMksluXYyp5WqdL60+7l6uX+minC3aaH QJmxoVhfNOXfPpqw8zOjM+lRFnrwbSZQw17Ruef6u8fpipP87OsWszxAV2lt .G+tWQ7BmzSO5Pg9fQ2KoFB7zcOtZ1MyyVj93MU5xt.qJ73jVLZCXUaSGiGv UYP8MJfcOx86uGBWwUs54LgqNgq9x3pjFvpPk1wo59fU6NzcBd87Cdcwcquw TNq2ju5t0N.tJ8sGA0XqDQvvVSveXviDHpG7V+x1gsZyyYBacBa8kwVaZxZB cezBNL1JLtEF0Ngqd9gqVJ+t+9rs2rKaQk.c25G1NyIiWUdDeEVb5BFeuePA Jn.3dAAjWcLW6REw4fBXyyYBfcBf0ZiWEvN0fIprGFfsw.3I70yO70kqm+vB yP2ROL1Ujux79c2rI89ra3NfyF6ebVBt4.EGLCYEv57ActGfIYvNagSFxZyy YBmcBm8HAeEVX4P3ADXlAE8AzVNR1LDlOAy9JClk4.Lah2gY4IAGlkxaTRfX LTkJpyvr17blfYmfYsOdAv5hWn0GCkkMgx9JCkk5.Jq1+nrpfixhVelPZX+f jKcOprV7blPYmPYcHiW.Ja0l+5KixRmPYOqQYcNbrID+irh46hICGxJTDC.V NGVwFRlxcjUKdNSHqSHq1frBQI.V1PB0KFk.bT6D154G15lsquea5xRKVwx0 +lJ8Tv.VoCvrTuWUAXRuRBWkvBKY.gR23nXRIbNJAV8blPYmPYspRXAmfhoP 78o8AylcylalKmPXecgvJb.g06qji5zcENDVbi6URQjQH9ohSHNrV7blPXmP XcFgUjPdQDVwDB6qKDVGpnfDt2WqbIgFgEVZmBEdF9.gNU37hNvlGyD95D95 IfuxeQ70oZI3UF9pCkRPhv63qpfGi.3rGRHkMRQkT5bjXs54LgvNgv5PjXYG ovXM.rSkQvqL.VGphfDuuztpS0U3.XE3hvJAOP9f8OxXmKh.qdNS.rS.r1Tp V..aLLIMQ+h.rSUPvYD.6h0oygi+Va2vbR71t5lE6UvX7KgEGkZj1Ygd6698 NHd73ptPUWUNAYi5rW9+6bh+8X4PKiCI+26NTFy9cnrj.s49p3wAbKrs+8tM g8hFcf171jvdgIJZXIiyt21Is0PqogR6Qcc0YCXRbUUDDGh8GZ+JmXgRUhcM u7eTdv1Gs8qbJPGJax5BRYb2pwEtfFIBqnYbQiVjda1hnO5flSnNRig8gUnR l3izoevsOLe9iQ8n7HNjzoOSfENKctrw++hRpXXuMP.apu3gWevEU+6EQqJd ejCVDoi809Q5wkQP13vk5KOYTEQNrs1pSBmHBfiFYQTw62ls68NHfBjU0nvg hKqlwQ3rLeddY6NJ0dzZJwm0vOAbmHIgDButc4Ho42EkuK52lKpey9qvpeCu 7M8dp0HNnniFtisFFmzzX.wYvIugvEsrvezangiJLZH1Yo60txEq+S4WFsJ+ 1aWjE4fMlTBOjVQAmmZJ13Xh42s6iQezESLoj.YBNUz7bnerNs49luIpXcze 7CqW7grsQu6wcYNIq7XhqheJjpu91ixeA4qKhSOtEjIaskGLZAo8OGktLJe0 tzUYtHH75oprFiFI4IP6+eP05GfjOeJGXGThGCGt.KfARPNvN5+v2sHcaQoc V6JVuw4iOSJQ60yOS598KuwTjb80WGsaS1rxmdzh74QkzNHRnDuJRfjvhSzM ZhjYOrca4GDY1AdKEJKyKbQj3yUKGQ0zB.MejjHe4UWEcW5tR7iO2EIgOWUK TLeQL7jfejjDzuHpzbH1WD8cu62Gw+hn2V9hn7ZtbfHRodrXzU5lIZjJFqyv lqt5qhd6W+m+KQu6u+t+3eK56+q+3O7W+wnu7JWDKd8nA.NplE3wlG6jjKv8 1rbN1KmL+lUePGoErbnQq6qi3ZD+oe0F6kLMtKiy7Mus2mOed6p4oJ7JaVW5 3I1TpNJ6kFbRf2nXLwdFMddmKP.0NzZPAhJfK2gr7ogVFQUGhVBqol90mrVN wj1HmXk5HQDWDS9ow09W8vsMtqMMJuDTqJW3ned3d2PGRdB1ivLIN2P5Elha CSUIuoNwTX6TPznhDrhoaShq6DJubBNIR5ElRHshqDmPekrpklf4uP.G9bcI Y0megx8j9gszVwVIm.aY5.hiqUxf4W6Phmx6nlogzKrkzJcPI6DXKdEaofE6 DEOmM6RhFeK.+fUJugkYEaQSFGrrpQHriBzxGkFW0AXuEJDpSPgfZTHvIGEv lGUGRIddIKv0fbbhmTHnZawZOoIP3RPQFCiQWRzsaAD4rtjX8eW+nfsg.Ovy FCeX1Y3CyICeJMMgh0.jViF6HPqWZQVZqSsjfeHZMtFNQqm6RhOLEb3mzgzr eL6mAjJaTNXxwAsHwpFmZTZbTgU3rR2GWkPgAC0CUDMVJW6IE0FRyL2rvWJD 1wUmwR7SX9Z8SKpZ+MKG8nMT13HEsxHUpxcauQUQL9HnUocIkrV1dK8k0bVh UD6r1gfRpZoLzGz5Cfz1jTXqBo9lMj9gsnVwVDW6sBnkEzwAeVXEZgPcBJDf +UvRr8Ieyj9BA1JMYI4DZ3fGTPkd+j2WBe4PkUQpPJNgFN3iDFdn89WwBpEx UQN0QHQLQK6A8.RAFPPL3JcIIXwcpzPnL7l+tVYpmL4D5dnPlKQ6aQucn9xi VZr0cOivzoVIUowiSiyNE6QJtlDqZb5wQxkX87tNNXga.u3LLNqDv1y1jLMR pLlTYH8mkoGmsFG66sZX93D2JqFGMNiwSTCRaiVNqTk0A3DXlWZQTe1AB0OW aJYcrM0OmhRj9LHOT6BxiSyaGKUWmfKfIMF8FpDCDSKxRlAifURxgn06SMJ+ PjnWCRvAzNjRsu7GEDAGeXu1ckDrzbwfSTSp8VrKsJX1t6qJSYrQoBL1zaAq glNj39sKkg8ZcHEn8+By.ECoe34Ahkkf8jX4SWezEzljh0AKC6P6PhQucOKS 74HYhcijcRAMVHg7TCyuVO9qMoVCx.ja6PRI0hHTHzgVqPW+grJVSJ0XP980 T2Tq0KFg4fFjllonrj3QEmo7a36O43tr8m5IXRqzBGofexraHxnz3rZ3Kmex J.XZhXXUkzgDrYtbbIGFq6KfXtUQPhON4FgamLebbsytQRt23J6xQn.7EjjT CPPAM.egHvsBXi6tw0THGO6a+PsAzkrVwlaxNJyeJ1V4Nig4CePk41UZPNGw 683CnYbj1V0UShaLY02rvW1fKSrC+lbxUW.hFxgTq2gLAin.A77nKor1tHLV 19phnjhgiqMcPwLVS6W6PlDictvt0VWx5D0ibs2xgpjLbbsIl8IXLh4Pni6R Fi5vPmbWRrdp1y09J9xB0vw0PSUqaVDocIYs6MYIg064SgwXbMnDKZ59bB5. BQoNDoR2hOUZuwmLahmB24HvIElnXpw5Zx7RKBz2SrtLaS4uToFSGJ1S.Aok s+nToKENoBGFI1lh5sZ4QMT8eLi8GTL1d3DksnpmrIV+bJ+0CJryrxwIiAB1 vz3JGVBwc.2ffpIi8kTkKs1fKGMxss66Dtzu9qamDWLNtDKrZRCw3TCPB6rw ldFmPC2abXFMvIYfsEgVD755yj7bJJwWnzwVAh0ck6bb1iq06c9sJzlwM7LF ozP.zvEuigxOS7nFFVByUJi.lL.cVsozJwd+0dNY8JF5okqjubrQkLPrLAMl .KoXAXLQSJcLpQB4UqCoG4Qcr07HK7Yj09NfQHFF123Nw3FUWEkvq5VjXJHI j3mSo49xrAsUSvkLNFiYW8+qcOeRMJ+eQs+X3IUaSJIrhyD7CPgqFMkP8zih 3Km3zVYSjlLd8JG0AEsy1D0Le808CPDsZSIgYCEf+IsoDz8Nrs+QQ8UnQzVY ukVLd8JGuwwOwbuJ.e7wfs0gBpzAgH9.TXwivDvxT0WiPjVE7a0HNB4nKDYo yfpXL.wCdMjpdK3ArzsMEVEpBE2uEgpxtB5v4YFETvd2DYypZnMkh1fAMTAL rKJ9IG1EHTYnEssojH1U7dJ+vRVE1dkyQRBqJJr7Fwx5tCEfXK.q7MT9gkrJ JGwD2YIzwCfGHOiHF2.0T0DALXlJwoFLSfqjf9UGJP2qtuTvCa7mUxSL9y3o MIXibKBYbiCUSo2LP1pIZziSUiZYiKYjJe.qveziTogSraE1SbevWiZa.WVY 9ZvEmLPsY+nMJGnVGGywOfAi6IuXBZ.hDr5kkHQ.4GNYjzesyGQ2wYIfXDLb mQ2S3OyrFfVsHIFBxHDpMvjw1TTFoAGwH9bN7Aoev33Em.FTg4jqEEEpShZN xa6pOVlob9YbhE3mZhE.CWAQZfMa081LG1bcf.Gxq2ocdZmKu46Ayi.FyaVG YmKFm.iU6hAuQZ3aSgKUCvLVj.NNefJIA6BSBpKutyo6c4EY3CPAytwe16O3 lMT0EJe4+B.nTd+D -----------end_max5_patcher-----------
Quote: email@example.com wrote on Tue, 08 July 2008 17:21
> Also, I’m a Perl programmer by profession. I see that we have nice implementations of Ruby and Python, but nada for Perl. I realize that Ruby is similar, but … what can I say, I want my binky. I spent a good day checking out the ajm.ruby’s source …
Brave man. Let me just say that ajm.ruby’s source is way more complicated than it "needs" to be, because I kept adding features for use within the Max environment that aren’t directly related to evaluating Ruby scripts. These features are useful to me but weren’t required to run Ruby in Max. The shared context feature alone makes the code about twice as complicated/confusing as it originally was.
My point is, if you want some basic Perl support it could be a lot simpler.
> and attempting to find a working java-perl solution that i could think about hacking in (Inline::Java seems like it might work… but so far my attempts to get it working in vista have been a no go) … Any suggestions regarding making this a reality would also be greatly appreciated.
It looks like Inline::Java is kind of the opposite of what you need. It "allows you to put Java source code directly inline in a Perl script". But Max can’t run Perl code. It can run Java, so you would need to inline your Perl scripts in Java. Or do it some other way…
If you want to go the Java route, I googled a couple projects that sound sort-of promising but look immature and haven’t been updated since 2004. Not a good sign, but who knows? Maybe one of them will work well enough for your needs.
First there is BSFPerl: http://bsfperl.sourceforge.net
In case their docs are lacking, maybe the java code from this BSF/ruby tutorial will help: http://compusition.com/web/articles/ruby-eclipse
If you replace the JRuby stuff with BSFPerl it should work similarly.
The other Java-based option I see is PLJava: http://search.cpan.org/~gmpassos/PLJava-0.04/README.pod
Another approach would be to embed Perl in a C external. Google finds a few options, but this is getting outside my realm of knowledge. This option isn’t good for Max 5 yet because the C SDK isn’t out. Maybe soon? I’d guess it may be trickier to get this approach working intially, and cross-platform support will take additional effort, but it might be better than the Java route in the long run.
If it really came down to it, you could write a C or Java external that just execs perl on the command line. But the integration is very loose in this case. You can only communicate back to Max by watching sysout, but maybe that’s good enough?
Good luck! Let us know if you make any progress.
One other thought on perl:
You could write standalone perl programs that communicate to Max via the network (UDP or TCP), possibly using a protocol like OSC. Maybe it’s an easier way to get started. This is how a lot of people integrate with languages like Processing or Flash without doing a lot of extra work to embed them inside Max.
Er, Inline::Java::PerlInterpreter – Sorry, should have been more specific – Slightly confusing module hierarchy there as well.
Very interesting tips that I will definitely look into. Thanks. And, hey, credit where credit is due! your ruby implementation actually looked quite understandable and concise. The python bridge I looked at, however… yikes! almost as scary as python itself. ;)
It’s heartening to see that there is (at least a tiny amount) of other interest in using Perl within Max. I’ve been consistently surprised to see no talk of it at all, although I’ve never taken it upon myself to start the conversation either. I’m certainly curious to see what you come up with.
Recently, I’ve found myself drifting towards learning Python as an alternative. A little scary, yes, but possibly wouldn’t hurt to loosen my grip on the Perl security blanket a bit.
I’m interested in Ruby enough to warrant the time spent learning – Python I can’t bring myself to. I spent a few days rewriting that hacked-together python hook-in to Live a few months ago, and, (although successful), this reminded me of how much I disliked
Other options as far as languages that are tightly integrated to the max core would be such a nice thing … With perl, you have the joy of CPAN, which often saves tons of time and keeps one from unnecessarily reinventing the wheel. Can I dream of a ‘perlui’ external? :)
In any case, I’ll end my b*tching there :) I love Max, but it’s shortcomings do frustrate me more days than not. As with all things in life, better to try and do something about it than complain.
With that in mind and in regard to the _actual_ topic, I have looked further into Perl integration at the "Scotch Taped on through Java" level, and yes, it is possible – I’m working on it. Hopefully within the next few months I’ll have something worth releasing.