VST open bug —
If I create two [vst~] objects, each of which uses the same VST, and I send a message to one of them to ‘open’ the VST for editing, the VST opens twice and in fact they seem to be sharing the same instance because saving a patch to one of them seems to save to both.
Any idea how to fix this? This is happening with Max 5 (I haven’t tried it in Max 6 as Max 6 hung when I was trying to open a VST a second time and so I had to revert back to Max 5 for my project)
Has anyone else seen this behavior? I’m happy to investigate further if it is unknown but I don’t really want to spend time investigating a problem that is already known about.
I can’t repro with Max 6. OS, computer model, version of Max, plug-in used?
Sorry — I was using Kontakt 5 with Max 6 (release version)
MacBook Pro running Snow Leopard.
Kontakt 5 has some known issue. I’m not sure this is one of them, but its something that we can look into.
Does it happen with other plugs too?
Will experiment some more then and let you know — this was the first time I actually tried to use the same VST multiple times in a single patcher.
OK — this is not limited to Kontakt (nor even NI plugins). It happens with any plugin if I create two [vst~] objects that use the same named VST file.
However, if I make a copy of the underlying VST in the same folder with a different name, so that my second [vst~] uses the copied version, then they are completely independent with no problems.
Sounds like a singleton problem to me, a global list of VST names used as indexes into loaded libraries, perhaps.
(I never liked the singleton pattern, I always got bitten eventually if I used it in my code)
I can’t reproduce in Max 6, so if it is Max5-specific, it is highly unlikely that this will be fixed.
Please give it a go with Max 6 and let us know if you are still having problems in this department.
This is happening on Max 6
Can you please post which plug-ins you are seeing this with? We are unable to reproduce here with a handful.
Also, a patch would be handy. Thanks!
Hmmm, based on your inability to reproduce, along with the experiments I did subsequently, I’m wondering if this is a problem with abstractions and has nothing to do with the actual plugin used (unless you use the same one multiple times). Attached is my GenericVST abstraction and a separate patcher containing two of them. This is part of a larger project I’ve been working on to manage a live rig with many external MIDI devices and the idea is to be able to treat VSTs as similarly as possible to external devices in terms of control. For example, you can just feed the standard output of [MIDIParse] into this thing.
Here’s the GenericVST object
-- Pasted Max Patch, click to expand. --Copy all of the following text. Then, in Max, select New From Clipboard.----------begin_max5_patcher---------- 2821.3oc6cs0aaajE9Y6eECTPQeIVkycxcWr.EIEEAnMa1jr4khf.ZoQ1rQh TKIkurEc+subtPK4XwgCooGSYu.IBQTRjy4aNy47ctLS9iiOZxoYWIJl.9Kf eCbzQ+wwGcj5RxKbj48GMYU7UyVFWn9ZSlksZkHsbxK0eVo3pR00+wMySx.I o.T8GktYUR5RQo52AMWbcb4rySRO6K4hYk5mKjExlF7R.lHekgkuhBlF.9r4 2jLW8DxN82OIBVe2WjkVlFuRne34IwK244lsor9AGry2uH4+n99Pzz.4U+yi OV9xKGJQG1YQmfwNK5AOhhtRZ1qzEXQ53zHkzEnjKZ8q6S5BY6WFpAO8kJud sPeumL4l6R8zx1oh2H0B8lThiXNKkjgUJg8QJ0OjtqpR4RQCxwsKmbhcMx6J L+iMk8aNqmRiYRCxgsKMPXejFn+z.QPhyZfg10.OOY9bQZOzI+o4IkfO8gON Y.Mr9qu40uA7pyiSSEK65LLOBovD07KL.YyzZHeD5U4immT.p9SYdxYmIxEy AWdtHEnDU40WlEOu5hmbxIf4Yhpu24BvkY4eETlAhmUtId4xqUeI0mHmYLOg kIohYYazyajNBqz.8BlnPEtRUpbLTC3JcDhquJKWAGfpQXkXANuBamtWrA0U iJTlRMiqLsDET6YeuPC9QDZREWVMFtCxT.dA7KUHyuJJJhOSzYapAJu8LswH Hz9RN3SN4mDoWYD3h3G7za5GGo4xxbY9mG8jC.nZ+uz.tKxe3SO4mS1gfXax O+Im7GoieKh5h3yFgdFee7kfS.Ehz4f3zqAqzv.35rMfkIeUHIVXnR.Nshfa tPQwHIsr5WTwDYQVt5GWgJUrTxqjoRQdQ0sZN3h3kaDE60IKsqnbMyC0qDEa DdSggPe5Yk0v0GhBcQMaDxxH2A.vVvND8TenQ9CrJ+ntJ+ND0yCGzTBNETzY ytPEcSBWmqEq4Ph2YVWnlviSiSOaxK8CtLWrPjuL6xdBMTrxiLkYCZPvCJUk Bv6EEkw4ku9GeUegEMQsPhMXgMB4osNuxmyNxuwRxG1wmlyb14ZUCCocN0ZF XeDghU21Z4MXwK1eNmQVLfB0oDQa.EilRkuoA6EAiyEECHZvTJ.DSNbshFrv CKuImmTnjXQdWWVfQZUD0xAVjsEEjvAykhc2IlKWDeQ82+EuU9KtkXBl7Wku 7h+o70Jtn5q.97.piU8rNuqZYF7jQ2VrmFUxXOWTxzFfHQtnjw++JYspjYvS FqckLBdbpj0Tjou6lvIq+n04hpXMKiKSxRuk+bcXAZ24A2kZi64x0DfglVM+ t2ocGA6dy1cs7XrtBeRFKdKvHUW1DhBBXg8GEYDMoasAPBtWnHdDhhuIct3p 1TF0kCvfhz6gtnVIDoWT2STbDlw4Moqim8UP.HX5jtiI50m5rtGxsFDCcvbe jH0E.SVrLKtbX8utY0oa8g1n4M3Vmkzf6iFkYQcS2IWznH8EUuI6feQjFe5R wtZaMg3p7MLj.d0TX0nqMCgjfgAvqMDde.bbnW.bst8CAj2DamYKEw4cNxMh 1PHFqI7vsQ3AgOnXUWoLrVkF90qU7K65paHWiLJ+OQgVoVORy60lJ2tapG.I khU5K+2DqVWd8eu2Ph1kLLvZZiIcNFL78vxluxh55KzMOhRd5H9gn55sDny8 t8LoFbXEAaVw0qNMqyMXjgSKRS.gZM90CKqOyO+2mdQQ4zUIySlFunRatLay rNGOJSWaJHTSTCYmhF5vJhz0IUx6o8v3LSykfEzdVOv7wRG+FmllskZxjtVy NilfK8mHCNLcH6Vs1grQusuVvVIWB2wJg8Y8QXiQbKCB107sYOfpaLDMsMHx pSDH6YgSj5xOnKaqcmHzCqxOTnJS2Bv2ULc5O7NUtSK9guq3KUuewUq2KPgs jbScc5vQ6jTtFApnmG5NlB4oyJTK5N7Cq3etGTUqgkfv1opRYOafEjoyPBQN .KjmwVZzo9FAwNXoAyNrXs9dwprKL6UfuWd0uGrNWrH4Jvh7rUpKWMvVuobP 5GdrdkHBA2YuBzTCwSGispV0SS.TusibcpCNDoo4CsF5imps4vmdphtuwqL. CTGK.2ZuGQhNzpRobq4rqw4FxpL1jrREFDg5cVkwF5P5ZKwC6SRkgOl8HqD5 DyStKT9BjaPnNq5lz4Ia77Nig0JjlcsPPPc946DH1ULjzm7EJWd64bF1WtoF mnlFuzN0TzyB15l.XXtDnG74TBT4NnifNv7D7yhTQdbE2gkIEkfrE6reHFlc ZHwT.CztokuQpUzCsSN.yVowkDFRCFjDF9oO7QUSFAxxAxsc7Ocg7SFzN5p5 tWz6hbp2TYTn0t5ZjF11oaJKqbc1YcbSitrMDLKTEQcT.M019wNw3Tm0yQzA QO+c2j81gte7+kr348il.VWd.l0fAvjw3NlSn1f8UwAUVIX1sseKhrs+M10O IaazBr6ZouC0.WcG3MbeboCTFish2GhuP7.OEXJVw8eJvbn.nSHPOmCPOhyA 21TdSJrnnswlo2RM2ZGZ1wL4xYMX+2k.yB8leAmfFHBMLPCiuydsumXC2aXy CQZ9MUNSSLxd9rgnCrt+R5OUZVqeAYxvM0ww6ZFgNV2XeUTweaOTHn5FwgfT KIhrtOXGibIpHRJ59l+UOUqidlXUlQivFKPxdRuQh60NX0X9iYMz.7v0NZdq gX699XrFQhhZeeLhBO.MGpRoRxrObcZY269FMeKh4.Jw9YF.hLxa.mlMTfZ8 vYQaVDFX25HcbpeLjQdy0FMbIxabzfD48sNL6djkdi1fSR+vzPduUozNftKU m2fxBV+y+q27.E2MZaLe5y9x9EyGxPGSm4eReh4CMFOtfdsXQEZplCtgEu5z 9QkSjj82CA3NuSzoa0T0YBjzjaMzXjQqtR44h9lbLj4T5v547CjbPt8VtLOo rmw3XNwNBs5HChO.bj4pMaS4xbwlMbXpIhYA9MKo2Fq9CV5QvCS1QLGRVr6Q li7WAEZJHfrp0HctdQ0GOX5s9t8MEW3AoQi0K2z23EIDyVQwpwT5AErTEVv+ syZI0m905bkfCQVKqXmCfNrI.oH4rT4OZ2+k7uxxj+sc2Ryc3RPymSGZzPmX gMoI+6MhD4wyQvcOgNT2ZE2ju4+9CT3k752dtnHaS9r5GV8IVOXKfMWTTljd iEkeaK1Af27k1d5ZWKAySJj88iBs2uVgyiGhqim.uLd9FQe+iGNwuim1vG4Q 8tmFOHnCimHuMb3t.Ox9c1SpyxcrfaiGjeTeBcPcFy717E1EyOxdqySiGZjK iG+s7RdjQ057E0equj6dq1wmHuoOybd7LhVuyCFWyWeCH9fpO6h6c4wbgOcm hZitgGWu6h6Th+rO+MSEO5iGWFNT+wFyEuW9SYl4hxCyeNSwQtNdfimwCzej CkMCoaiG+LeAQtr5xeNKfN4b2e3C0Ixpb+gOtr7xeniKZOP+Yal5B7.8m0Yn Kglh7GUdhKyWD+MeAcgZH1iiGW3Zfo9a73RnEP+4cG4h0Y+McgcZ4U33Bd7m 1iKK18G33BwGj+zcPtPLj3QSyNQT0eKsbJnT53JtB03ANd7rCCGWpyH+kDJF 0kjNG52wSqDm8bMcvsMd725KhSI8gOtRhIwi4YwoZl5QuotvLjwFW0DjEMpX av8m6TtKvCxiiGz3pj6trZm6uU6TW7ty82pKhSpy9y5LCMtFOP13Z7nVt2ZG jLxJAGOZbk2mvfwUdeB8m44PWrG12z9.97w+4w+O.H0sIAC -----------end_max5_patcher-----------
The GenericVST patcher takes a single argument, the name of the actual VST to be used.
Here’s a trivial patcher that instantiates two GenericVST patchers. If you double-click on one of them, it opens a new patcher which has (among other things) a button to open the VST GUI. You should discover that if you do this and the GUI opens, moving the GUI window exposes another one underneath.
-- Pasted Max Patch, click to expand. --Copy all of the following text. Then, in Max, select New From Clipboard.----------begin_max5_patcher---------- 220.3ocyP9qCBBCDFet8onoyno.JI3lt3CfFWTiohmXMPg.GQTiu6ZaAiito K85869y2ku6TBeeQKTyYSXqYDxcJgXQF.oKmvyksIYxZaabMboX+YtmqDBsn EOGzPkJY0hkrM7YRDgpqrvM79F0M4JcFf1kD2AKkXxIkNcWEjftiHbbvPgGK PHLA+vHW1PAaa2PpCVAecDCF0u8iEZTKyAakoUJY1G5Vzf8BGzQcH7ZI3TkW qR0lgd+6sblUWqtYaz+0sYnOnTyi2+gkE4rpX+uvwB+sNFaK8A8IRrOlo. -----------end_max5_patcher-----------
By the way, going on the possibility that invoking the same abstraction with the same arguments was just causing two references to a single instance, I tried adding another parameter (different in each abstraction) but that didn’t help.
Take a look at your sends and receives. There is no distinction between abstractions, so all messages get sent to both. send/receive namespaces are global.
Ouch (VERY RED FACE)
But thank you so much — I should have seen that myself.
I just took another look my patch as I realized that if in fact the send/receives were completely global, then multiple VSTs, even with different names, should have all opened at the same time.
Turns out I did use the VST name as part of the symbol for send/receives which explains completely why only GenericVSTs containing exactly the same name got opened at the same time.
Can you recommend a better naming convention to use for the Send/Receives so that even if the parameter name (the actual VST) is the same in multiple abstractions, only the specific abstraction will be opened. In other words, is there some best practice that can be used to create names that will only be visible in a specific abstraction?
The irony is that when I first built this abstraction, I didn’t use send/receive and only put them in later to "clean up" the wires.
i like your whole project. nice patches. i took a quick look at the abstraction for unique identifiers etc:
-- Pasted Max Patch, click to expand. --Copy all of the following text. Then, in Max, select New From Clipboard.----------begin_max5_patcher---------- 3944.3oc6cstiaaiE92SdJHbPQ6BLwU7ltzsXWDjVTDf1ztMY6eRCBjs4LVM 1RdkjmIS61826yv93sOIKIOz1xcrjnskoblrHsNYzXSe324vycR9aO5hAixd unX.5KPuFcwE+1it3B8iTO3ByOewf4wue7r3B8aav3r4yEokCtD9ckh2Wpe9 msPjWjkFOa1cnxoYKudJJAca1xYSPKKDnWeyaPWkkK+UIE+oUe3YIohwYKS0 i.07vqxudDPPdCCXXbf+kx+km4E7POzaLuyzkyyVVNSTpoLOySWjKJjDXbYR V5ayEiKgAiR7UedJkNj466Gv2LpqGvqxRKKR9Ug5SfoC4QAATxpgMtb7zjzq qLjDNQOjX1PrefeDSRddT0i3zJipBhFmMKK2tYUxDMdlM5WdBlvFTgzRimqI sAOMOId1fMnPR5JP.qd1u+nGod4RK4nohakeY2ig9qyP4hqQOFOXmvMYWXlB OfGCuyx6VHfY8fAWJ++0Sxcfl9LrFMi3ZDLP8JwqNfgtm.C4..FaD0qJiCH1 knzrRTLZtnnH9ZAR9cbIZzxR4aMdNZbd7udWur.vmFpw2P+0iUsx9a3i6hQw 0bHJKRSOb8PwB6HIdR+IweC5wduU8Uh9FQpHOY7KuKsb5tE+wMC1Des7KyOZ e.66unooELTNnqgo0BgY92aEyV7.OqferCf+5VWMb3PzcYKQiWuhRYs.Emd2 sSE4B45paQIknowEnQBQJ5pjYyDSPYonYYwStD8KKKJQ2lTNUt5aTb506bUF 4DalwvTvQG4pLR.AFH8XPLVuXczpLuyfUYMuvpSVhPLliAPLvqCVgfC6OnqD ImiSQiPE6F6n6I1oFMkcYXwRKXINTKPxBzPpuWi1mwA8IJUn9S2.QZXoMngE .Z6AOX1gh3sfFZ+AMER24d6O8xW8cfuICNDMbgbld9w3GoFtPhVGIA7KAqey Mr5zdsadg8nQrOSa.50+Aj9MHoQKkssowSV682IxDTXHF7K3XMAEDEAAynYP DCe2qaLA4w5Qlzi894To2FRmKJmJP2FKCYMCMO9cBkyFkJX.sLM4erTndt5s DOpnLOdrBo2oWErNhkVk4HM4GhodgMnR1Cq4IpXawd997HHZT0WEsq3Sj90i vhL85lIY5vpRERG9j7jwxfuT9BFecbRJR4c3I0YO6WyfYDM9GnWChIAcoaad d8Hu3KU7gbzMRer0wHcqz6asi2Z3Wxo94z+4t9uikGF4bdX.UyBYFKRPVdvT bmvDibg4eX52h486Ow4AZWW7MZ54qdcmBiQ6lZWa5FjhTu8AcnT3SWNIICIk WHC5pUrAdfaaZic9zlbdKpOCOd8TG2YScFKz5otKz8n+zMGW39E.HNH.VKya WhNzemyCucHQCrhmqjBOKlkRkOVOKY6+rDOvc5fXg1qCJfYsNHXt78KKOLV1 gNY.52NEp3CXxfOOj+HPnbVI+E1n72zjISDo0Mw+5IR+EjQU0kVT9tm+UOG8 rowoohYckh0PufMYBP5BcSJVCC5QaJuRkfUUXP4IWeszCrInamJRQ5oj54J+ 6jO7IO4IRu2Dlvkxxemx+MY3PK00.Q6Dn52n3LMEczwBqbNjwfvpUdvmTCtx 6Qb8YY4Z3.IoDI4CtH2XHJGssbNjDpHskfHu6E2QUn4CkTPsGSeHrKePQT2k LoP7CNnxGxYfGuiQJuGdBULOnloAcrTUPTuhUdm.rhCpb3DhUPkM0ZIH7AmD E2X5Jriy4cPvCNnJJvfQdcLT42i9E7iw2hdBpPjNQko408HhJ6XyRd25zMq7 bP0xH4BnISRKkeBoeXpNnR8gUIndQbtj1KE4pJjOAcS7rkhhc5hAuqTG5gof oCngCzdZDTWrY7Gf9XX7tfQ6XQxdzerbaLGzoEkWBe.X3Qqr.+HMUruUovqK q2bsEjeeaRNqJDuIKsLvSeZiYsKnGcech3JQ9rracfHkAR3Pp54MV.dROBIK xkpxQ+nnnLNu7qd5yLK5dYESEGsGFz.n+L.26C3MlTWG.Ey2VwxlZvhcgtFh QV.LbQFxUNeUyZEOGzSo0oCYZRgl7E4NpcaYlFrExgRTSRIr81ObyCKhuYE8 73WnnnsllnA+Y0KO9uodU5TC7Dza5PYLnAmN4RY.VhCWmzk5Ex78+XRHCuU+ 20hTVv4tTVcN0+Cq8D+fZnJVDcSZywd2uKa1COT8M9TEAMgv8GqpzPUPrpHZ elP5eREFyAAibHa6PUL8COJTzGCs3FjEe5AghzdDEetLZw2eXBiPVjMnH+XP QdjoQAiNBTrGSp3xzEwieGxSF3Q2ntLQwoPCtZVVbYypM4fJALjp1vF2KL9N IP6kyG0lUi5jnfB5FpmJbOaknpC8zgHYC3QH08MZibmK5NQoffbLNHPkC6Am iFTAYQqf0UJEOFXkF1iAbLdlHN2I42fCUMfCAnGzj+fNYirUaznhE5LQtXg1 wnSOxvovNlDLrFE1n+ftHN8kRymK6lcJfQ+z19DmTJlCeSeoX9hx69KqYBxO nYe2ZEhAlkwdMtsKX98XpMtA5Z.WsydfMyCln+qP+NJSr84FipLq3t4ixl4B zyD8O3eAuw3x5wbSOY5uL7lhxgySljLL9JYDVkYKG6hH58gF2FCYW0zF205A FoG2LxKRjD+nZ0ee.sG.3TAj3vlCYmF35dBMNMMaiGFC5xlXyvxsoG17w12C kajZ6xVAtk0BG.W2qRFCZlqGblnPnEI+tUe.jPAL3Y25rJWSmb1m43ycFQVs gPgdHuYiH79rUNzUc4JzmTLb3m+C57BV74eRwak+7UuegK.JnAP4PW.iCZFo 12ZxP+vT3AVBggjC0hvSvGMt0tBVHzN0sVd+FXvi8dqSiM.zHQhLwL0AGLFb 1Gw5uLancRnEpun9NP8UscWkXd1MltT+SUO8SQKxEWk7dzU4Yy0OVNyWrr7j 1I1lSZJB0uRWpWWqXy6yV+QNMEH8O5lxAtJrSJDaAtwfp5ytz.xKVQa6RltL VbLD3wNJYW0D7D0iEURq5AUuN7VOYbHahrJhbDUVhZbjBp2dP3gjIZrKpZhB 5DSR1w4OPM6dUlUPHrvwjKv.5gbtRcYM4qrA4SSOvCeq78Et+nHsZFCkltPq YeZIeTfHqB8IvlXDweLk60HKDRH8o5d8YfWrzAgYIEknrqpzv4m1MxFCCIei Y5RXdi9Ow+Pbaoa1aC1jqQtm04Z7md4qzshDJKGo1Uqe8MpeSm1NcxQuvkkP kXND7ZpDpLlCR21nkkkaN6erTFn8hpalmjn0t80fyejO7xotu0x4Dt0x4+v5 D+10cl82lE2Y0QAbFfBUUvuQ25o84Yg0OJz6eaYvNkxIPy512xuz8P6ecmRp vB6UGRB2SO+d0xd5DlQpYjro2T5yF16kw2H5EVfYWb0Ar.hwP8pyPnChG3Bu hsQUdcBrL1l.vfJjt09e6.r..IKJBWi9eahsJ7b.Zvl8cRGBMgjJa95CDaBd nUf.SQ2.Gi5rBDfI88lhRoAry1nldF6.00EyUU4v66Ytzs8WzZR01G+NnU1d fQMt8.6S+NjNcJJ5rc8FvpMG1WMNmI8X0DUdZU8jI+3TTzpFTy1hznAs4irY p2C88B3p8M6pyL06uW.uNMS91mkL9c0XNgD1mcqqRYQ62LAGPu+PvUzXrq8i cUHfclz9OMn+naEaLGYGvQAiYGsUqBUtCDPbUz6Afab1D8NMx5n2257V6Ld1 a36VM6sue.egVpsCMipOR7TU19a96O2kANBt6SpbY8bngtSL1tgRDvNj3FI8 4Y5xWItRhlZdv5HAzGIK57pjT13k8yQ2rAPVxMEON5dWEOUAIR+WR8bQ7D2U HN.OBa73WDy5eT417jRg6pFm4rgHrQKYN4ZpnyKrxpsrqEJsw1WXEyJ70qo2 DvuiS+TXmm8I3DMJ7HR+D4jGcPlbQhS58xUGdjQsuu8B6+ss2hYKu1ggM4a1 JLMpMsGSlhLvf+0tgifcAGd0CGEx.AUza0+k5+UEBee5blUGK2XJHPAFhpsL l68wOScm+E.R.Ya.tFSRTG6Edc+IewWh9C+YfyurF78hpbYMf2w9R9HtqF38 58sQOfll6BANz+4cLZFzqn4K99WgjFXj+R42Gbibt083o41IY0wvn55G75YY ihmoOwEK9bIHIRTcWbRZQxDgzU1kEwils0cCTwPzz3aTmNiEwIpyD63xKUWw IpawPoWCIopqApR0IrMbWPci9qxbZaWhTsKXNPOp6FEUDEkIxfIdBZ4B0aT9 gFNb3I8xCcODUXUOn9o6H1ii4ltwuWkUzGPmR.+0EUNr1dy5iqyJ7okEJtMM eBB.y+5YB2w2bvdYZUViawcC2IrOaKs3b0cRL5+9u+Om3qQMFbAbZLrbDWiZ bbvIyBE1qeUp9zu8aUsFnTSkTc4pK1oQBz3oxPOfe5mGn1+Op+pNcWmjaoK9 v.hTMRTCMgGj5D09zPcif6qN1rHqpeTWvav8400UVpT6j9J1RtZ46ewy95u3 DudIvyTWEtkWv5sygXT3DTILb8PZXQaET+wvhv++kOsknW3.MjD42Y7Uykjb 0grqW50m2ZghgWO7TabBxUi4Fm8HLNwf9OxLPcrwI7w3EmdD0R5lyImULE8r P87sYMEYKyGuJP302ztH7ZJahzStjz0ox50UtxyQan+MW.QqPs4ISVjIi4e8 w0yNEUrmpBrgpTM0kSops+91MUo1a5UHc2.UsQTr.mhTba.p+Hk6FjhXC6i3 PhhZC6yw.E0FfxozDwNIJpSIJaXcb2x6Tmk8sp3Lvs5MU26.sKh64V4IrMxS QNklBsQFm3VUA1HhG5XmCX1PStUbhYCME3VwIkiksSSt0FrO47ilX7yOZh6Y CM46V0S1PRT2asqUMltU8jURSNljrIDAe2JM4ai1IlacTQ6CBsMbxsN95ai7 jOy8zTaNYRcKuiDYip.25U.1Fs3NNIFTavIF2o4vfhsklbnt.avI74mHNK5r yZGwsZmrwESGulyF8.DGmLSa7I.eFFsIke9EsI0sR3LqRnB67yVGwwJmrJIO tMjEtM7Nri4c13hoaQIahNf635GXU0ebKNgsQZh6XOwswm.r+4mWuZZBedQS 5Dl4NZxGaKM4vnMsw.rakvsplctUBmgOCoIOKpiHCe9kodB87K+bANthF1zA FbG6OmMZL4tUdhZkmJtUioNsosleN+yOYbMM4tluHvyVZBedUX5H2qFu8dun FZBe5noV6yAlSooP14WeND5aKMcnh3xe32ez+CrE0RFH -----------end_max5_patcher-----------
Wow — thank you so much — I took a quick look and appreciate all the comments you put in there. I will have to study it much closer to make sure I understand the changes you made.
I’d like to include your changes in the zip file that I’ve recently made available on my own site for the larger project (see http://deskew.com/component/content/article/19/76.html) and would be delighted to credit you if that’s ok.
@pid I have been trying to understand your changes and wondering why you are recommending [v] rather than [pv]
The reason I got into trouble with the original patch was of course because I forgot that send/receive names are global.
But I knew that [v] was global and [pv] was ‘more’ local which is why I used the latter. What’s the disadvantage of that decision?
hey, sorry i missed this. been busy. glad to have been of help.
the v / pv things were merely that i had rushed the whole thing and was confusing myself, if i remember correctly. so do not take concrete practices from it!
however, the two objects work very differently of course. if all you have to do is ‘declare’ a variable to be accessed later at any other point in the abstraction, presumably [v] is a little faster and less overhead. but if you need to take advantage of all the [pv] features, use that and can still be used with #0.
The use of [v] rather than [pv] would have screwed me up with multiple patchers just as my not using #0 was screwing me up.
At this point though, I have it working beautifully, thanks to your comments. In fact, I’ve actually improved it a little to eliminate the need to send the patch name in separately. So now I can just write
[GenericVST "Kontakt 5" Strings]
to give me an immediately useful VST with a strings patch in Kontakt5. I would save this in a folder called "Synths"
Typically however, I would create a patcher, add that object and some controls to expose relevant parameters for that particular patch (e.g. string legato mode, vibrato rate) and then THAT patcher would become a new abstraction simply called [Strings] in a diferent folder called "Instruments"
That’s why I want the feature I mentioned in another thread where Inlets and Outlets could be added automatically. The ability to create a large collection of instruments becomes very efficient and one can then just browse the "Instruments" folder to instantiate whatever is needed.
Forums > MaxMSP