HISE Logo Forum
    • Categories
    • Register
    • Login
    1. HISE
    2. clevername27
    3. Best
    C
    • Profile
    • Following 0
    • Followers 10
    • Topics 335
    • Posts 1,604
    • Groups 1

    Posts

    Recent Best Controversial
    • HISE Look and Feel Tutorial and Toolkit (Updated!)

      In an effort to help teach HISE, here is a look and feel tutorial/toolkit. It contains the full GUI toolkit from my plugin, comprised of drop-in replacements for HISE components (with additional formatting options), and some specialised widgets. The code is copiously commented, with more descriptive text than statements, and weighs in at over 1,000 lines. It's presented here as a snippet (as developers starting out may not be familiar with GIT).

      Screenshot 2023-01-28 at 17.17.47.png

      HiseSnippet 11780.3oc6800bibjjXfZD1UDZWcZWu2E24mpig2cH0.hAD7yY4NmHHIvL3DIAW.LRZrr7bMAJP1ZZzMttaLb3s63XV+z8lsC+pcD19gMre6d1Osw8KvQ3+.Wn2cDa3HbDN7K1Yl0Gc0MZ.zfCGoYr1YztRn6pxJqrxLq7qp5S885xCB77ysvhctZHO2B+f7suxM7hCtvx1MWiCgmmuimmySsCys+UCsBB38xsvB25A3qWXw2MG8me+GuukikaWdzixk6S8r6xOxd.zS8SOcuOw1wotUOdG6AFsdi8Zz0y8.OGuQ.pbq7kyMzp6SsNmehE1r2IetE9d05YG542NzJjGjag2ceudW09BuKcEs+SsCrOygi+XsbsA.IdbcOmdHFiOM2AWX6z6T0TNHWtExeZDA3VBBvOI+w18r0OOhP7gzKXQ8vjdrv6DG8tULzaMSzqrA5kBJsfAJ8tBT5GkucWe6ggQuAwm2OeC2PteeKfrahJh1l6c99+Gye2Ohs5M1eJTfcS8mzfzCaztF6np0YcZ17nOoQGV0SNj04QcZ1pQ0iXOasRkKsV1fz0EmNva3U91meQH6u++BqR4Jqy1GXVY0dlka.yxsG6B6.VetuOOjMzxInz7L8ttH0ob+A1AA1dtLXzuf6yO6J149VvReuhr99bNyqOq6EV9myKxB8.D8J1Pte.zAuyBAlWa2yYV.j5BSOrsg3zHvqe3kV9bZdArNdcsAF2drddcGMf6Bbw3H121gGvVN7BdLb5qe4+t1x9+0u7e+Jzv1ia4vrcYXaUujcoc3EdiBY97fPe6tHLKBMpqyndHVIflpQNnpBw3h.gVIBPPOJ.lYH1WjMvqmce7eyoo6vQm4XGbQQIj5YiCyYiBgWEfupK2E6KLGuqmOKfCql.brg4DQGhvTpM3XIgzPjpGJoiDRb4EdChO4PlgQ9tv3yot1yCnpz.+U7tgBfUf5ReOGGuKwYLnjCTS.Swfe9MfHy0kmpCfSVm48LNQUEr7tdg.4RPFPFjgQ7cxWEbgEP+NiKW.gIcAbA2xfn5iy9fPf4zF3FF54SS0jD6RulmcOrFqcy5c9rpspwZzlcZqleZiCqcHx1VsM7DfmsH6yZz4gMeTGFzpVUOoyiYMqCZbdL6SZbxgEY097SaUqca.ZMawZb7oG0nF7zFmbvQO5vFm7.19POOoYG1QMNtQG.zcZRCqDXMp0FAWB753ZsN3gvaqteiiZz4wEY0az4DbPpCiQU1oUa0owAO5npsXm9nVm1DzFhZ.Oo4IMNodKXPqcbsS5TBgTiSfGyp8ovuYseX0iNhF7pOBlQsZiX7AMO8wsZ7fG1g8vlGcXM3g6C5VaTc+ipIFMXhJT4cT0FGWjcX0iq9fZTWaBfpE0VIV9YOrF8HXPqB+yAcZz7Db1cPyS5zB9YQIUuYqN59+Yft7hrpsZzFIV0a0DFCjXCcqIAInymTS.JbgfveEcRu1AMEe9iZWKBwNrV0i.X1FAh4BcoaPNnUuI+SATbCjmf+wBzIPVRoDHdTCP4Wuy4fZt99f5kAflamQmaCJI664OvJLTnYIja08BgpjfvqbPEI.DnMLe..itdCF54BJsgcjZDB5g.UefznENh9bqdqF5sJnCUNV.E1w9LeK+qvAgfBP7JvpC+fFH.7EowpqWORKGH1xcAUufNumw8OyKPotDZyyr7ssfgC.fKXpVfnY83AjQH1OC2S5BKTGBLebJwp1Sn+CzZ.pwwgKBst.wXXaN2PeudincKX7mOzQtGlMRlF41Uzc6vqDXw.u.wbxEmy9HZO.2Ai2CnFt.AErOBIWtv9ZvdPndIKe.UASmBJhXp84tvzvYDOn.0+..YP.KGZNt+H7PrWgQS3fRvJaMC7G0YB6yQirRunbcNfLJDIDgrFxgDZDR9sCKvja3QqmcsbelEfWAdrq7Fg+DwC.wwoDsUIzkRr1fNXtPQM7OELXsPfB7QfgmZdoF.k8YFpsITZHuqce6tfYAiBB8.U8VBc0M.Vl+5Q19n0E5MCFXcEp32h43cNQB+pQCFBqI.t2uOnmGVxnAFPYeZnQVGj.0DQS3o2FFeGtkuqb3OyJvtKLMw43.Z+mKgMMPd8tWv69TFZOPA1gVOytG6gfkE7qtc.RFc6Y42SXL1Peqt39RAryGY2iSi+k9.yEsMKx45JYtAUJdC3xECsbffYwmSLHH0MPKOnZQQ.G7f93KZqZx2CVNdlfbInQAH3wV.DtPSZKLePYZKXevtibr7kKIkXc7.3C.lDzfV368LbNXQxx97K.6V.YmBj3Mtxh7jHwQtVQz1iQK8jbXpoDsPShf5kUT3D0ZvM36E1kXKmsc8FgNRfnobBglYhLVWh1+hKev+J.rzD7mAQCfeyA5.XSDvPiKgQKdVtmSTdMm.XQe.IHRDotVnxCgpLzVekJFAJCycG9yEJLv0h.a3AWw54aQFOAcpfblhVQBla.qDTCg2L.G+.X4giTSPhw4JACnZgWnn.UNfpUbu.cWUrraGPu25LaTqhXd3AZ4nmpFQf+yFrcqqE3jG.EzQ0RrGirufrwkfQfX+HxuZ4GZOxwhbnEzZBfE.kBCRXFLmE7nfihIIAOP15PKDHm0.bwFvEqqBj1ZhBlDgcLocTWuEqMrw5AOTn6gTd.nCxiEQ7UJSEluGhF74xMXmfobiC2EefFrGTE3WJDATBYDSXfJbgMnNTO8kyBxmj.RKKtUFQRSNUi1FYY3YDeMJcnAQCMEVvgUZEXospqpQIWREbT.9tJXiquT8KQMuhHliBFg6+.3AxvI1rf3ij5rshH.F8UgqfaDbAcyNf7T.2qF2kXDHvApE5hvlAdoMJf3ZAe0B.YKXMl3HkZis5gqsz16DiojAQJPJzmgV.fffTvQavUTv0P5wJ.6LzkOTn1FTnB.StShqU3Het1WO0VCjAAg.VBzZGZO+u9k+mXUI62GHVMQpSjoGzXgiaTCVdo6tzJkDlzXgd0DfFdcliGnz1rQezRqfSsyPhsj31iTFQdiBKvfmPg1mOBVknoKBEx6wH7sDa+3fUrzw6Ij3IugsPM.znWRLap8bfdKvYfn2kraHPfC.5.aABFDEvIyhjx6xN9I+rVHB3XyGgDNfp.hbREm.6p1kX.JbzSUWzXfQtbNtiJvkQq6jeL33JbjRObfFIvk8Aq1GHXwGaPEumWOlyntOUn5EXHwd.NaQNmeUbUUjDiuuf+C9oagHtFfrLZPI1wWQJPeJI3YtC5tzd6BpoHVFmZE5yg4DNtX7A.QMNxkP6TijNvdF3gcIict4LIl8Q2sPg6N0+vdPsNcPeGZ2AbKBbvZ5Mu.8Or848w8QHCmf8RrcvPDP1+I7BGoflaWgZzjgrnw.qy4nE.N.GEBKfGf1C6TeOxcdwa.Et2F1uez4PiAAJsIIDvEKfVryflhrDnyykPX0gzfdtmRAnK+4gfZDgRjkkgWkcfGseQXvJB.IMMgKEogMNj3E96vK8jSnkAcO1iFPcAG4UzpHDM31xn3PlmafN3159BIAwddBJVvetfXdC9mYrXqC3G3THrbeRm1rrrXGmk5PkGGfHg38cHa85pHpZsGBKjGAhefnl1vIIafR0yqEZPBTlDZ0K5TCNj2G0bE+MkJPSBvQ4CAohmPRDeN69rx6lxKdL7h0R7B3eAtXeeVkDO+g0nPDbe15pWbPyiOs4I0NoyS1+AGbTyGAtcaLNQusQmZGePSnAsVyb7RqAULG3nFzo1m2Qz.w3aL66w6aMxIj1t0WO62+Qc5z7jOq1QG8jNMO8nZ067jGzp5gMPfoAT4mWudkcf+d3ti2s8aB+mGSgEYBccis2X6MSP8ZVu9SZbxgMNnZmlsh27Mqt49advtorzpDoOTNUp6oVgOxypmg1Hxse7mKIT.sjTOi1D5gwU+TnlKXjGujC.FDnUCVdoe0osZ9WV6fNOoNEqmW387qNm6VxmeN5xQovv9KUjc6lzSaId3sWY24.RnVk3fYe3IHLLV0TyI0xmdg6vZ0q9ni57jiqcXiGcb8lmfbbKECcVZ2DsceX7i2RbDGqYGUc+ZG8Drgsa7OsFxIVIYSZeb0ih2jx6NS8Q.u4QXf4DLOr6d2aF8QvNtmMJLTDIecT.RXkz.q.z0pPuyO2gaZ9oOs4VQZS.axDWv9W1.tbuLNZoK.HgUVJu2wPp3hV22mBjg5kn4+kXUCHfYEeLKhPW1uPbiJGNP+6QgVpOmrrLg00WgaufPBw+y.ixYRaJvfCHmAoRjZ3hNKftAHx7G3R6PJrBFTLzQkAVCChbe5.oSAKq15VAkUPaWPcm2VQnUC6YmKG.oyh.V5ShSDsjOP9VoifgdCwLrzyFckPteq.dnCAinLtknqUv4MX9e15GRViFxQt3hO9hEeMrmyAvF7gnkjBW9jyew1dJQT3MOAwIXcLXeAG58w8eBgIRotD.NxCLu8HOumV0sWcN2Y4wk9McorTgwgIpQxFYzpKazxKgd12g35DMAzvnfvx.kb3ETPhDH6JreUgEKrXJLQ1X1FjAvR1D4r1HNjQAtSXKUbJwsCjQMHzFXVWD.Bzb46pBvBnGRRFXFg0tlu9gbJ9UwZvWDaG1uLV6+L6dfDRpMm1nNQqSroeJ8R7t3cqcnke3imR6eL1dhT0lGFOXQ35nQTNMf5Ad9tb+11+Mb.xaDa.2mDnTys0h8tFJu8a1uOFHq6y1J9bj63zBDa.WAAaEJG6cMc08VJwP68Vs15ate85plB.3ARAOQq53M7Hd+PkIA2C96ja79jnaK4xHYHvZve2W1Av7YGQC2MUFPoDSag.trIGdEvkICE.n9jqhc7UTv6QOSQNMhKDo0navJc8OzJjQvHzdXRe3jKGB.bUz5KoI9iYqUpLaU1xxG1CCKzGwJWpxJreN7u1I82sabYFKUbNzpxHiThz0sF4IcjpO.mTxpkfkWEssNP1V9KjJqKg9jT0Y3EVJDv.dEUymUJlFWewX7zEYY.jUxHHExteolDbHnORrQiRaczTCYCZ4MxE72uErcikKn0Z4HMDEGSFYkoxtHDXLjAC0QXJAAULkTSR0VYiiyp8zh5LpdcLT9Kx.I1PSUBR03SyhiqA.2aXhSbTZufICGh6Q7Z.UdpLTSTVO0EZ1cXKurod26x.gAsXfglG3ErUVINgvn2Rs7Sq6Tumlxkhioua7m7kJZWzxpfrgPNI6XMGG6gAouj9M9LOSSsoHP7oXJ3XZs8iwcqLjxH1w19cc3xPhJUZ0iOjSQqSEKzHCvP0q.EztuVIHk0O18uOKzeDGru.T6Bi53Bjp31LwLAvVVF0aQp+nfSpLjYEXLWLZODsN6w1YaWFNmeAi6DvQbQfIORlGBSuhMLjU.qU0VZO1fMYuXgUiWHoxU68UfE.BieMBWsxH1HpP.lAnwCsdpJrFWOcDhULkMtvsn1dkTzqI3ODKVZJ+MhrvXbyqlpEKqDmIeVhHWOnNqlm01AhYKV3EqLKubIOcwvscX0VGlAOcmGuboZcnGXO8pfvfQFV0IX0HYtJO0nbogo6VlzOxyTYZiT9AF5IBJB+4feDngTh9Jb00NTjtxAV1tXYuAO31B2R0MWDMeLBvIDWMbhTlpmjFDivIxChF2lxfCF5etK0FKccMPY1v2ygQr1NfKSD50GbZBm++bIgBy4vwQBRf66TvboRrRvvSxVHz5ae9HeQ9lWojpu5UcYsKvVF0APdc6F0pCUN7q.lz0YbXjhOf9FQxEV4aYmzQ7cZNpiue9bVOga2wAvLcYOkdG2wcENZFkja9.GG237zciewH+3UxUYzOd1xZEtBGwUaGiCQaYdlJr33P9Fva9By1a9a.m4+tgq7ldLG0VR0v2bN5iaMglhq8ye6I6m+ZajdLBL8xu98JeuxQd4GugfFEZL1L9Rnmu8eCvwCL4j.oFUhObepLgscPAZP5vmqa3pp4jT3mbfB28v.FyJdCxTPj83MHS7v7DugXNPRFKIdByxGw3zi9HqAJcn0RCxvf.MFhNQDG.Mf5tfUW0y3ZqJylGouI354hyv2yES57odJq2IPU.NuZNhFSZ3MFOKIVk4voxa1YQVPyEKjonrwvUwnB0RrlsLZFyhLCm7DFn0C1vA6yhLgaUMLqaNbybYy.C4HWgHiGi4Kjx6GxYLYUaEp6l1QnWGwmSfxoEtDUII08BvFNbzmD+JKkPwwdCMVbQNAKm4Mw575RarzAQGBvpKyxMDqLP6AwsCJE0TrkyxDGvxxk1j797EEtVwBjEKXfI17H8HhEYC+Q3bWoYJcd5TYo0ArXL9YzsnQRvjLbE6JJuNAEcTh.LXDQAc3HGKnIXvRRIlFiEQCczLxZLIXuXBwfI8E2zVayRTFX3B8hiwn0vzC.JKs5roJJpxd9Ok6x0U2CtgoHpSBZmN+pDE2nRQyHxu7joLJ9SVTTazbnYNnHwsO6Np0zD1Tg5puwh0AAxLGpCp0YrYeY5BUnIcrirNi6jH35X0IjXGcrvGVd7BTn3DpvfUDgnKMYzoHft3D3sLkPMbrruM2Ay1deL+9Ekp3rCzp5cP5uS5UW5hSM5looaT11nweECg1LwxNFDPN0sHV0WDWFKhPP6tFIagyQ6Pstc2IO8t9Xz5Rc6IDcvFkLkIUcnJy.YjLgUQ1jDiFyZm6LUuQJNCmPltQvK4.C8RjctYKJeXf9N3g0N3S1u4meCUKKx32HObBXkN0yiG3d6PYsMKNEGm487hH+t9jrLv5obfsmy3VA1xX7wc8Fc9EhbLZIp7MoHhfCfpTkTCIWhvwQAL7ODRt2.BI2zh4FFc3yc87481UE5Ui07h5izjtdnrzF6VhMkvv8ZMDbySczbfjy+5TAMI3LiUKMJ3dSD2s+PX2dinBZpL+UPSrZfod88qlnbYFK5XqmsnisU5gMA8bDjC2GXmOTbHrRsfEz4ITwiJxZYBumkGNLQosf5QnCdtKF7Ia0IzhpH+.gdZ6vTC6T17masIY6+Nojgw9hoIg4eFUKlrKD7jgWhm78y3csTVpQ8TYDWX.2ouHcW9J+.Ea4cIWeJCPwS5TA77Y6BY1iPlPnYlgHaRwCaxUehNMHiUNIyesnHN+mVmagGLsK+FhxlVnGeMPYydvGSuxFZDWlAmqz+MYPLMwbi4X2TrruP5Usv7HUJV.nUfrHVNexkITeMcQS4bQyJkHu+3I+D0Yoqbd8zyDqxtzk1V8z8AU6+6zZjbCLvc3JrOJ0VtxbzzIHE+hT4sFya2Xd1vbv2.leBFaKVLEmqWvF73bTTi+yuOaokVYwe0XQfgpq+9pS0V.fPIYAPGoYykmzoOHSKbIo5r537KBW05R9S4ab17v6a.Ow9ciw6TTx6iSOz8pUwX.S0GPLTIgygrT8NTtBmMW.SIqG.uwT0CE4+2KlsCfQU3wmbRy8YYvV2qaYb7TWuytdEwQficO7jv+sXQb7FpqhsUW5DJmDSohCnNQ.4sDOLEK227E8Ax.dcJ2iT6WbOLe8WjGiuBrOdCYvZNjK4clKmPaKkJ+DbtkUGQaIcrj3n5E4Up55WPecAnFWRjuPxwaLGTYBOTa4A55tpMs5a3gJKxE0uwOmGuh9nxlSmTYWOuTYyqaprw8SctcTM85wnbY7+IQ.YPtw0bY7LQsPQs+yqWem0g+pJBDU7dSsCx5fnB723GNDr0UoRQHFlbvZveqLVKO1x+b6nBfQrpc2MlfSv3l3ZWfM6Qr1K12FaqJfsQ0JxNwqpDb9jZCiOmDOVTzszFpvbpTYErbGM3Ltey9GB6tMvx4Tba2.w4v0L4xol7CRfO9IQos714fLcKDOe7JY2aKNEhnQRR8ez8VD7O99VpiZBBQI.khHeQRxcQ1jdRZV6F0pTLJlUIkl8kxopxRQSM12VmXDaWwEWAEwrrkszTq.fn61pj98f29Bh9iWEUmw4trtN1BO1vKIE5liRk5evLm0JW9mZjpU50p9iuemx+TUJaThuWPC0u9Wq9sD9X1ahpo.veIijzD8bvCJ34Kp7F75dddD0Su.F3M7CcxRUixkzcgU37VpAYpRCLDfuKqxjd50qjCDrXqNcF0wd8WlLMwSHa6XlOzrOTVNLdMXCsk+SKxFQLnRBqlokTyJtcirBkGrWklxRrC8PPS0chneF0duvy8farpdHg+ihc2SMexrkSnUXBA9fzFI7PkzglHdSjIUyJ8oSubclbFTibxSBAsuAygykSqRTvA1L2+FGLCcY.HMQWljwTG1ImweyUkXNIa3D9j8AWcD5mVtrmqTglt2toGKkz1hs3L1NMwlAYATi4SLc8MNQNQhei1idLp5YiGei4K7FwumAjEJvbVxNiwSqJtLQHvldrQll0Xw4jUieyIWCPZF3rLxS0tNSl35z9yFA0CusdQMedzlTtAnaC.gVX.D5eVOgIPhKwGkApf2LfJSNdAL0SDZ06yjWlEhq9xNdsE.NV7RKlpcUqnYzJELpee6mu6bVg.nh1D3yqfvwDrfLNC+ctIkLDTvp9cw2ING.noOVfI.pnERWVizIY9Ydd877JwNEb5P4+LdCW4ICTi5F7ifCcKSS2KEWkLrChKpu.0cYkCd2wwoa7D7JmByNlNg.xEGBqDbMV9cUNkqcpa7CGVhSMAevvP7lXDlVjF5nqTPDdRNK70s4CrOfNXgi437ovqiNtDpClmFGFX6ZOPdQLMv54z+sJ5NnoeiGTDQpv7HCCIRIEJdkGqH1nuJBnkoVz6095AChNXgkfQWy5F46tx4ZKmUjA+TDDoKo0V0n.1xBhOhqUSP2rRPK.8sT6BSkRanc7KJwgqZ1n6.MpLXnu4y9nXmEgSnqAVXAt2tB0iKGg9reAq7Jre1OSK1hyu+B3Yqj.SVU4sTb+avPL18oThKVFzr38T9JZZYzZL7e0Q2NxuqJJHsu4cnmFXEIt5QxJuE59sw6ESv49H.pSZKUduBZf43nFfFe8K+s8HK57Aw.RIGcEZpJ5g9DmKBTPdTOcKWBSF7hj.LcVM6ovD04Rk3TJrXb12RV85AfArFO1TFOsu2IB9EYy7shY2ch2vUiZzGUIiMCTGEicY0I3NbQCNr6Lg1PZzTGbIEaLE7C6.fJ6PRjTkb+TNeH6bOPZuj5hFWIqKcnMAcixo2HPLfEqjGwQL8DllAOOWrvqpimnKmxDzcsb7LxkSV7xD7FvkyBol9QxMRsCjWx0p4hvzL66xjRjnxMuoVNuyvMsnpiV3oFfrQk2qzecUSRTVzYC2mcQ8JrQBYMMs7.UZwpa6ZgWks3KiYCBtaDa437tE0r0wSoTb0QoW2rBCANEuKmwJCPaLfs9Bxsmm9T0Sgfg7XE8MMf3N84NVxHvhPRcYutHkzE4F2kJnlkX3fCSt.DfAhP94RHHRwcr4tuniKajKsuHYoImvWB3I5hEtMIKDnWDQXmtc5EVThpy1PcsM.wboE6d1c0DasA+qbr0FoqJ.cq3UfdI1jGlLVYrDCHM5EzeJFlP0kGagXp4XOhxmHel.u3pvltqM9Rz3MrboJ2ayDMjdb40KNdaKuNrAy5vbIikEKCuC.aloK4s44vuiQByaFWzaT9TEjrQXjwEWB8z8XafnLGwc4s.oYWtiNiodhOrHC75wcj20ngg3MPOlXOg8iQCsHqoh674n7xR6VL.+xejdernZCfMxEu9cUcxxAjKkkWKUtMzwL7rqPUnJinEXpC9UnwWbAdKjdgMXU9IPCTAcM9DHuEgOypKAEADjW7bXhIVVUbPFkWLde6RUuvJL4c7Y7DZPc7OT+uuVp+W4MNHx.imCKW40pabFHg4sTUfK3SBlPZb045URYmdMCGcG48s14vedx+JQSlyaRuob76S.x2dtH89tSBVey772u4q34uu9VF46cBUX7NYqBiWetO+857bN1ohOSGv6wNmyS9rumwi8dha1N71p9IwuVhSbsBmsiPKAGYxTTCg3rcm06tt44hPJamp6Lcntuakah68qDYqd9csdwaX2OSIWkqrKMJSOYPIqrVgo5n0K3W2j48zqEKSokKsQ4oc1j0eC8rRorsm4EWX4WamNYYhnEcwJ9czFcQX5ppwXyiE4aWG33LbdioBa96bG13qSUVOMEOw6pgxmzg43GV3E+V4zBOyj.No3JLoKeBjSvmE6F+65drXicdBh3W2TdFYlYJCuQ03EOpDU17MnCr6Mx40Mi2IeGz738axxvY0ctuS9Pu2rhcMcuqHsc3YrgtH9i8IgRTn0hbBg7kFG7WcUe20avYdm48b7dK9QAhusOzHbo2HmdhuYbz21Kvi1ywSsC3npuG90LjpLb1vQ9bmqh970INhO1tleJDoSs.Lnhu1Sg32mP02.KaW55T2751T45ZGOcz4TuBiNZfX1p9laICRoZZH95vH+TSICi.8QWQWSGhdXLdfi6AxCQlePXz2XsUHJ2kWPel2h9pyTPjwOIrMfKHznfT.G+LwxDvxBgUIPsjrj.dtElhUXVHgEUl.8zeqmvu0KjKYxOUa5OTXRxxohOuP.q.WVwQt5.kfsW7knSEUG0WaRDf5KHG7iED.odwhiQPwDjEJnQh9HRrnr8AJBt3SVo3ZzGOrWeiGpC0h9MeonqYmtFki9D6623kjtsK8YzRuhViVLO.wO7.gtr5KwGlHkZwpXqLDZAbWQiNlxgYC2YjieghHlHEGoZPEoz51hESYnzzxUzo1QUUG7vkWR93kJJFj3G9nnrADnzG3geKQMOd5wpdrHHK2RK5vldNNZQqxKIRL0Xcnxj5PkI0i0i2iHlgkRXa436TOMpn2jHjBnnKDwIRO6Cx4xCY5DnmwSoFHStY4eZLKGVQx4SDcU91RizqNatwL6HPEbbX.DeJpEir.PhKFK56An7DEkbxDsDNYKSFaUUZe7DWbyLnpLCXs9LgkImfAndQgW.rEyRk.qdsVsp0QYBZVOaXx5Bx0iA6i5yC0EoSiaOfrx.CcNp.iqpuA3+SYQ.zJ14inqbPQkPSu3qe4ucf0Umga4feH4UYm3o7qjejjnEY3mm4g1cPeaavulk3W9SDN3WWTpnVJ8M9murCZzR7Y69AG83Se3Lymz06yEj99vP+40L1mB4XlLEk4F5fyItqUze5XiRmzktT9TPS2.U8xrgKrxJ1mEM6.oYKRSzvlg4alrX7ANWM7BCDk9.1ZSERSe5qTmwckmLqF+b4mcHyK6E0N0AWXMjK9FbJtd2WQ8U0iZs37rJLbAwtP7xdumxpJxbSzJTvFnyI7ZY4G8TZmUA7D4Wq.URvRGZkeWjk1VUjXiE29LVxhQj93NRfT8IWM5ysJBJgC6CQ2vwOziFeN.U3pOxVSHbnzWdhvJHz+bnyHX5pnp1fEf5aF6NQehUoK+OZl08BK7CfL8ID9pgxYn5Yxb+I2MibuUWjbx6WJEQniXKfQCE3i5dXg9vLikOiHoEhOqSJthkkgtCmeDvkD0NJDowgJyYnWCKCk3kJFCYDlKKJU6wrRKF5Sp3VR1TIX2OVZp5HYH0oOoHSyO2Q9MHREtwDejQKNFej3qjp2vUc.sXNx47tz2.7Qcuv7qiUbKfoOPVx2THdk5K+9e+0u7eqtTunSYSHdjV6RU4Zfs5dLWcYI0E71D1uRdJZ0eoZijck2PVXZVkNUI+fxLSQ32RM0VH.Gca1pi20zxYXTZjU9QBqOJitWYBVWmRWEVaKj8P0bjXQOiEAR0jwQ2MYvlY3o8QL8qKmwjrPwnikuHw2jYY5.WGcPmuZL4D0WPdpLYwrTi2LoxBpEV6br48lTlbEyvcYxOr3fIYpRoZBK.yUGpjwdLtOMDA91AFKseadWNQLbyYdbm6iQqbGPsKwx66Iiw9l3NeJao68Az4UhhXiYJeikn2nTkAzguyc8pKVWNzVDkGL8rkS485ygZkok6qDgbVn.zf4+F5y.UrfyWFbRnXpykho8vn3lqvxjG7xohlwxgVF+HakHOBlDzho7HUfHRrvD6LmZ1A7ZHct6xDtqQIieKnkbRyzGsXMUDRvF5p8KDakHuMiTmD.byFZKbPinx7Ovq2yEEvq9HsQ6EEyfHUiI.s7iUVuIrx5ReaYoVpr9pZ6CPLU+sJhrIbEAeLgXvK0hD3nsaAC8CiE+ziD68E0cCskT4LHoAKKg8J6FmnoPq3mHPDZF6PbeoA3i41KBrod6HMqafU7KcpukqJjBJEcFoSiFXS2xG2obyzWrVoxiURxSHGJaDsunrf3nsxU2r0ZNkqCZTtzFqfWm5K9h43tBM6akBSlap+LMng6Q24QcZ1pQ0izeqvq84UO9zip0dtg10D2dMYBhNJWfE+OyJnfRnACMZce3GMvpwF0Rt7labuhrsJWVZlw8mwenK7m1yrYveHvgRhZw5f3evyzeJmQAxm5dl519XsIIkuDVd3qgBlo1uJSseUVRNCaS4eJFZXN3nbvX1fk7xHA.k4.m09LaBrHMc627yqMaZbACxP2AYf7obWJAIznuUlYeEjwjwr2b3KJiE9TZSkhp36NKJRxOkXSmpLerbmE5NaZV7uNQInbFPnRFgPkIBg0yHDVeJLxlSoIxTFGb.vLmFWqdsd160LWvS7UR+FdAWE1lIufG+iK83K3JHTIiPnxzWtzHzDIgwAmfvqQhr2qLnbWecdOakOyMgWcOCOEsSpVLFIW02JyruyfXqQhIR1TsPPl0CbVZ+L4rMOWHYi.G2q.UNMaQUF+o34ZXtWFn9N40.ipAe7kApuUxReqjdeWOK8c8z66FYouaL8kewjehqkF.Rr7KlvyY6WeNa+FYr8ojbGUbhekYH1LKD2MSegYqrz2sRuuamk9tc58cmrz2cx.Cwly4B1VyY62dNa+NyACwzzk2n0AGUKVxCmlRGMiiLmsQ7OIUjSAvXJpwMBvXJpxo2VIS8NEk4piQTDdLYMyFPRpMWL1YsGuU5UasSNj0rtv2OxAWoesfQzQN69VkWs53Z64dhWHuo6xqT.KGkWTfk7U86m56NPbJ8b39o95N1ClvajcbYQtZKJRzotg4V3cq0yNzyuMkFtbKjeeudW09BuKcysvsxuVtO0NvFzOK9QaOGO7+pbttBFeiF54hAMu4Pt724N3Bamdm56AReAd9A4fmH5TtbK7mIwJnoXBZysvGjuMEPcwUfYN6d4V36mm7TNGgv4VXw2Ef.6e1+p+mebtL24Jw57K+6+e8OLdm+PYmU93Qc+8yqcyLFHf+76maPTICfPMEDBtD.9Q4SXE+MCXFCajKLyDLIbh75hMI7j7lAaV+5AFXMRYL80a5DAfrLQ9gR.PF4P8+Glm1NjdvZWu4vGj2zdWELxuv0p+UdE6+5uh8eiYz+oSAqbCPA275wHDCFacCfGaeC.ictdv3OJeLyex.AQsrPopffwOINLDuPBHwtCyKdLOBXSBOpj.OpjK2iZbnUnErkzBxcmNUeBcgmcH+Y1c4cHfuX9C4AOMzaXtE9wZi8xsv6MYNyFQGPubO2Dwux7Gz8kj9AK+a1S7Q.Q+je2+x8hxTXtE9A42nx12aysWa60WOmQUEj3MK7dSFGiHOuWdpxLVyD81XuHz6+7uYOb2Cb4o4Ir6.VlUc+ipcX7wEsGfROTnwPFe1mXJk6WrWNi198mA5UwD8rSC89ix2rd8WA7advl0MvlO74ogMExeXi1u5HRgYfHaXfH6wMPjbkkHx+37wxODY+rvV54FwhykBqBIWR+K1CqqO7XYG8rJwVle+IIo7A4ChdxZSZV8xe4dIPh+IigD+K1aFSCQA.DGKyIep33NY973xcqsd4x26dk2Yy6kTty3My+D1j69kO66.S30mjxvx+lDS3xioLDHAu8Mg2XhZ+O4ssI7OXltqYvLW0jY9S2afkAY381SUkNhMt1o75asVkM2HWx851Y8xaty1amxdc6r1Fqs981XybQo0GsHe0cVemc1p7NqkafcudN7S8BnSvUzX++9iSHW83wn5mDSy0Obl9YFMy9Ob0ayyZ4gWQrkPJaFMSukMlraYPH.M4DgPXWu4rcwu2mTs5+W7OwlpK98t6JqPO1bdt32Cdv+G7oSfNJ1268yKNV8e8K+soItNS+0ilD+cOO6ShWl9j3koNId4bMIzKKZ+hRNmxT.DLVbZXLu9cNR6Edm74x.+IvrAOqb4s1Zs3rm3K1n712aq6scLtSDRqsFvaVYsMSXHArGWRlvF6MEENSMvFO2bFEa5IneGa2y9Htkuqf8905b1ThbNmxElifvLA61+G7m1T9eTdUNuUE9+Z4xpdoJar0Vas9lonWp7N6r8l26dSdk+5MGiYdj8qvbrx2zyw2eNBe0Dz376ly435eSLGm3dD+fLEnsIvxBl9Nko5eb9G4Fvc3cwyUfJe0IDr16uZLAqMx79sat1VaLlvcr27JtlaFpPCRvWkYR.rZOCBPt+4uVI.Yxv23QzbRlE8q2KMqV+8eb5Vs9g6MKKWdYmncvhwdFX8LdC2S84A7PQjmV3cmrgcSNrpwrg6JyejjhudBj8keVlWBTRdWCYxT7QvbcPPb9v7hjrqU5SM4A9diFlH7dyKApxDIPa8VLApxMGAZ8IQfd4guESfV+li.swD4fN4sXBzFYf.UHao1vvJn8LHO+qecpJ8lQ64lucq8rxqcsma81s1yJu10dt8a2ZOq7ZW64Nucq8rx0W646m4zXZn.sooajOeZFcmZdLSP+pMFI9v8lyPJXR1Jjess1d6sS5YwObtR0pwjstwjc3yGCW+KSvN76Zs2X4FJdzq9e72cpNvbhcEFOyO+BJaPmXMfP4p91VNr8cr59zb7d1gVxJJJM6yuNKtl6N9W4dMWbq7s3h6GLW4uNZxxbdMr31GaoZwsxM5ha7PGnKNLvrhNxHydrWuQNzkV5EV1t4ZbH9vG.+mxWfgzd+qv6pNDLKbK7Lf4FXGdkoBhEdm3E01slbQsU1nn1Roj0xHJ9ixepcX2KRGGemTvwb4dsfi2pijOpV+97tgQH36lu9mGit8ZY3+.wv+94aa6xaekKv4gC9eB8a1mgW78Of6he0t87WKF5fqvQTm+ae79VNVtcikQqO0ytK+H6A1F72C26Srcbpa0iiE.oYXOZzEK8QAWMh3M6FBCeG51wxKHFfwOQLcvKXKyG9n.dce9ecKb0z74G3Y4m5q98ebcXRlZeZaEJ+fHTcf2H2vXrA2J95v6ls5urtmSOgbTZUZ4Bu637D+j7nNP8yMEuvWvh5wqc1j2PE1WXACbbQEN1ltcYp49LtiG7DDG+w4OTbMCqdZbd4i8b8FdgmqcWyE5V7Pe6yOm6ah6oNgphe3RdZzS9I60hS2LklIE9HfYyxGnS7qIsXsrSKl150eZdA5xPAP1auJou0+esR5zXs+w4O0COy7HiZcamPfyDQhEyK9wzzOmKGpmaDdg.ne3e6+889klKuwYM+S26WNhtL1T0h8+l+q+sU22dnmik+qJkeFbxuaFYO9SxqmTuoyGiqFru80Q9dBjrP9OEzBhWRCD58Gq+ISi7qMaTD1vsivzQS0iOi6GhcJhw.+B0BFAGm8BrNPNlDLnR5bgMyu9Vkh+mm0r1WM3h6cJ+Nc14.52v+W+6fu5dheeyw3k0ky+r7R4.Fx+8lMq2Gj+W9sDB1xaD9kf+XKXWTrDLNYzf1fwcc4.x45xcvitxBuCZfl32kU0JQataO5GnKqxWtF96EjubM0K+FYLFX0026Ixu4Vn.06QOAl2tj+TKl+X72rnJ4Oe4Rkwh5w9Ic6h6QrJXwW58ox0nOqeM5yFWi9r40nOacM5y1Wi9ryT6CZcb0QgdpJzM2wmVSnfYgZJ2YW3V49+sF1jEL
      
      posted in Documentation
      C
      clevername27
    • A Code Snippet for Y'all — MIDI Note Editor [Code Posted]

      (EDIT: Original screen-capture missed the other main feature.)

      Would anyone be interested in the code for this? It's a MIDI mixing unit for loaded MIDI files:

      • Creates a volume slider for every note, in linear according to time-stamp.
      • Provides a corresponding numerical volume field.
      • Displays the volume of note (as the cyan box under each note slider.) The brightness of the box represents the volume of each note, in real-time. When a sample finishes playing, the box resets itself.
      • Allows the modified sequence to be played in synch with the DAW.
      • Allows the modified MIDI file to be dragged to the DAW.

      updated.gif

      posted in Presets / Scripts / Ideas
      C
      clevername27
    • User Preference System

      2834c6d8-d923-4bef-b62b-05811f027e7a-demo.gif

      What It Is

      This is a user data file snippet that is separate from HISE's preset system, with an emphasis on reliability. A common use would be user preferences.

      EDIT: Amended with bug fix.

      EDIT: HISE experts, please improve my code, so it can become a HISE snippet, and help newer HISE developers learn and implement a preferences and automatic update system for their plugins.

      How It Works

      A global JSON record is created to hold to the user data. In this example, the data is the plugin version, the date of the last update check, and the values of several components (including one for automatic update checks). At startup, the code checks for the user file. If it doesn't exist, it's created, with default values written to it.

      The user has four buttons, which write the user's preferences, restore the user's preferences, reset everything to system defaults, and to accept (but not write) the preferences on the screen.

      For update-checking: If the option is active, then whenever the code runs, it checks a server to see if a newer version is available. It also writes the date and time this occurred, so update checks are only done automatically (if selected) once per day. The user can also check manually, also by selecting the automatic update option.

      If the server cannot be reached, and the user file cannot be written, the code continues operating. In that event, hard-coded values are used for the user data.

      There is a section for callbacks when the user selects on-screen user-data parameters (e.g. buttons), and a second set of callbacks for when the user data is read in. Likewise, the on-screen component values are restored.

      Extricating the snippet from my plugin required removal of most of the error-checking functionality, though the skeletons remain to plugin them in.

      The Snippet Version

      I've extracted a version of the User Data File code from my plugin, and tried to preserve as much functionality as possible. I have not fully-tested this snippet—if something doesn't work, the code and comments should be clear enough to provide solutions. (Or just ask.)

      User Data File

      1b4f9a44-515e-4e09-ac7d-167113fc537f-image.png

      Online JSON Update Record

      ea0b37d6-cd17-4ece-b767-dd87d27bc34b-image.png

      Snippet UI

      d659560b-a348-4f1e-a053-419d35927aca-image.png

      Snippet Code

      HiseSnippet 5226.3oc68rsbaijcTyXN6PlcSsas4g7XGVoFSkQl51bUZ8LlhWr3XIRsjT1qKWtX0jnoHVCBvfFPxrlUU4uk7v9creD4CH07Ej2yCaNmta.zfDjhTWroSDevV.n6y4zceNm9bCMNw0oGiycbSsV11iGwRs1uNcqw1dCJMfZZmpV4Tq8YoaOvjm5fwinbNyH0Zq8oOEe1ZYdPJwu+6e7.pE0tGK5VoR8bGydriLGZ5Ec2SdxyLsrpRMXsMGp05u5I054XWxwxwGniOM8VoFQ68F5Yr5TrYeR5TGR4CRs1+VZ5t6Zz+a9lu66M58Ue81eee52Zzq6te+WyL14q1k88LCiucWit86CTcECSOG2VdTOFO0ZO3.GiwsF3bgsDAO2ja10hgWrcpV.lk2tpikANDw6lpz.SKiSBlf3o.nbRzz0mJmt9mRerogY38il19shGPh5g9D3ZeRbx6SiQdaqSdaoQdIPRqoQROPRR+tzs54ZNxK5IH87OjtlsGysOEVmzIEYaS8I+m8Su4ljRtLfhHdCXjdT6yo7BYK4.8y1qvP5aXUcgKBgS9c+1s1fr6Vas99Yyt468e.JIuW+sxhxxUJcTwlEaWqQ8VjGQJA+W6h0a2h7EjmdTiCJdTKxqNsFo8gMqTr7q+XcTd6ix26brYiDwFPcMdTOGPcC4bpkOiSLsAYNtT3quoEivGy8XCQAQaGORWFg1CEnYFExdlkSWpE4jlUpVoYk5kpzh7XxOmMalRMN9jF0qTucms2ijIimqOaC86tSh2c2DuaLHbXkROqS0FM6b5IkK1tRq8DOI6kBQeRYVOKpKPgDEk4Mf5Qt.T2SF.5TITKKw3xf5QI8cbEWLxk0m4xfcN3hAb3v5rN9blawQiJiMGFXJrzh4EM6XCaNTHKrwA2ibZqJM6T7DjxJBD4QkgKqW73JPeyMx0jO7T.dHvJ7m44hCK+QF3xwoMORPbAP7bpKoKrZbp3w3SAPMvyaDeuM2bLrQ0ErtbSOVgdNCAHF0IDHUA5C26B5CImDAcLjX2wNdqAU9VNTixltrdvFBiQzHfemfG0wH3Yal6d8renQ4TpZUBKKiF160y99POaS1Ylf9SWvDr.0LDzVFWGKRWeOOPFLPXWdYG4dkcJMvwgyZLxyDdXmVfrG7GkMoVNm04EtfLuPYBqO02xi24ovx9iIAFIcFyqjyvQN1vE4ycCgat02eoIvlLNnp3tfDmAjulDIyqsSKw9a29jYxv95PnMd1sDUIATNogxQrl3FPZrmWXZ.HHjsrW.l1dlTPTShFdg2amqta6jP218p61tSMY1a.q2ap53J2ujeUSYSz7b26AwpAJa0tYs5Oc42L69c1desyllsil875Tw00w8Xvq.5YBoNzG.pumiTvptivYcal2djbsG.pYHWP4DpMgg8ibw.zRZgvno8YBCygmIsXE7Kg4xAUX6QJZCNmHgCnlv1VpZC9Sevz9I8MI2F5TPKlK.l5NdUc7sMtQTAzShKanCXsNW.UhIm3zuukoMaBr9bYePK9uUPcSIZUWK8hYFi9rWdulrU.T1pR61BMYOhbXkiNoRSR0SqWRZ198wBYkIVHnfGwrOY3XxHK+yLsIC.wSzNCKFJA10wwCEL8GA2zE8C1Zbgrl1nLOouusTQTKOpqm+nRptkecgZPLrDNDtyPl2.DFCAqWI9bVeeKBpInPlLYy.3NOFHi0ylIiKyy20lfWte1LLKNK5l8ovk6euv8plvsdDvdDoZsiprvh22KbeGJbOoH5gTaCKVPX3v.jQhDSOxgZrYunTOfQ+SEpPQXAyX4ziZQB5MdyJuE8fx.r3A67DvEjdEvUZLvOJkxSn2nPeEL5qPqp0ujxmjhiFI6nDRJ8.xaUqec1ELWk8EEOmZZQ6pvo.kJujkYPIvsGvitLpGD4sWnSQ7ptNgAnrQ2+LnjSaLnxhyDyKf8FNtFnVMOGhoGWECY.Op1CjYDpDgQEA4k.P+fn+ZQ9QZWoUaRsphn4RvP4RZbvOUoDbuVjmW7nZkC2CmbKgx6TV91vJds95rlOmZYZPxqEbaoH.xdZxKy5C82P+wEzBQ95q3aQM+01lvZailUhBXJthdJnztZyFGO8J9BrPuRnVaYkpCz383q7mVbg3YQKUhB0SANy64n7NISlL4ikrDcFlBQ8.0lDEymkt+6Dq+6tz8eWr+IG4mHXMG.kbWWeEkWOFW+yq0phF6sv.kEVK1pFu94l7I1BG2LBq5.IiM+BSudCheWfyMiHsl4rnbuNprgIVJysGQvYmQtwItiVPRBYX1Pw+9mZAySNBwmBXKiyjHgVADxRlBoCEOlTFu8YLOYXfwxMoVqFe22r014EZIWu.2uK2yE1.M+Va7cH6YHgHBEuVpAMTnG2oMH4iBRIJl8wr7PBntf0LuI3J43WiiN2dpA9hH7hRYYdLZMQWmji0Lppf2l1sSUvDJeWFO5OpYy83EsMZbH+Dv0JVQKyyrwXQiyNBAOfnWTRYmqCofkAyHK53tzduoHvIc9jXeAQ9tWGj2jQs7fU+FmybsniZxrMXtIQ.ymHRVADPLyPoVB.Ofg.MAaFrNq3ZyPEZunYs1J8YEO4jqoNsUBsYIsDHUWE2ZrXLEBavj2InaEt.AjbC9IZ7GCqnaRDU1QRKo2Yn7NZEMAGAkKnKj8VQVcMh5xvtIc57bzlccvF44osuk09Asa5JVA.QIPqjCviLB1owKete9HGmv3LKblC2L4Wd2e8xbg968TlGgRhxInZWG.zjxxhmwBTgE5SLUhRQgK5BHFoP4ldnRH4syqcyHdy4hNwlbjZ8AeKIFNLt8C8HLbfuAQ4mtoWA8gd3j9iiSRhz+gUsH9v7ypNcBImEXEJLlgHcJPoXEgGH5FS3zjKv65.mPFgoH.Ndj9O4jZDXXFxclEQk3Lbe9IWCEsELzYPPDIEUhDwouH9DpEIrM8wzNTPtzp.oHCDOjSTA1fz1cLNiik4Sj0NxxPJSl3bTwFVXGJxUJczfer4lv.nf4IQvFiPEmhlgmowbLUH6DZTzrlypwIhtp0T0z1TyaSL6DRSpInftWTdaYiXxkDA7lifnxcXDDWRPmhWTZuti2Mf9wb+Hnp8CDJnDa1EDvbk4NpLLMBkmtpglxodbfIFfZiuj3liHRwPrLH5JFjB.t3b1wGqB9abvJ3nCGr3PUvFGiEetizEXfd4RnIHJhgHr9w.M.+KyBMA9iDuPmExIQtXLYwGJaY.z9Itic7XzMK+.zWqTSMbNX7s.mxBcLIzocENajYwmNjfWDSvPLD3sR1IrZYBEJKg52lhfMgXAlp00aJvhJTTyZAXeU8hdeFT9.gxYj4jFmTInlFWlJ+39LnbmldzUUGG.VmF.WSKR8JuHFazGGA1RxBguTSDtpRVLix4r0XQo4KpL+MHTaCBePXkdzCqi8.GN3xhbGK6c7Yh.VYppjcxKfcRcv89nbt+PFhwKvVGKuPDPVSU7+.TJLsKMyIYNKdjjCUcKBIAWopOn92ARHJOUAl+GlMInUZwgtsSKZelDL4WBa1U3uZvDmvXgorcILz4jsUPtrCghwqZHdSv.aCW+gj2H77.2mWKh3QAbQaOd8r+WXBqmltEhGUHSjEHyh51YIotcduRc6tJRcB2RPmdkAHCahnY07.oDT3pKVZWFf0kTaQfVM.p2drD1hZ0X0MTJ3dpwzB1tA4vhMKWpQ4JkI0pWKJUWKh5wUhPoLaw9vfpjP5nv3ylWalnf1qRzLx.0b5xNh3RmPVmlSeVjDMMQem78ZZEOpcjRfoYSEBVQbCToN8irn1MG2qB1hKAG3aY4Hi3iLBTfqnmFO9aBsTmwrYtTKQZlPOlEuJXOOnnNyWw9LrzQQ8ex6kWDe2K2P5LqL8O6o56D4XZOQz+zZsV5BB5RjHxdHO6LjL1HdKIyrk6rvsbWrkIKFrGYtb+3.Bzhuehpwkt9o4lW7o86qNtO7nbF92AF4c+qm1891sj+HUgsZNEKZmhGczAEK8rVj6ZTdK75QnaVh588qD31Fl947n9vvFzQ8TXG+I2TJw1EYy7FRGjRrLiEVpF2RmO3TwteHoB48xMoO.7bExNaK0RfXStwymvmeeHydTzv1ZLg8VVOeLp98CdW8LjuOg3atNPjhZUGSECFo.ti5TyPRwZYMSADeOmgTOSrAiUNgMUcqutvrE7QgjiLEBys5SkY.5Rro2Gd0U.TdZ6ZGUq8Kg8fkVUQZc5Amh9Atj6Ae+Vv++7sfC3eV93ptJ4g27qv9knDMlL6lBWGE9PhvMHnh05OwgKhXSmXuhe9pWRYStH0wafcvV1Dkl4qrttd7iA2sNnQmF0WWKYrAEwniAc7C4hBYDCdlzIU7p13StV0mXTlayjPpaKEL7t.GInupAGrI3VbTvuWXZBeyGGB6VQdUNxWRVnJo7KI4dMQRzhNEMFvmfI9Ur8j5mJ0pBLxhJky7P6WGiAIdmXzl.GhLNqOkI6vFDXkRVJCgu0liwk0yMc74gqVhkqIKd3YLZ9CQz+5j+xeYA60ikU5y5j0EUUPlDJNfef.aLG95ghzpf7XFxy5F47WUbk80wqKfZdbRWFrjQ8HVLbpALGAnxw6qlbh8FoVXAMEPqNHHZkX6LprgoIdpEHYYLNoAQaPdQMFv.EjcwSa74l7fbSGWNF4smt1hymP8B+wQE08wqlaftOfxYO5H14Lqvz0L86a4U8tPIOIphykEpgxQBLPr0VisCTESCfvu7t+Ztf2mpiXdODyolKdBUDTcSWHNc5f6ZafBGI7toWfb.qGEDtiZ9C8JTHvtawqOdASdCAsnR7Qf5KPNTZsurYAGZLVnO.pZ+VAfdPSsqZZaxGvLJqNulBxLlHIaiX8L6OV.M7zjRbLScgTgF6gv+Z3fSIc8AQCFmqAZv8Bbo.Ze9XGCU5E6UHgdX61mPF.hrL2MBOFwn1m4Nl.6A5x.kLVr9dxJcwSlOEcLcnm2nCEcOeN8Z4QqHY5CZ.ETuyDEWVz9aRQUsJLY5C2puL1wiUDhdpJYjugMdSgmOjQTXImz20Yn3AJllnRZCSL6HY1Q0WP.mqdArcxSqzNebxYCxOe4Fgbv44dTOe9FDvONvAPtlmVh5z4MBjFbJCfUAIvDJ0I54PFBqYp2A.jaRBKbaBEUzRbiFOSqD5hUbdccfM7b7cwgKWvI2UUsfAu0CSMb6x5iuUghQLyPkStLSTpxAClWs0qKnjqVm7EeAI4VDTYWHyOIav92YhsdzyG3dr8BkRkljHwcF7LnP8fVh6CK4IPB6qC6ITJ7Ku6+f778HnkEIDLdzFC0QufrMwv156OAQqa2ghvAm3c8sEUqDcznMUuh4ga0IL7PLcylMqlZzhS0IQi+gInJ4Zd.YoOYFdp0ISvoT1HBuQHTsZjwkcl3FpiRtjV7TyAZXKf4UTdwztN9dg3JX62IWUEyCTrNGt3kLdcmW.5UctPMtynFzS7TR9L4T1vGp4O2FDMiAgehSnDQm9i9LWSv.ZoPYXOlrCg6v7pfw8qI4Gy3MiIllIlEm5+vEo407o5.NicHnObCTeLngq2DZ7BWlPUenYPnX6H5X4RWD2QzO8S0O4wFX7iQvuLQ0h80TIdUzavFMxRvN9O0hkyHl8KjGPg40Hl0mD7WlcNWNQqkWDXW4kDY4LK4yfcuCjyRfAq.VBpCTurxFNExDZFsTr02RTknhsySZWfYnTrPDYonJMVU0QhyANuMeth9dNOR4xg37xAXTm9vyovbO9X1fTqTi5cZ+xSpzodi5U.Gej3VsmgxVAUAuJEUMjRV6r0VDrbhDKV2xTZ7iWmoIRzLc0F5n2FIbH9DVWuExNehijSzc7buTTRwBLdUzWzAPTBz1kj6CV4JCJCybnHHkCPicd8+2aTdevJus8+T+UB7ZWKnePlTugmNmImlJEPWNnMubXcS.Xh42JoW+Twae59q17YAmfD2LNsUelsYbNqdsY2lDd2b9sYCwYwvIBM9HKZuXdmocd1ndE6AK8FB96AlDGy2L7H2yj+lXuvgUWzCAnnCPGX.snU17pqv.JGLcAm15ksZW4XR4JUKd5QsasJeP4rrBCIeZ9NihD3ZCx4VFA2TnRlibQR0g+hvkNiiHpE8bfZki6NYNURimc8ig9JO2s7Tg95yJC8+lx2FAh4wjBJZ8l3vplCpnkgI5xrZ3D7Lj0vN+5YwtdYVxjOpe+DeVTL1S7wXBRcmWGya6OrKF8aIgGzvTq8f3encRO6OzN5eGf5IO6p0ZnicMaSuFiX1y5qCTJ0AdM7WmVCkzvuNOp6AsaDy0yDIg0JyN2rGS9s5IS5xL9a7bFAjV36vQp09LOwS+MAeIen1LqTlFoV6ySK96sS81nOeR+qOYbzEkexElFdCBuw+k+SFvLOaPzmgomvdRLbkINtNh1MDWh+NFtRkZrNhw3sZ6oArP5yi8VODnZLLo.iNGJ+JOsC.jOKUp+9+CBlqhfS8COI0zyM+iJ58.gzlff+0oiJTMch9GzmfpOGhlSOmUy9DQwcgeajVZztyrP66d0cIZ2UCs+sytMFs+pYh1+4zIWaDyhDVpQtjq42mdphELkNw84yj3pj9VvzhYMR9aVOQReYSGz7I3cS0NAd24MMO6QRoz2XOFz4EeYRiiLoU87taXrS5kc2PMp9c+6IQ0OHcimc2QvESeCCKvrzLCz+BPzxg3uJs.zSKgN8G6sea5icL7sndw+1ygeg9TO.n2Xev2v.xZyM8Fq+E76V6CR2hRh+tzmfmUbISieRBzHra5cAMp9L98aRWoeeXwMh.eP5p+o6luYeoZ53iGp0GS8bMAtkz08G1B1TrGCvtMnWDsSYsOAsnPd8V303LPKlsg3h+N7S8vswqWS8vsCdXpgzdtNc5IsNB+PA94h6.zjs3ipXlzGiWS1NkvhI844glFlc50KNnlpi6bc63tW2N9UW2N90W2N9MW2N9sW2N9cWcGwySuhphIGDaRk53SpHL2bs0pXiIUUvsl5+UFpof.

      posted in Snippet Waiting Room added
      C
      clevername27
    • Show and Tell

      As folks periodically share what they're up to with HISE, here's what I've been working on – an in-house plugin for doing strange and wonderful things with drum tracks. In the spirit of sharing, I've posted the complete UI kit through several posts, along with 1,500+ lines of documentation. Thanks to y'all for answering my questions as I continue onward with this wayward plugin.

      Simeraldrum Screenshot.png

      posted in General Questions
      C
      clevername27
    • LAF Button for Y'all — Slider Button

      Enjoy.

      Screenshot 2023-03-18 at 4.36.08 PM.png

      HiseSnippet 1619.3oc0X1raabCD.lqi2TK0lfDz.zKEED5RjJjkkkbRKfQQ8OxpUs9GgHGmTXDjRsKkDqWQJrKkcTKLPdaJ5yPAJx09NjC8Qn26A2Y1kRZWYEaI21CUGDVRNCmONjb3PV2W4vCBT9DqTGNnGmX8A1MFH0c1tCSHI0pPrtq8dr.M2mFU0VC5wBB3tDKqa8UXEVoVjD96O+xsXdLoCebUDxQJgCeWQWgdbs023aEddUYt7CEciI8ZaTyQI2V4o5C7bK6hjdLmSXs46yPwVvlXc6cbEZkeCMSyC.Y1R4NnQG0YxH4ORDHZ5wwBqRZ.cTT0js6H7bqObrFPHVKVe7H+VQi7GXumvULp9wdf6E1.crFw8AVKbUHs5bfjULjVLBo6a2vwWzSOtEjm22tlDlPZw.WcbThjkrfZI6sUfDRcgtrS3U8gBizH6iKVLOE9K25oSuxU+i1X2ZU14Izsd5gGdv9zqQ5zogYu.Mc2Mq9xFdBWt+V80Zkj9Ezg333yAuztJGl2tJ0IaJcqx4dYQTlTqB971BbcW09RGsPIylw0mc1gp1s83QhjIOs0vFammpZ9C4n+T5T.2aGZGpKOHzkHNkSOk4KXvDQ.UBqlnsT9TcGN8Lgaat9gAzd9pdbesfGTHcJPXSKvzpu94vPHpXAFzyGW7EqeIY9tIjY0jx7LgqtCHB.YT6kR19WyEs6niKPYPfvASCtl5zOPq5JBvQ.5fGObRP61JeI2ug3G4POUNgA1R4C91gXrposNLoqGeXswPckGmPhc4x1wDIhVPhHuMyyouG5vCz8a0xPT.LIKjsqxbfcGflYi6HVNtkyQWItoSfcEQPOO1fiXd84Fuyoge+oIMPHKnZMCWZDsa7P9qPW5wCc0ZnbCsOnjoqvJPurnEM6ntNbQDzaQTv87hhHYTQn4cip.8gIMY7UJIGmQ9ugJDwgQ7hI6lvQpA7rCYLWAvKHzYyTHStvUeoScNk6EvmQTK8NPs3TIZZHOqvEtr+byBiJvFVZSHFdaeUeoa5TsKDfKRCYL6Xdg8+PSsfCEdBJG28IbGMSBazyNb6P9Dq7VoTt0SXiP5ln+QUa19Zsvww8I4oPvw3i+j18EWMFnmIADi7QioXzVZL5SKHtXAiFUguylYSXasWljlY4GkacJpY6BXHvM8DskbWzXYmXZIO83XSkgClXqFW9JGXYbfHz9b2L.kmiQjMgywY+n3sqFKRdXvlt8TRNRsocT0IUpz0nToooT4qQoxSSo0tFkVCUxPJ5vuzwPSdDzHwKMehWd9DesYT7gm0QUx8UZ9Axr4RCa+SedZ5jM0p0TaC8N9JOOt+TaFyFy+pTLqre2lb+7zn3jCEDRWIYNP2d1xAxIZxJlfJYMoPePOtobUkmKlaC98kyXhXlswz4LDBhpCyb5tlLmhbdDAzIorMS9jP7im3JYNTuzjpa.YFUu7+Lqu1Tr9SqUgoYXFjFGR8Q4x.0UgeJjBdT9jorqvCNQq5QrduQ6OHVomAe1qFYxW2ZiAiJrw2uAFvgX8g1GT+vZPVhaVv7wVjyvnNDKaKIHYmv.MXoG.kFFXF5naS94Kt.6qwmWg0V3WHSTaIr5KH4+KiOeN3uTL9ei+++3ubL92nWL9ei2rv+yRv+8lj+KNXJ7+q+9+h7uVL9IhX7+G8lE9eaB9yNS7+N8+u8R7uTD+2wv+trlbuP7WxN763q9ItwnmTwP+GaWA1ysbMo4rH5S3PZqN7tX+imxi4jG+ltiFZYrlbnMOjEec8qYwH60GYHac3xhg4ZfEosDbO27zd80TF8gEdHsIWeF2HvYJppWXDe7JRAElB34GC92j.7OYNAu7k.2152fuif9i.0X3c0X8gq8vzBnj2f4GnKeiZ3t7JW7xJIufO9RFlFfwehaUi2bVFHzChGxdNt0ewq7V+yJh22ttP6zY5LtvTXDNN3+BFMuUxcr2oUKHE5w.tnc0meSeXjqw7PJ6Z3Na6wfqtAqZr2ue2Fv1YGNXcoDtFDNeu.t9KpbQrL5AZvktgEt.9YZbUrrkowUG1HoKywW8RmnChwWiYovZ.ljgO9TJ68vxzQIOXaWrPQRWgq3kNN3veYHEkoqSoafNkuA5r1MPmGcCz4w2.c9rafNe9UpC9lbaZBOnvCn2q9Ng4AYYsiDeZjvUgj+F3he06M
      
      posted in Scripting
      C
      clevername27
    • An Enhanced Knob for Y'all

      Here's the button's brother, an enhanced knob. It's a drop-in replacement for standard HISE knob, with additional customisation options. It has an auto-centre feature, whereby if you set the minimum to a negative value, and maximum to a positive value, the knob automatically re-draws itself with a centred middle-weighting. (No need to re-compile.) All code is commented for beginners.

      HiseSnippet 2156.3ocsXstaaibElxIrXsZ6hcK5Cv.8iMTwxJjR1Nxvc6ZcM10JVBVpYyBCCiQjCklZRNBjihsZ1.zWi8e8cn+p+aehJ5aP6YFdWWRML5JEEXdlyku4vu4blYF5yLIAALekB6Nd4bhRgei5nkd7YsmgodJm2QovuVcLwcN5BO1DkVKmiCBHVJEJ7r2HTnvtOWQ94e+csvNXOSRpHEk2wnlj9TWJOU5vSuf53zCaQFScyn8AmdtIyqMygs..yyT0UliMuCOkbIVn1NpJE9Ucsnbl+HNlSBTJ77VLqkilwt2KT+2QCnSbHhGLTFANJTbOlik.wBoJsmQcrFFOoCT.uLLME7rvTvuW8sTKZh7zTwWIG.kZQ17QgcxCumkCdFYgmdF3sAHUHCjddHj9Z0Ql9z47zQBe0btGm3aigzdVnDpqxN+quTsMCzviW0EeGomO7PhEZ000qfLz0KeRwhc8lR8HUcXXqdfRMCzJ8wgWM3O0s83a6MnemtW8I1CKmR7p5SltvA6WkysKUA8hARoWEJ7Efqd7dZB7hIuaZARD9nHvDB3nQiad032i9Vj9IYk7CfDiXIe+4cFeFHnVrfy5d9aNaLHodheZO3xQiuczB4z9M9XKJjQFylK77C85oK+bxmS4VLNm4Fo+AMNn0g0xqeKluEwOj8Fo1w0guGmWsNz.LvArN2yhZhAxRFKrsODe3jCM2rEQ.JWDLN1.aXsY8as.Pr2XxC77f5.3Kd0LiK1wIz.wqrQz+JQjhgoXwhuZsOnKtbPKT+ACt.07xNndc61GstVBKQs8IvZADF4vX2gvdVHaBwAYuvyjSYdUiPQ+l8tEV03Yg8sDkYffGSaMkdnOyD6zG7QSOqdfGzDbDv+.siF.zYoqsH1.wCwmQPV936odSSBDxl4KG3Nv6UKtZ7DbZoe5EouVIgGthww9KG4Pg2r.GM1YZi3KcHU9dp0TBubwOVbW.IugvkA.C3Ewrk+88RMPZdLN5urHfmffxUKt6Gv9nlBk+VTnmpJL8jvADf5LBc5LNLrPqqCY02jYbvJ9r0GNGZDA6EAHSpu4BWahOApOWM0EQbpHXbsQMnb.7S9brK2u1AUxECP.DGYX5.IorwIHzePDjonpADd7BndPMesqiloTNwMjUZrRzdEDdnnzZ5UaC5kET2.DhnfZCQpqiCcd.QakIInDZi.2AOg3DkX5K96A11.3WO6lLuBgkVDP4IKyJmUIwhIsRgk1PhZakDI3xmfh0QvxZ5Pm5QrDqTy5tJnqkwNrF3Mn8xBrUdijK0f1uwJIq81pk2TAUxgXyKAXB9rMnGUcWfd8LnOMMn+9d8ZTG995xYXnuC6rfjxu+f3wnggk2P4OhG7yJVsnFGVrEP8qwrQbeXIrVhipTqLjDhcVvBaa5CmrsD4Z9+omN26nmb5L5GJKiC6aVAc+Lp4LDMPJQlWPz3NBxUqNBEYKfpZoUsDdRlZWq73PLelVblWNcuB6MMSp2E+.Z+jGndmj3r.nDGOgsWq5AoCAHcLfy67f8aH5dTUuVtAiK.YTUGbdM3+eYNahvCwyJw+6mMb6EYSVYuLGY4RlOzYB5FYkFXX.vQkJkJoouYR.zqZDUap8Lh4cHpnRLjmg+gQlPFymXEkN2EFSCoklTP+AjdYz27Moxfr1eTHqL5iqjnfjQiSPeBB0EUwVV.DztNW95UnZvDLAZUP+OGMLctWdE2OUoWV6QpFvBykm2Wh1JYdQrmThjjljEmCbnnFAWTEl8sDru.sL8lhY4B6h5yLJoqmon7eTKUjorpP00pSjjYmLMoZY95wfiBI5oKqkj6Kpj.vJY6Wdsb6e2rByqbBGPtLP33PHExGf9fuPvGbYKBH6y9.r+gLaOPvUlPD6dfuvGpmDhGAYIJtyjV7i+XLNLcfvRr.RRwcSgdlhiv1tZa.egJ+6lUkm3rCUNj6+ohnMUfYkxIYSm9LwQSzRHBPQwM79UvNyCiLCbSTveLMBS0SzS9JAghXcEwDnIScHZaK1oUpxMxKQ6CrVishrsZld0ZGe3lMSNpd8Ja0R85vpo5vb4Sg63by6EtS218adUywmO3xssS3NoaNE1JqyD3ns42c58yfFsY4fwruvsHKVhdm2jyvymuLS8+ohW.tyYdDQ65XEJEs83lAAPKQoWyuAbNKSekXqDuMWai1qtUYgmSvMy6RFmLvSStK3h.gb0grs23XB36ybbH9abXwEC3+4LTyag6DhekPxdhhvokyeDb0seD7r2PfYX1LihLuy8n7AyIda6dCThdEHNtdDp.U4xCq+kQGVO7nCJT3L4EUiSyJRLGcuGn5+id+rxe97NXNN1SfSg.Mm3yoh4PgNjOPMIgWCvtpcHA2wYyk5F8hWovu6wD2GRtqkSe+oKSu3kpmJV0pT3KTeGyYgKQwM6857C+LzFL6c53xrh.hIE1GjBbto4hSLFoye+m9o+424RsrbHCYATw6srVGtuM3EkpUKEZvPmEvl9Fh8wtD37WgI6zs8KtMpCp0n9wFG1ngtRbaiHwGU2v30GoqjVzIbfi0azngQc8LNpVjI55G2nd8iTtWzEMEW2b5L4osRj725epx5WByWo9VlErSXd96DRbQXQCHlsYuHFwks3AYgkYunr+ucQQOVH90pCobyYaFi6rALBTweIvXz0q8aU6ZaCsARA3yU689eYtKMEnsCGZl+VLbbBf2od4B2Q.gvjH1bfGwQTknvNh0ygOqKdVjAFAsIkO7efOQCZHdtPzfFwCp3hM8Y2ZFVEPbAdegTBfIO4cWtq5aEOiLhW6qpBsVf0YVzaMMES+8gRLa1lZOAap+Dr4fmfMG9Dr4nmfMu9IXSiOqMhqws4BNyMb4.HXXWYM3BE55Iu+LAKT4+B7H1SiM
      

      Screenshot 2022-12-31 at 00.30.30.png

      Linear

      Screenshot 2022-12-31 at 00.29.28.png

      Centered

      Screenshot 2022-12-29 at 21.24.56.png

      Sample Usage

      posted in Presets / Scripts / Ideas
      C
      clevername27
    • Enhanced Button for Y'all

      Here's a (mostly) drop-in replacement for the default button. It fills the same role, but has more options (e.g., indicator light colour, inactive state, font) for look and feel. For beginners, every line of code is commented. Enjoy.

      HiseSnippet 1830.3ocsXz1aZbC9HIW0fsU0Js8cqrOTXiRAJoMYnpVH.InRHQAZSqhphL2YN7xgM5NSRXU4+79Gz8X66fC3fljoc7Aje7y6u4G6S73VDeetmQhjcmLhXj3mL6LgIFr+.LkYzrlQhmXdHdznInFiYntzgDipSFg88I1FIRr4ARrRjbKC02+71pXWLyhLCjgwG4TKRK5PpXFzSd26ottMv1DEGmBuz6ZZwY6yc4iAMZSy7FivVWhcHswRz1vzHwipaSEbuNBrf3ajXqpb6IcFvulow+iTeZOWhbQAiN.izfavcskZrDpw9Cnt1mDZ49F.WNYleXSse3WLOhZSmBOp+PtAZFEQ8GI1Xd0ay4TuBqR8hQkRDQk1RqRO0rikGcjX1NR84GMaxDDu9Xq4CMZbM1f8Xy84.FLQtg3KIM7fESoHcw74yhJjOelxoR8hk9P6eb6NcqztaGzxalJEDq7EnqvdZ7tnUkp0acQUHj0ywiOlYidCJe4P7z3bFw08.OrMETnt7QRLtoQi7puxqDypbgfOL.4R6Vp5NEWfuU4d1DOcpS.d5uxfpqVt2Kge6IW8aMZTr.76UyyhZTeLDbraxroVXHJFga86uCdmd6XUNVJ5LV4MmS5E1q.tfc73WcLXNrtjaDyQxdkfe3ELrlLrkfdEYExnRgZkiE+UHiRUgeMhmj3L7EEBjNbZ2OoCrQf7Y.RgPHm0rV2CA.ECAbX8lGbXW.xKAiaV9RmgXWWsd1.xJ6P+ahjM4iOWr0wG+dTk10PMpWuEpV8FMa2rayiaGapoTHspzPKhtbGG2.GBHfvxAKOBTk1hagcaw4WVgY2fPbSqKEPZhPAT0m6g5P.uDXOohkw47HNTentBZTpvK811d3qihx1YQ8C2zIKh26uxj5qoRBB6.h.gQC4dDjMwWU4BwCDCZ6oDsX.A0Swim4ivfdmKURoIdF01gHp...6B3WN4dkSkTwzl9QnCQXpTu2pITqPUTg8.RCPHj5mG8KzMnqxBvnFXdAP.cRUuGQd9570bnlhmoUDeo0.dIrmsKz+Bw6GwlzZhuruIXaN47IA4soiVYCwFXOoe8To7H1mBwDLC7voOelu3bcR5WxhVD1mmGlJQcdP5T0u..KAMFyrVugrCkd+jJeQfkeM.9+fYG1yqAbDY5yisq4xF1pL1fBMcrX9toeWlD5JzN89f5T20kNxOVeM5OP6DmJ.vWlknWfJhdN50fGV5kK8k06mCTeIJx126Ofy8IJeqkNEwOC37Pz9nzQyqyffhKU1NGFifJlDjnyuBRXeKpPt7fNjVBwFNfF86n74JlA8mve6FyFfFFa7QoA94tlJFTwcz.rhNpfLTuSgrgROy8Hp8cXZw6ASiFEuEQbAO2WCMkfJr0bPihpTyJ2UIzAU1gYEKUJNS5PUjrc5xQ1oG0fZQcFHBh9qHxFefUBU5VtB6NVBRMHhTeld5kb2dN5kkQgF+x3s1i+ABWzcsTzYF2xtXFlLc50YtyN+EDt18mbd+OMDmb2s5xcuu0kPMIPytqppTNSApEtGIn4GbvnPoX8gCVC6hIOPO81GeyDGBCcJwYrK1aa4nlYJijjcGhon27FjvSGai5wjHHlNWSlHQ1k8qqZhqLpv5cJjrLowDSj5Stvylp3RcXDaIISU1rnyKtS1B28ie11kzWrMHraic1bT0OzsKL7y5lCBoFjQNawHNUNxORvibDcN0TRZ9bg5RdvnKxKjEYFIGoSY3HNiHCmwf61AiKcZvzO5hWX1ndv0.lNtiZHlqG.oBQlPf5iF4Qj2WIWpX3rNfvDdb28C3WZNSGMBDZMReJiDuHykhxbk6NUGBINsUnEkEE17P2i5rAv4vxZ2I7wnqwLQT0E7c1bjCm3iFP7js+RcaYsKVV.HakHzyLJyAnLGDLSjPoApI3.yMzuuBqcoQQicPSosmJhQ0lKHGyRqFkL0soPKtU+9wtWfq0k3E61RcxacDllMdXOhWnKLDQ31pyeE3Gc2tBrkNgKBhbVSFUb7HRv50eGdifLV4UmCzP.Ug5hyON3hyZ+mAEXxuZFSLvPYJQe7BiOzrFVfCYJvePliHdBpzzRTibE0hnucdRyZD+KE7QJbCRv.y+dpB2LS70d2jnKjcQh44XBOfCP8QFFe6a5GXYoGO3IlGwsglvh4eKC4C3DrADcm6ADjOR.yGlwH5C7bOdfi7q8ANtqp3SMOgJrFDuNtQL5HDq9+PGCdVne1rd+9vfNyTvsLa7oG5a.8cD+op9GNGgEdTHuvr83gcfHMLa1.LiAGcAvRrgL2WuNubszCzgvrUK9F7ErYA45DAaVHbSigXKO9EV5JF4CO8CJHfNwTu4VRyijqQEBKNLMymKuwPpM8BKKo4+bnbLdZJ9.n4kO.ZJ8.nYmG.Mu5APyqe.zr6ZoQ97iUFCWfSWN..NotpIUhD00WgWlEZ7uvdgdHT
      

      Example of it in use…

      Screenshot 2022-12-29 at 21.24.56.png

      posted in General Questions
      C
      clevername27
    • Tutorial: macOS Code Signing, Notorising and Installer (Part II Added)

      Introduction

      This tutorial series will guide you through the complete workflow of building a macOS installer, including code-signing, notarization, configuration the installer package, custom icons and graphics, automatic updates, relevant HISE scripting, compiling, file management, installing additional files (including samples), Bash-scripting and more.

      Revised May, 2024.

      Feedback/Corrections
      Please share!


      TOC

      1. Apple Developer Assets
      2. HISE Compilation Settings
      3. Signing, Notorising and Stapling Your Code.
      4. Building Your Installer

      Disclaimer
      The contents of this tutorial represent the author's personal opinions, and are not intended as a reference for any of the topics and content a within. As such, the author cannot be held accountable for commercial or other uses thereof. It is not represented as being up-to-date, and may contain factual errors. This tutorial is not an official communication by any of the parties, by name or implication. By reading this tutorial, you agree to these terms. Apple, please don't sue me.


      Part I: Developer Assets

      In this section, we will create the digital assets required to meet Apple's security policies for third-party executable files on macOS.:

      • Your Developer ID and Entity name
      • Developer Certificates
      • App-specific password
      • Manufacturer Code

      Creating an Apple Developer Account

      If you haven't already, create an Apple Developer account, either as an Individual or Organisation. The cost is $100/year (US).

      Getting Your Team ID and Entity Name

      :keycap_1: Find your Team ID and Entity name in Membership Details within the Membership section.

      screenshot1.png

      :keycap_2: Make a note of your TEAM ID, a 10-letter/number code unique to you as a developer.

      screenshot2.png

      :keycap_3: Make a note of your Entity name. This process differs depending on if you have an individual or organisation account.

      Individual: Your name, formatted exactly as in the upper-right menu item on Apple's Developer website (once you're logged in).

      Organisation: Your "Entity name" as printed in Membership Details. (I'm an Individual member, so it doesn't appear in my screenshot.) It would be the first item listed:

      screenshot3.png


      :information: You now have your Developer ID and Entity name.


      Generating Certificates

      You'll need several certificates from Apple; which ones you need depend on the specifics of your distribution vector. For this tutorial, we'll cover the most common ones.

      :keycap_1: Click on "Certificates" in your Apple developer account. You'll see a list of the certificates Apple has assigned to you. Here's what it will look like when you're done:

      screenshot5.png

      Just because a certificate is listed here does not mean it's ready to be used to create your installer.

      :keycap_2: Click the '+' glyph to create a certificate, and then select one of certificate types in my list above.

      You'll see one of two dialog boxes, depending on which one you create:

      screenshot6.png

      or

      screenshot7.png

      If it's the one above, ensure you choose the G2 Sub-CA Profile type.*

      :keycap_2: On your Mac, you'll create a generic Certificate Request file. launch Keychain, choose the Certificate Assistant, and "Request a Certificate from a Certificate Authority…"

      screenshot8.png

      That will bring you to this dialog box:

      screenshot10.png

      :keycap_3: Fill out the dialogue box:

      • For both email addresses, use your Apple ID (that used when creating your Apple Developer account).
      • Choose "Saved to disk".
      • Do not select "Let me specify key pair information"

      Click continue, and save the Certificate Request to your local mass storage. The filename isn't important; you'll delete this file shortly.

      :keycap_4: Return to the Apple Developer website, select "Choose File", and choose the certificate you created.

      screenshot12.png

      :keycap_5: Click "Continue", and download the Certificate to your mass storage.

      :keycap_6: Delete the Certificate Request file.

      :keycap_7: Install the Certificate by double-clicking it, and following the on-screen instructions.

      :keycap_8: Repeat this procedure for all the Certificates in my list. When you're finished, ensure they're installed by checking in Keychain:

      screenshot14.png

      You're looking for blue certificates; the orange ones (com.apple.systemdefault" and "com.apple.kdc." are not related to this tutorial.)


      :information: You now have the necessary Developer Certificates.


      App-Specific Password

      This step has recently changed. Previously, you would create app-specific passwords on Apple's Developer website. Now, that is reserved for use of optional Apple services and technologies — none of which of usually used for audio plugin. These security entities here are called Identities.

      You now create app-specific passwords on Apple's consumer Apple ID website. But before we get to that, let's define what these passwords are: a layer of security to prevent third-parties from using (stealing) your Notorising identification.

      Because this password is a security for a process, and not a product, you only need to create one App-Specific password for Notorising all your plugins. Let's walk through the steps.

      :keycap_1: First, go to Apple's consumer Apple ID website. Given that Apple has several such websites, and that they change, you'll know you're at the website if you see this:

      Screenshot 2024-05-19 at 9.26.47 AM.png

      :keycap_2: Sign in. Ensure you use two-factor authentication when you sign in, or you won't be able to create the password. (This is set in your Apple ID account; just Google it if you need to see how, as this process periodically changes.)

      :keycap_3: Choose Sign In and Security from the options presented. You'll then see this screen:

      Screenshot 2024-05-19 at 9.23.15 AM.png

      :keycap_4: Choose App-Specific Passwords.

      Screenshot 2024-05-19 at 9.23.49 AM.png

      :keycap_5: Name your password. This name is for your own reference; call it anything you want.

      :keycap_6: Apple will show you the password. Make a record of it—you will never be able to see this password again. While you can generate another password, any security entities linked to this password will be revoked.


      :information: You now have the necessary Application Password.


      App-Specific Identifiers

      If you do need to create to create an app-specific identifiers, here's how to do that.

      :keycap_1: In the Account section of the Apple Developer site, choose Identifiers.

      screenshot20.png

      :keycap_2: Click the "plus" icon.

      screenshot21.png

      :keycap_3: Choose "App IDs".

      screenshot22.png

      :keycap_4: Select "App".

      screenshot23.png

      :keycap_4: Configure your Identifier.

      screenshot24.png

      • Description: A proper name that describes and differentiates the Identifier to you. (You can write anything here.)

      • App ID Prefix: This field is data. While you have a bit of leeway here, I suggest you follow Apple's suggestion of using a reverser-domain name (i.e., com.domainname.appname). Ensure that your data does not match any other macOS apps; I suggest using a domain name (minus the TLD) that you own. For example, if I have a plugin called "Fighting Ferret", a valid Prefix would be "com.porkinsrocks.fightingferret".

      • Capabilities/Services:Select the specialised Apple service/technology for your plugin.

      :keycap_5: Click "Continue" to complete the registration of your Identifier, and record your Apple Identifier. Ensure you keep this information, as Apple will never show it to you again.


      :information: You now have the necessary Application Identifier. Notte that for some Apple services, you must now go through an additional application process.


      Choose a Plugin Code

      This is a unique four-letter code that must contain at least one capital letter that uniquely identifies your AU plugin to the macOS. You'll use this code inside of HISE.

      Unfortunately, Apple no longer maintains this database (nor even active documentation on this topic). Regardless, you're still required to have one for each AU plugin you distribute. So…make one up, and hope nobody else is using it. Choose something based on your (or your organisation's) name, and avoid anything obvious (including variations on existing company names).


      ℹ You now have a Plugin Code.


      posted in Documentation
      C
      clevername27
    • RE: HISE Look and Feel Tutorial and Toolkit (Updated!)

      @DabDab @orange Thanks for the info and kind words. I've added a "getting started" section to the beginning that explains how to install the fonts. (I've likewise edited my first post with the updated version.) Cheers!

      posted in Documentation
      C
      clevername27
    • Who Wants My Plugin Code?

      If you can finish it up, the code is yours to release commercially, or otherwise incorporate into your existing projects. My purpose was for research, so I'll have no further use for it.

      It's nearly finished, but simply don't have bandwidth to complete it. The plugin compiles, runs and works fine. But some things are not fully implemented. Stuff like how notes cut each other off - basic HISE. I would guess it's 91% done.

      The code is meticulously-structured, and consistently-formatted. It's ~7,500 lines (including comments and line feeds), divided into 35 files (mostly LAF). There's also a few minor tweaks to the HISE code (e.g., getting a component's ID in an LAF function).

      Help me finish it and it's yours.

      Basically, it's a sample playback instrument (big surprise). Here's a quick walk-through:

      ezgif-1-14c7246e37ooooo.gif

      There's also a Home Screen (not animated):

      Screenshot 2023-08-12 at 4.10.41 PM.png

      Some interface examples:

      Nraf6oE.gif

      ezgif-4-4750bb0b65.gif

      And a code sample:

      HiseSnippet 17234.3oc68sEjabkcX.jro3L5AoVwUqj1URsFQIMTK4H.L.yCorl.C.FNvZlACAvLTbk0B0CPiYZwFcC0cCRNdWJSmcsKG+Sb4uSkZSkpxG4CW6WIUkeBsc9HeroJWkqJI+E4jTIe3ezGNoRUtJu4bt294seBLXHGRMrr0N31291264btm22ycKM0Nh55pZoROUqCFHlJ8yw07.Ei8KuufjRpZURk9Y3letLykK0JGLPPWWrapzoO80wGldpyjh7uu4ZqHHKnzQzooTo1QUpi35R8kLbZcqherjr7pBcEaI02UuyWrVGUkxpxpCgIxo4xjZfPmaKrm3lBX2NEWpzmsZWICUslFBFh5oRelUT6dPy8UuqBs+6HoKsqrH9iroZBCDs4UUk6hyXr0Tk2WRt6VVKX8Tv2eKmk+ooK+KxsgTWI61c.CWf7.dm2vM7H8o7N8NsmoWV2SuLtldALkNsqozyXgQHSIYgCD0HSkWhaiZUpsUi1j+GZ6tlMmp7PMMQEilhe4PQOXku4ZlOpkF.ec295ppCppH.ywttaFG7cgt1bfn2Gj9zIdAmMxEbJbsspjrHt3Sa8Cn23BEP7UDLDRk9Rb4leNkVK7wKUd+x2szbyswMp9i+B3+ctOYt4v+m9RqjBeQGBlzHIVSo8TDLFpAsc1MG1eEA3SZuJ9UE2TsuD7bB0u8RqhnRPMiPHX0pY3lHmB17.YZI1efpSC+jhobgQOCEi9hbM6nIMvv4I3p8Y4poXHp0S.PYtItn8M0op7tbev6ez8uoee9ir+crXvqsYsV7e5103asVipkp7YO4LyG2A+H7eevzS+Ae.eq8E46AryupArYSmeOQCd88U0.pXdgd3+cntjxd7FX2jzzM3w9M2zkUUzUkEmqirnf1rW9ivwJI+i+5qWekRqyWc8paTcyVM4S1qQlpWGmaB8GHKdUMQYfqUWdMwdhZHGR84lFj+.Su6Hnw2+fljtow+i3IhBmCVVlMM6LzgPq8Fkps4LvL206o1sc8MaVsUaZmILKbOFan1cnLxVY1YBruyPADjYphpgHOLzveF8r8tB2Qr8l0aUEFt1Up0bq0Kcq1WGHx+Q7.T1.30ie5xp.SIE3GyNSXuf2EirvthxNcqTqRsWWP2XSXZUuWOXZE42HQu8LIEuC6Wqx2pQoMatU8Fs3WqzlUVuZC9jf2cVPFZBJ5C.Ry0DT5RQtUU1SRAHB0DA3aKlmOBTkj4XYXk1pTxoIclcaVpUscpRfVsKCKtMqtNL4xZgMpTsA73J9ddAqNTt9Fa.fDecXAmN.Ss1M2pT4psmuR6pJcT6B6JAxQwFB2cEPT2PMAY2eyHdiJpx6dPIi9p5vKjy5E1ndksWuZ6cp0r1J0VuVqa0d0RUp1tUsMphcqf8bo41qj39VaiRWOQi4Z0ptdEOOMatkrd5Ja2pU8MCaXb0wlk1XKXdAXwFsZCSR7o4sd350a0pV01k1DlTspAim46OeFqdrZMxK2n1lWucqasUU2vyZkw2.ZDPRahOI+HyxamRMpUZk0qlP5qomFI52SVcWA41cnJ8UB3zHYLDT9F0yixqohXOXO.u38.l0J.Q.8M.NLtd8RcLjtiXMXgnMrOLN0PPyLJvd8Y9nn5GnzXGodRcRVuQMiRVOKoYH0A4jJop35Mn815kDvWB1WS4udcM0gCBsuzO.smaHLHjYQWPgW3KJH2BfVnZoqJIJ20SeDjkWSxP2aaJR8IS0xvSI7cBYBa2OUbdXt35AHCQOimCb.2NJulfdsF5A1SIKsIoqufWVJC6uqnV8daH0AGkLddX8gFCFZrppFLyB90cgsEkE6.B2pOPL3ItgnPm8M4hXOiL6lKRQxr1Co30M+i0.k1p1nc3DBjACleVufk.nNBCPa.5hxevE4m9YeDuuNA.h58JS6oUGyDP+5KbOqGmOyxK3+qgjFlJ1i6ybVjQzQP7djcyzrsv6j43.f2..sIWHVoM2oTxkfQ3yXoAPegaKtpF7CaiXlcwbYtB+BKjYzDk9ADVoi3r.dqq59e705OXHr94aHBR0A8nzsD2R4m11741O1Qe.YUgtkF1URkXUJrZT2RUU1Te.eeEg8vgFdv5vqA5ncGQsc40GHPTSy0HR5o8fMyOcqF0+sqVtU6UquNPTe+t.EcaMU09WUuOvmXtAJ6g5GMNCPewtRC6eXFAYAs8DsF.60lj89NXYNPFVgj+Vh.BFk0Zo96Js2P0g5UfgaeQgti9bcEU8AfcFC0ykolRm8aH0UbzGjlB6JInjkLBkJ8IMg0j99i9vrkfjtgX1EHSD0N2trFLLkOnOr+bLlSFB6sW1EwwpxZGpQZB.ksGhC8bvgmsOxp8EkGva.u9tBZiBUD9dssdOqA0+NTj64zSKozQFT7Y1Yvexis1GDSIpM2WniuG6iutlvf8AAhg73s.9anLQzVL9MDUFR9Jgz4lFZ.WYqgx+Db8Rq5.L5oIzW7tpZ2dNmwA5.LLaHHo3ZLH89tRcA6tz802xRZfk07eB+JCMLTUXmXNcBjcpwec4CFrezccewN2dW06ExSU6uqJ+Jg83JpfhE0A1hxBGvit4MxO0Z0ZVMxNTSoqTGzHZ90k1aeiH66FhfjH8feFHvbOMPho4.vup.p7xAA24FBf3fH+TMD2i.LqIKOj37PPhdR5+Gqntav8noLvTSKxAo4WNTPSLdfJpvpryZM3NcSg6HhT0gRnt5PkNTEf4cHAGZHA1THI5lHD8v19fQ0cgQca6myP6dcb6GLT1p8xCpna.68CajrdgRVu.6HVozM4AHgglpLOrPb6Bk9nmWDCYfqZY6SY5KSGWd2bnD.LwU32WsuH+.foDLogsppv3qExXtF4UXAzd5ALXQ87UoCOyZjtPzIquNC0MT6Kg5NZqoeHSGTgU95HnHpOI5vbfOCpjdjSslf1MR.7xjWcD8jnFEfwDjOPOZvA0RC1kqtDZJTrKulztYq3oyvjH0MQ+BWqz50ZRrrmOw5bJoHiFrzybeAvBT0XK4g.Pge1Ky+Smd5orzMF.7aqKtFvvBz2TUdH1cvppsDTDk0mEjLJBS2oZJZXPDU.cuhj9sQCklEUddpZJvdHAY.W27.PWi97n1n2+i7OEBnivDYpomxDWApVRLdodud3PX0LwOrVwdwRaWqGpIt6PI4tkABCwt3C0mkc19iAsFWGT8Ud1rykw0qFtpztVRaPooIKonVQl8yB1hHN6mQ7vr4li4bO31bKX9n31Od11HaZYZj3yRbmCcIw7TbKi4NF1QybWB80Xen0VB5Zh4gz8B9FOBQtMMN6io7KrIL.nCRNRfK5DRg4l1g9D6kMDVUgtFsfqGkgXZpiz3c7XczQKw4I9zmGzTsb0lMq2HwQa5IcHyQZfllB2rmHN4qWubo0MsvuYxYjOkSXBJuQk1kqiNBtUU6.XTZyRqeql0ZRcoaRmN7HZmekRMqUlGCARhmOSQ9Bjv.gaeI5wPcSGvZSVsCH5EaaSRSvbZCzSSfA6fs.aZ2Ng8fmwoy9BJf7F1gxr4fFsxzGQb8QRQAXJI.RTqTqboV0aLB3.zCfR5CPqDvY6.P4bLXW7p8.0s.U.5fAkeO53iKeBadhs.hXa3JeVOqkK+Qi.kCYXa0n10ud0FiPHbfOfTO9YYfg+n.iIioj3ozuqjQm84mkc1SdNh6mZpNBfHsHIE+PfsscildLVrsoFrytKQOe+O+5aW6J7T0M32ETd51.HZp6O8T2G+emJYPK2L5LCeXRiIgIgcsdDLriRolRt4kz4sbae2q3P6S0guKZNMzCyfYbEhR3UDMDjj0IsiFoJ1sO4EU36ZRK0STrKlAKyQwTLPlVp6smrolEV12fPIj5eGA4gfnY928c4ixkrviYFTyIEy3PktNkOyp.hFQMoNVD+l8oph9PMTsFAWLALzj1aOQMPg+8E.PEXsCLEP+W1EiNmYzsgEJYkZGF64jzcXKrgvfAhcm0g+wkojcH9mn0s5s4GNfp1.40MYW35aQBnuZ.rllxjihtYbeVSBcXs2Pi7oNe4O6irH2Y9vz4MOM94.tA1pTAwvYyeYv7KzCInlNpTpHSxAWKdWrHITWD3OLQbMsPzxrvv8QS4ZJbSQ.rdGv3NdLLGlTc2AeYxnhvTuio4FVx6yx9RwDqJzWcH5jTEyInNYrlJQAHG0rd1YL.i2m4JrKmeH+LViHZpimUQWUk2yvYsX3csP5384EQmi+Hb9Oylp.JCej4789TpN2yjoG04wXLMne86a94fuVSSwi20z+G1bNLow8SfEVFTP+Pz9AL2EumIZyQbz8QcyYU7FMEaZTzv8ml20yL4kSREg.dLZ4gVTu3rz8kWgh1s6Xpzmwal6wkrL2qC0TVWcTUAs9.C2WX4WYJS6eSkJ8oLmUPWMHo.2ELSANh2CWQ8doj5lJ86w0A+oYlGTGDGWCj20dCoNznKZxcNEYI4NO7RwN7uf4vS83EYvuHmIe5sj5baXZ9Ev.FvHscMRJGlJcZyYOz0AhZnOrf1pHdGoNhzr3aJtJh521PcPpzm0N4WRk94oyfm2JG+Pi7ISfWka.92s2nTyVUazdEPpzdZ.Yc2T2y8L3.2+3tRcM12tgG7GVbeQzsm1s7K+EE2cOqDm843xmawkmOyREVHeJIvlOuOHS9ByubNWOHGyS1UUCL.tozuqmTFk1J5BzgtRdxyUD2Q49Crz7YJrzhKrXJ7AjbvLkKnxyFFT4ULgJq1nzFUaSsxscoFsbCTtTQGfxCtQQu.ku9OfEn70OvEPYZtrKr3hKlKag..IEVL6xKOePfDym3dQ5ZjrWhoOmq03zgsFeSy0XyZjTLg3WZD8ChRYWp2x0Rs3uGyRM0ArK0T+VEsmKiB5KUQPRJLocM6CEQjZbWhMcsk838RL8oc0qWvvLSvoqwUkUEPOc0ByKYbo9VbFveZuRUUTodrgrlYWroJ5d+Lyh8g2y2h8C8OqiCz5i5coL.EL7+aw+0Joi2P.zf7daA58SFiTLbNVJ6xYxrTFeaSVZ9EWJW9kJPyE6S8po49oSyyOiMm9Zcm4C4mo28ZWe6Vascq1WuTsMMAt34DXlqf8lJP7C4yR90pffM06dSUsaSBUNzNIaEHOqo3dXfBWWrKhmgGkYtLjGr8fJhcDN.k74p0Jf.ofZeacwlvRninoUr5d+H2V7tzP9fyIyWYKAhhzleVqVQQdaHP.atFdyQkrrDwwN6z2O0crjcl9zhVISOWZSATIl95c7PeUYnfrK5KPVX1CKM1rG6owd+SnwBhF6SmFc3F4g7.AGO+m8HinKWjDcYNgn6DhN+DcOSXZKbIuXdScgVSTdvNRh2EjhFnBfm8qSGjVwEco.3YsTbd7Tu4bgMgmIvIrUXbhReU3GIetDwB6+r4Z2Q0yziv16Wyy1a64MydZl4smcYmmiDIOqWkcOleqKnOX47KWX9bKuXPalWHW9EVJeJVCIfWIS1EWHi4Y+5lgsqzhWE0d81a0bD1PBjvdg0fgTNv5+hzgPDk.x.m047tVNKuTlQhc7OvC9x0FCFLV9n1X3YMM5aLXP+aHnc6t.OI5lBGzO5c.ebVQKkxlco.v5EJrv7Yxk2D49mQQtHqHDXBnGz8z1rmZJJn0Ye1Vao1wcSqnJ2cUXthm8OjzfRFrpz8f9cSDf.MdUJ0.wmha2Xcmt0TT6NhZaOnqfgnmGTljdElv.Ry.MC9Y7Z8wrEw1.NGb0u2A6Ip3AK+RdcFAMkdH322f61Jp6ZK4SPGDasip7v9hQsm7W9UllBcNNZmSoKfYF+VXvRLrN4rIE+hIOmgz.bxzTzPmFCcxLgWkFB58vjNiYmNPNuvh4VtP.RSWNagk7Hl0dmdlkWZ94Wv2N8kVHe174WLep9tONw25g8EbA.VpXe0tltaoizt.sWeotcw7TPmjP9tcWh9vd8jf2kiiu6JoFpKtsRW0MDTD1STi5kpHjV87g55nWwx0Qt1Oxfm97etWqZGAz.AidVNbPY82yMBvXX+n7PAqAfIxgd1H.jWlBEVZg4K3CYCpakM2hdfSemvDRx6k6Xy9vlMqzDwBbwk9eHMwGWbo+6ROJbirfLmsqIt1g01aX1RPdGvpU+9uxYkN0Y+M+8+8+FrU2fkoN6O7RWho0bXyu8aw+arjD6z4+3u59jVEP4M3Y8.i5jN5nyxxRvew+t7qoBrZLw2Wfi.d3sfOoTGH7knqH4RiDl16M+dbf9d7pCLj5igVwJoahhNd53b.IE1ZElpCsu1XXIMJXgTtUjLMmeAj9WDur4hvxA7ziSVhcgp+UvC1o3X3Xv.cvXHdKbz8qJQAOe6MBG+4wAzWHT9XWlKgw+LBkBYbW2ukOv4M7y6KDblia8RnDFKlTgyWydeyLbkLCkrdvQadt.jc1UrmvPYZH1bip76p67fkiElOTdKt2Nd9vnjeaVnBYdYmgWraLqEId3WD.dfBe43fOPpjhSBlV0CqNtbYAc6.wKIfypce8vYkKKnaX9kXDP4z7cbWtLReljvV3cXVNkquS0Fj.0aYe.C3TpXTAZ4mlDx5jf.8Q5jY9ExlqP9HzRxOYu4q3cahSyggFBDU5hgapj.XuByhr1lsp1XUL9bTFK5gDHCFtviEviwoR6E.RINZsPhIVNlmDJZZL4cmPFx+.VFxllRFCOX5mYJNRugYFCufV9zZLueh2QBuFhVgig9k1LnuF2JhXpRKPVwVUIhANGsFL.7cQ240GSfVlLAZtTgxSVReCUzOaBZGPU42Oe9HTdJbb0qwhqZHZlgAghopXhodFNReOFfmFcAoWmN2YQ.WgdVGMbkMPlROo8TGszFe3.UIEC8fj15CQEJJMB70KFJ956yhuJiTUxIBgcNNZmehDi85lSd2nLycYGR7Px75a3njWmKhLSLV9cSyY08mHY3cI6ouuzZ7QI147ghclwmvngFp8wjwDOIJQEEeaTzyxY+NeqTnTB7MSB3oc9jqufqbMMTjSEa8ELUE9D4PGZTzTgot7OjALQSXa6PtXcrSiwZjIf1xAZBynoMqmHLE5Jd9jshqozSRAvyLq7G7otW4Wj0rVIejlaVbzbvjOP4nfgRjc7WNzcFO9M+bLMeIDKMC29oPM4JTCqb63uSmjzm7sXVtVYd6pXFgyBdufavq0BNojLdQF+pg9nAC.YjbhfQwygg5Jf.XXZ9DOaZe9jZUuEvz5TfiQaDqFZipU8wijXBQYP.2XAF47G0Q72ABYGMTuGnmohreWSnGI92V.HSSBCKWvog5vDdQ+iANAvFks6tPBlxURiiwR32yKgHW5+M+.m3cvktBSvGnxXmGWuKD.kAMVrAH8Ma1BYVbw4SEaFDaEI64WDd7hEREqxAQRNQEq1PPYOSO7ouu5ccJdqjV7IjN.eUkDUXwMe1kLBFsjdvchIMMR9dZ+5O4KPdLrTs8VAKRIWtLymuPPpDUHKFWOV8UxkEzfJ2B3XQYe+bblGNqRsJMZ99fQB253oqvLu7SzIsHTXaEGIK8BHB5BxR6ozmLENKmrXOVGk7vajDETSN1JTE95YlEAtBmuXWICAaeQ6iEjMzjkFMbc3mkkFcMothrxtYzmOman4lrJIcEefmq3.v8SfkOSlkxmMHQHKVXgLYywRfsv74yjK2xYyFpZArlnlzfM3m5zim+SkDIYuIyPSgzkwPsFSZYMAijUr5Kkb6cFEGQGtbrDA53YAcjhNcy8w5ZXLQeJo.Fuv3+q+7DZSR3KL2vm.2QFtRAjfIcpj.XlMJ.SaR+xxBft3CiPg9.CcgOXXr3iQKROQBpdNtrKu.HQGDnylzdtdfWfWpIDrKGCr6y2+vaLzSRvtWHoaHoAwjJa3vGN3CIyrQLDYiAuu3ip1o7mlKIQBKdHEiVB6C9R2fyYYUeqpOIrUhmDzG1KXWOgdF1q5UzWgHBiTb17lsduIGMqMBKsFhfRyQitD8Ic.Oeceu6Poy6SycEFphrKlcAvzgbYJDfhdqTzQ+pWhC8orlB+VRcLT2CrNTmkk4OYb116ClGg9aHsW1kKr.nX87Nf2yws1PMMgCR1N1Wz762Zi3RDoaEapT8fOs3j6DJlXagOBSDov0A9RV6PA31QQNHsi4j+E3L5SNPyXUn6.+KD+nuwgsUvYujqzq0apH0Rp+tZhQjFR9rsOSNfQ6xKknzMJTR02v0ZcjxznD.0hU5yNGVRaWYczdANLiFsc3YXTnGAj2k0GGNVUFRJv3wGu25giiZMwfzlTDD01rYK.U1NY4xCyB41AfsG0ExjN+aFiT.JD0d7jUpgmcH7t3nAPy1z5uGk2Vhht8Ky0P7p5jxb.uS4xk8DA84AjP3QAqCBw5cglMalkxlK6gKaKeKWr37TmnU.zD7cmKbdZ9Y+Mdosuecb3M0wwDLzlTPgClB+ABQIfweZ3GyV0ff5d7.FiSlbiQxsPA7nTr7hYc.ukrhbqt6RRh7AWkBfE8TbtwZCJSTq8C9sw5g5vEl38Q.dlwggTxusAqk1E9zBcn8fkTWHHR8fToHFnGCBYm.PH8r8f7k4RXgnNpJTQ3KXx8t.PLFzB9q+7GQK3TsFqErf7f8EbFju9Zgh+uXD0ok2xrNsXuyB9HdqPKgwsqlM2tx6qppK5hU2+8G7uJIb67aWwUJFyVp.YxM5IGxRlyY5lPW63LTM4z4KaQtqjw9iDuuQkLIA7JwEFHj7pbSSqT87YWPRgGqT87jBL+zjZNOe1EgVqrFssTjSfEW5SE7oH2utDutyzr0MqV5iaFhpDOTNRW87oS.UIh2gNIJ6oOJTk3T92eEvYC76SOafNfxVCUPHYTG.+yYmiOfVDFCUD8bj5d3epmiT2C+SKBzACXAQtN7bcLbH6eaN7HgumIYOdKQ7AcH2G.uGzBYlM23bV.CYCZn6U7QFDMIm+sVLtW3S7waYshinlGi.JjdgCDEJ7AUsygN.E1kz+POoi.aTmr8jN1NnG.ufkr7Y0u7wRDiIU1o4dGVyF+z.PI9widNbn2JPJ4CmFjNb0dMWbZpUNDVZe8vXxcqX3W4EHvqEhyLl.VGMA4j8LiVFkBK8FUQPXcMo8jv6PK3UXcA6Nw31gHvFg4Y0KvsYc9sp1X05M1nzlkqlxu9D9TzhI5m4vsEKtT1.y4lkVZwBKubPwXcgEB3zzZskwdy6JbVUAV51WDRhU1x9RczTGrOVGJGhE3ehFFc.zpeM6GqyxfaqUAX4V0a1dq8EzEWGzJfAs7v8byj5iKFJe.+fmb4yjc97KDXHnIOHLVMVfmE49XQwA9z2BTTY.NaAXxdBZcIWsE.PqKncii0N3XRVS73hJ9LzXmhIParHHAGQdNWHQ9Fci56P11jXuITaj11LB3xQ7fi6GW9ttCaAPeiWhTlx0vzyUjdiAjxkLPrNtZHF+V1aT7P6CguSbIcnMCL5hfhObRzqosRzqocoS6YWMzSptqCEfOnhtkgT1vjXOR4iBN+w5gj++q1+1eiS7iNGhkgEMyYeOd7TfFkdIGiRonJ2kMzMEuaT7076xmcBvzyIniyRrxTigPuyaYaM..PipsI1xZ8.AdEw65VHCHegTuf8JrYtQv7xKyMcysaTku4FEVb5Re704KmOa9oK0hOelBYldSwgf3JE9sWZQKSKOShUl9ssUl1TTUotewPc7JRgvtmkeXqfx7ro4r5dn5TewhVpl9LbXYC2vygIuaWrha6BjsqHrojJzVs+iGEsif1fwQJAoYsG8nyGrEgGV9piLREuibvD2fAoVTLHj5yxs1V7qJIik7sioXU6nAdb.44IYECkLKTOBFtd9usKUVFwrY7g23IurYze7OmDIxnKBhIXNLtSRBe63mBdwcnDFMsFsGI2.rmKL.122E.K4YtXBBUcRfXgV9yBLoDYSmLadPhbkjkst15vXmA7djzstPLva2uth12IF.2oNB.GXdIC79PfdQh.Mq1q2b7VAfCeHHAmtWG4jArwBp7FGd8HgEdFRBOF2QAIJzieXtuXJOZzjglEdgm3d17TXQNiQROFMnKWLNAexB59zhdW.gmJiIFTcDj6wQCwleT8w1gAhwqcbBh8BIwYjNYq2iXtcS1LBM1RgCSgeOfinZxxHT2JnLpIC5GMVICZDXqvra6UcxWgvx8y2xs6BbeecNZY+Y3eovS4y3xNyG9IiDPvJCRuepnSJzfRiT+DRAVeIytXt4WJWgrExFZwmMGS9glnMhWjaqRaVccyaojnS6SPP1ikhKWb4ZZpeRwGCo846YWGMIftjj4m7toBmwYxEmhuotkexw.QbiZkvLAYC0axlvmvjdnqL9jpaFdeqttnflRXG4QeVnM+xKksP94S1oR2xyklK1IZskKw.2IP16EawhKtrD0m0XdBdUnJn79tgeNgvDuVWEKIumpljw98Y8Sg27HK0g3PmD44Ha7CbGiqE98RBlMdJoDow26DL.kb2pecM0gC7Ec7TOQAK+7ICrzSxHGdThdCurR2VWzJzpIJ+qNOmU24anp1O17vIU9j38aX62BKuXgrKytW0pYerzxs7x4WHeN+xZRF0hl8Oi1yW1rlmkaqgF1YJgoA2hRZ7pVfCRYheLCqpejxlh2kvwHJjhck57k3JqpbGy6Gbx0rt32ZPL+Ptsjwq0Z2nFCUxkboCH4vfadEe3l4qD4VkeK6yPRCQA4qZfZaOeku0fPxwY4L8.B+t.ulCLo6DdOSIEwN6qJ0IQoM+2gyp67k2W.uwC+VDFp58HYdseDDtyAqhYlPlNTHSjXnXcKHE+zb3t1xqBxADrZ.cznvwgKumFIGOLht9HQ5leIOKP664xvTO+3HLM..TXE6Y+sR0ee4Lf04KDh96tKOTmKIm1irl9zf8tCkdcluo5VZpXBySrLiE.WzSV66K0ftS.EgLKI1aVmuT4V01oJ+VMpuZMypZdfbWR3E0YBpwS9vtIhfJzZURnm7g2y7jOvLrlfR54eHJR0JOLAPxwaw3b3GdOeG9gJzB.HQAJxjz2Qef+O3u8O26QeHTfSn1y7AAOMMANlyAyBeEijreRLY5Xhf.LNw9tAbBQNroG5H3npQm63KD+0T.y5Oph4TQ0fxPfyygkpH9xk1p01MpVwWtjsrur8LatExt7REVZL2iEP8aMrbCM7zIkw8K2hQcEaEMFmDZatfWElZRP1xXRA6jca+isxtsYcmca9uGVdU1ra6C3p1efr5A7kpgwjTp+.MPkAZ5UPODzl2h6530f73jnaIBo7XMk2Z7+5uwUJu8h15rYBkSdtu87SfKN6vzld4htNvOSB1Q.Qq+8ZloJ1E3ltNfLwynvzDmO32G+uaPGoKqj9glDaXlsEAz54hu5fvrbVWR41r2VQAZt9GWLAqUKaGwQkeK4g6A5mGX1SkfrNNQv+PMGIBfzKGZ5YMi48Sl2uHdpBE8mxcfrmChrzrk3E.lkVqKdGeEd8.LhayhSfKfLafTHYsUDVe8AdNVT2gb2GYyNCXiJIH6Jwxly6wVIE6MdVPIvUXozV1GZkRamgq6JoXuczFwTz67wUd.nHs4qbh4IgXdRxNKLutW1N.7bCUEI+Jx3M4P7cw5dyPudzOO27U3MGSfGV3mCoPPnStKKtP2kcnymzmM1qdNFfaMEed46WZDYvt5FjdzIs79kH+JD3qLpXqnpM2NFv8ZdLfad7rCK6bkuwk95VZ18lve3XR0OvmIUy2cW3MI1QYWTZewTtKJsuXPZNDKZw24QOfKRh.034U8nwCLZUU5nhWxwgpiybGk4uen99KFznecZX3d9EAse2IZFT067b1w.t.hlvBToaXG1bi2FOS00dItoAQKfPlt7qHoHLTSPNgWxoutakHfktknrOIxH8Uy9Ry4StJrAejAowp4vZEO5tQSsIDbc7oaAHmO4pVG1IKcDb7WaRQOR5T8H2R.8ofgUydzj3a92G9kiZD7UGcb3sh7XWTyeRIZgTu0XgTONfCu0Sa3veLqd76VLv8g+3Iw9vO4w79vWh6VpC42SzLZIcEENFfytvHntXE0AjBFeTpKtYxUW74IWrrlC5StJK55p6ooT+gxXFvShgLcgwK1qGJfTPm5iIL05uiH+.AcJcfLVQTTF2Pi40t1RaVs7Z0qUNTCkd3tQp44WEflmONLT5HSG2DY14a5YAtY0alX6NGaX03jSQwZ2XvFYFj4n9MO1mEz1XovBK14ByB.dOV.ffSmvhv.OGCCi7AxiC64Xiw65yFCLsOZqop1+p8EADReeUnqjkZYLKxfBR8SHl.FGvzOUAavqh57R+ldrfxFnQsnPUKB6nF4IJS1H+4wd1pOTWAzIWfhkO4MOVzj0umSL8RAYfEIaWPSqF3NAYrRZIcP0hQ4fSeItoa1GrsljGdSuAgxm92qKnsmHM87L8N+oSr+a8nxGhPfkcWQ7BvfQs8KFS0iXzPsA3J7Z1GVWXJbUxbv6Ugyqx06dlCe45atS81V4LGtgfpvE1so4rVBI2YsGIJR99bk3IyC9cw61Fp5FjKgtcEHTCRj5uTXGed29At3+z3JDW.ERHJVBREFKO6+JrTF2z+kXqh26jswjwDG2MSxcdasGyNx+8IF2IiQcvxtNSrohAUoQ7+p04XrO7ekPw1+.VrMd.6KOjEiW7KNjrArp3NqngHWEXycpXsDA9LiAefmgaMIXAj5wKQyUss1.1rCKqq1SS7KGJpz4.SRFgcgk0.DoOWH7AbS7j2yA5+O5utHkf3Y4V0ZXSMBTW+Q+kEcwBYse2wqBM3izAqyb9qCgdu.Gq4bWiR6chHCFUpM+HlGAdRXbHVc.C1TNuiKJGBuFP9NkZYWzislYBQvTLAyK4qulCuD99olLREpn4SUgtSHoBvPy5k6sO1IU3R9kJzU6fmPjGDdTHeWutUJAEqiLtv5Ea9jWw5Hvyk1jndc75dH2injcvbDFmXmbwi0UsiWHYoUvDrvcLhvsIxMAU7W3XAe2E87wcISD.zIYkgiw4PoECJ4IgacrXga4NBRZkmbfauPxXhM4pqDIey3iqRKwj5xFiQh5nVcIt1XUcIhFsElitlwyQjv+U9klQH2xX6HoOTPVRWTazpyDI3CFVAmX1hVUHh6LFWkXiH.K1ZaQyhI5PfkcwbKlYgEyCpVF18NF9xvl0EJTnPx3r88L20XdM02HlBNwWOL96YrcNdcOiMt0YhvO.Auu0dRaf1XbIik3RMwCtQwv0gx2hKL7YrkahvtVJdGlpMg0lUpyHGgaYrr4xjG9OiVnOcVFSzJLQPWvNgB4FIps3SHzwpdS3sBSvkDP36xBBcXyFx8v0sh7xy3NI7x0MLXSDEMgPyn6HQ+ILlYInBL3JrmAPcdQSP6pxpBX562BOWETaMLvCxR..XV+e5AxxV9b9b+GasaTbR.RVb4L4KL+xtUoadaWTjI6xK4ODFvCJLetkWL5ZLn8Pr3BY..FLETLZQfUmmqzvtRpkTDjO.fCovyTUpz2h6mNMO+La43hqY9P9Y5cOmEi08m9VMm4JXWqozU7dPmxR90pp3I24lpZ2lDbLn8dBx5hSe+jwLw5paespkp37spSbepdXWJcWhoTqLwH1hKhEi31pyE902P3kZoDQL4QC0DbB6sGrMUM1GfnQWJ4qX6JWytGenbB3nejbTaxq2RwcqK3xIdlS843agkUSJbfuqJHpTw7IgKG7Pms5WH9BgEiBJMEUPOCdGIiChQ6jCAf1JdrVeLwjfXOBvNWkqlRGMQ7JZfbnYbV6Vdb0ge8QIZJ1qiaSPZcXJoE1k.yCdDwM5VOYvM57gYR3aYZRnCungXoonduMj5nmHMxu.ro10IqROITu.QzdJj6SyzmkSVrmQ.1TdI+PlBYWHe17YB+bMDJkQDW6zd8QHwpoElGTibDNjVNfyqvBNK0sKIzBBxXUmCktuJwgTIgSOAxRuyTJo.bi91.jMzM+um2IxF0pTiXmExZNXd.e98iR87TaFociIqjiczcM4xx1YBvC3Eh+5GxgKf.JHBuM6GU4dIEOYckirYIrZcDf3DP7zhKEzUeiEspeIZ4xLe9Bt8AxyxcUPp3ByiA4xVNWUtUkEz2Gz43t6Kh0NIARxhwqpwSuH8HYLjjgYwHyoTj44ddJtKvHXWreIgIqdK719PGUD0z.7QWDgTKgZIBPe.vVI0gBCczhRR.LzUAIiAqgWYJAh2Bx4JIKZrW1GfeDu8Ddv5O4EP1vbiyjHlr7rLolf2jBGRORcrIxrOebULVGf2D7VUXjgdGui2HevRCmHkj8QATcbK5YILnY9Y7MpwMKyXE2rXQagE5r2jUO6vpP6ul63lUenwfgFl9fOYWZ8w8gbcZ8T75yReghBPiKmK+x1kZ8EFiRsNSXw+Le.4FiAPNBU3sbyd1joj920beQ8sas01shIzX7+rinPic3KW6Qqn9KaE37pkaUq9lsojUol7wMytz3XBOGinlMNhQCFKNAKL6Dn32kaksa0B.ezUE8i4rw86G5F2jD7rkxNe1B4KrbxHamwDQYsfOxCcVvP3IjeiNBByiuxzdrWPmlqLzem8kzEaQJuXwcAcdOekvrKF1YILAnrXqdYiccQ6wZAL6m+q9.OEvLKPLOEFOxWdmwtcnT2tUNPQnuTmFBtBRgKj3rICIZCumiaCAiN6SOwuXJ8paAfss0ldiWh09qwoLzk.piiQ3vuGEGhG+aJblm.nSNlL1CMfEbPPG.AWWPRIx6IgKYejzou.O9FiGPNtiA.qdrglj4LbY+Igbt1BTFfMc2av0TzflUF8oqLUpfk8fE3b9xxal7G2S1kuj6izAlg3gVtARV7PRjUNuICDGOVCA66SukeyKULtK09fN0Gi4lnCsDqkyrzR.tyq2jdVtbExtPgkxM+xwj8AAnG02mQOJf8wfAhrNgOyueLt1LA.DKmuY9EF8H4YSz93JRd4.UimeoExke9Xbi1ERL3dcP9jgub7vK3txgBba9ElrANMNe6LgBbpMF+PG3zyOJ7MZFXYH8oZ9F19ckAF5tHNbZ+vyPSmo2glNSlqyJ.FlZmBA9tgTmrwbC53IQfdQTmHMo6sknvsICfO838s8mkw.I2gN0amNrjGxbhd8R01rcSPIWYQTv9Hj+Pjm0TbOzgxqK1EwevixLWFxC1d.H3T3.7ZvyUqUTuqRPsustXSxw1BKam.4ht2OxsEu6pBXcO.mSluxVBcQMBM+rVs1be06tg.At4Z3MGUxxRDG6OEZkmOC7e+rouepwgtNtcQAmzXKsXP9+KLV4E.R04ylILQbGVJxbmPQdbihL6S2TjusGJRxLzJ0E2PUQ8D5wS3PdTPOFUN9YN69VPncC1MiSh.69FdwzGsg0M4dK8QRvaOT2y1LaQNhCoaTPti2Az8MBxHhipv4FBX5Izf4xxnK9P4N3K8VPwFmP4FCBKr.49CLiuZ8sINlIjn3FUvfRTXbi7y3pPzo5MkAYigKJqJetExYGC2bG5X3l5lIgBMFn6HGA2mKr8curUxgUeipT3DqPwu4ZQb2aL3Ojc07+62u3nk9MrGIGeg605AKC6WBxQYAdDI87.OV4+rgtQ5Er1H0Ub2gtKj4K8KBxc4OCne5dRcXO55aEvsQR.kFMVg4LjdKu3xKlMa9kVzuT9PPYtQ2OSXn6Ww86Z4JY1HJ+vCbWzY7t715eB6xq3mWLoSQOEM+XqPEz4HAiDrSu8V5i9nG5TKUGIBPuKv+jG3C+0sXfYX.agmHxSDlq2yGzJTjR5mKQZ59lVzsTvMoXJZcvSXvsy5VC2e6hwkhzPKgwHG.ytbH5NRh2kvrtCv.TSUVmumpFzfjN+.RwalTqtoYRanL6BAg6aqhW0K7Kv0WrkrE3tPt7KrTN+mZ7bEVN2xKjMn65hnpMzjIbSvjLQJ7gAZuk9QBzdNq5kII.pT77QI3NY.EuDgzx1YSvZa+9b9W14HArj2csBkjnv5zOO+ApC4GNPVU.uCELTozo.1u6DF37bweD.ICKtYor49DFXyexO6HA1LKGgJ0MEx6oyCTHFhXo4Vfe.40Gc3A0y5aH0UZcQAMkPjskniRykMUYy0WpFvMggeVTVaxpbR.hh2ztrVLqKM49d90jCue3BPate6hgxtITlJgyGxqZbdtBLGUDwgBD6c2JyopoST28ZQ.hOC2e4+hmdgwWHLX76EFL1kXBuP3L5iID9zbZOcAfck3FnQrzL2.fY8D0vq8Nf0E91ykLh8YCCQrupC2WuXhe0OKpKyA.0vZ41p1Xh7O8Rp+rgAgee+P3VRFxhQxO4gtuqme3mxRs+iCv5I+vsYC+9o7BVpAX94GchPeGCJPw8kyrTxfIWNLXhGg9LRwN2Ci.j7fcN7fDSEFMEhdbAjDwNwK7yhhJ4gMNrfjyygebdqu9iXHxrgBQBUHwmqU7HkF4hbMA8HQ.ROo8FpQJdQGMPkoB+vDXVivby8v81jscyc9VI1qCdAUexuOKn5WpD786QZ+2uGAnZ+EsTsGX1eafK+W.yc2El.OU1aohVGCV5hL9pKPof7dcPvoT98Ub3f3UqWuUrkxrO+mORU1.e0Co+v.bib.GXzEV1600hkTsrYKjYwEmGTjbTJlSlqrVTMILC8L8RfmIiI+hnhiP.Efx7giI7BNcuFOGWgkVdob4i5fxS903c9wYiUSxbv16EErprfxcDbXGe1+geC8eGXk8T12+j+coce+SdwfxZ+DhUN1CwdqnVGwjSCiCgURwPOl.bdt9NSzIt4pLKHMAE8ApZFVKM8x6K1416pdOaf4Y+ic.lLDdq54hOcVaW6N5Qb3nvatAyTvorllNQov7LVhUrIAv3gYAshjjyGursCfjiNellqknPGRwkhI5m4xmI6RAUGJFMLosEchvWRVVm3KNgcUGZve28EL3wutkOioGzerC8UGpKdUT.NujwU3ET5xaPda5kCh9PYCLSawaIjCvrOh7RcUmK7P6G0cSSbWfQKg05f7KlOYhXecuvm0jzAc5NnkvtNmiFOT0ix1wKXiYO6CXN0Mz8AiLw3o8GL0.HFeEFhQLIkYOQIsiLr74CfDrmjbecC3SQusz.shYuQxVw7qpphoSN9UI2IYgVcYCFl6ycj9IFz6HHKRytJyY3C+0+5+mWK9K3qjCyZH5Cl806djCyvu5wMXV3tI+U8Ay7GTEvvlCKP6xwBzPegOIfZ1r+tLGYPobvzOPGX9PN4gPKcE6IfLzHdietjCnObxcMm49k6Z67qnJ0o2H.U6e5SF76FnL30UA7gI3ajjCGPzaxaW8dLGvCuX3.QrgJRyl.sK45n0a7g1mNT76NrWOTTrBP1Jz05LtTozM0miuTGLkZ4QdyD4zHCG9g5jK+bnST.HdgroINgDOORF5ZUyihzPWly1YBsKMLMli0J3MCwr5DVj.rErXt1VCX4vRG54JOYYamTOH9scjk3xvJLSlkY20WJ.uS3+J+ov7ymKa.ooyx4yjeg7KLeRjsD5FZu3yDwB7Jde0AZp6AeI8ZJck5H.z2gTM4d3ddkyD.COW03p7EJjsvBYxr.ygQBKHVKMegkXSNob3kTa9BKWXoQzdLeNLJ7pFYvvrv7vUnvu2ON3WPdWIlz.tUnbBCI6cR1gEyobf6CXLRTAiRNb56no4ZiUx.vyF+TSKg9X3roXOL9SRvaTRbGApDePWKgQ9gtVOIjj++4SXwizrTrDUtj8q94iHAakjbkDGNCfwr1QdghSls4AHW4sXjqXBznJ8jnJC6yxUdHnw.VbJRkPUeRHcvnl59VpMk.IKIkTI95LcDYxHcr2xodRZQ8wk9uHsqJiRBQt1dB6esOO.DF0WvBqlPBkXKXGu.G4fbcOC9MDUFlZf5fgCv+pDVrZMO6JVsUibMLep+Smg6ik5ba9JZC6+ge36+9fBsvP89u+ztZsc61t+YME9Mj53tk5CMHM0TAfi9GJ2Miik6e2Rc.9p7WkuIXo3sE0C4oWeeUcCuObEUfVoeDusmNXN.sfFx5Y1Y1BNwL+yMDjTH+cNecLmSGy4piy6qiy6zw4c0w795XdmNl2UGK3qiEb5XAyNdcUPceefaWshufqeRdoFRcE4KSJjmddMOsiunmFHu5ZRWcMACOukUS3KX82V3Bqeil2yWdeoN.5Y.VbQC5yy7DBch2lHSgxZNMw+1dwj9dFNH9ZLfgIWDCStfFlbANLyGwvLePCiEkA.aTDbCT.9ZjgvS6j22SKjWd0OwZ7VW8tdlALOAeellXF.5svdHig0C8NLVsxLR30sbHiC8QdGEZaTXAsklFvK5Ed54ADfgmVv21i32yjjqpqW2Jk.nL5qA1ZCaUf2wmh0Ozys.q0E+ryKjxUIA+Y3H2GzoBHr+9yNfqDuRO+VzjJv3.YRgyog3dCkEzhHOABVvWnwRxaFL4VF6KEWfe8+onwGWUajJ4EApoxXHeazNyctkZeFtqlMBCMFUXcBOUa1n.WEIMWoYtflgTG7VSFymZmbM2cAx1wPTDbTWoABEIEtKSMu7JwOMGWIY4jcZtdCuaNJgSF5bgslbJ5F2dA65ZkKfxSxaORzFh2w6f6vXHj8CO3FQseHfLKJ+DPeuz+sbe0WYq41W8UtzWZ5u5qH5+.MR+qb1+071+Ud3uHZf.+1VwBxScos.42Tg+j+zibbRKLBkg1Xju5qOzofawejFrEgPerKABe0WElOvKd3O.oOp4IbU27DjrorFSNBQb.Ec16+ZL68GLXy3b2juq9gtAX8Ncx8B3sAeeQMYA7DiDyMc4yyU5NhJRZ7ahuaBsUKTGjFtrtXKNwVnUMUh22iEfrXw3.HOnbQq7.75ZBGzUUgbaiVUYOIEw..Ky+HBrD.y5T1kwCPVoUkBwjIn8SpUIU5uCv.V.na6KxSerdJ5wuGshO8oosk5T+yeVtO38O592zuO+Q1+NlL301rVK9OsQK9Vq0.Pxe1SNy7wavOB+2GL8zePx+G+p0VuZS9Q3MvgGL4RnKeG0thyMsjRG4gcEmcFD6suFFduqxWQjb4ivi29H5y8E5yb4OZ5dlkeZdUEr45JydY9e5zSM8IacF2Aey5spxWeS9xkVe8UJU9iS5NnS15D1VmolJ1MO.zdqVa2n1lWG3ZUt9F3ePPDUJ0pDeradlRpG+rWWVEztSeN78puYy1lRcjT1ibs5HhaLf4B7wp0i+th76K.hGeOCdMLY2fsUfLO99B2Sp+v97JjaeMLj5zBfL7XEbW2U3GfipX24fQJnOJ7h06UVXfwPMx01jN++Hd19.eD5iLmQ3TpLLKvC8IuLlFC72QPSBk1BaqI5zsunv.LwTzIGWTblJBSdPUOhVcHC.bBME7Z7cnebxcTD+OxTUg45PF+M.3gvdhqoJCJ3NKv9.dGqI.80HeMbox2UvPfLntGv4zEIUArY8zHkyCc3X6M9+RuK6l07qO2ddZ8xA+d6HBPBIiCb+V1sEx6XVJsb+JVMExafk5KcCg9Cb+NNMZ9V.3YVS3H73lBXAISeUUsaLDr+VTaE.zpO6.yZN7k8BVUGbfoV41nJ9dZfIRjhtsWjM8LPa9l6QnZ.K7A893mEOHvC6C85.2jDWlffXoubuH0+zPoL+Lf5vcWcOsIERUhIDD5A6cCjMA1uUfeceeme3ODG46OM9+kDon77fNy0VsFv.lxCnQ0arc0lshWfJL9jMkAg+4+Q+H9xv7qUaSwn3by7oWlGkYhqcG5R.3Psoxr6x38ykhyiCiZ9J7gSvZ8DuaKb9S1NY+5XWr9A1o6O0zSeeVQ+85M6kmFk8e+o4c8LyyRkLN4B3wHwtVTu3rTr+U.xT4gh1cDTxuJXRfpVSL+3P+FshZ2CvSukomE1wIOCylpIXRA0xgNzRInqNppTSQx.OXoVmJ88kj6ZayftS8GDOqQ0H0NPRH7IsA8CLt0PBmBoqHdGoNhTiOv5Gt9sMTGDjkIWfiT5dvHfCz.RJDCSt.GVkAMe.d1cbaVBVylv5Irm6VlzmxKL3zgCCx3BFDvJLgSwWjaKIiN6G7b7TALGAH0Qwb7zsLMEtZudhcLblfmga0OwCbah84SeNWe+ui02GnBtip7PBn.+9uJWu60t0Fsgs56Tu8FRcvi7KR76APUQ6.Rsz2UUk+lhFdaJUp0gYrRGO.yZ8GLTVWbcQk8ba292bMy4VME7FnwU6aqKhQqdOM7FqfpIu6waKfKpnrfmuwZRkcMF+Q+0Eq.BbviBfq9r5psLoxsi3vpRxhTC+eGe4QaoO957kymMOXDQ1Bc5O2cEtCsp5SCZNoh5i+4YRIqpN.PUZFVOCanpRWqmm9zIFclMZpoFpCwyH.sVhBCOvBzaY1D+jmB27S+cFqYTSQktjefG+IyGl051Y.eXVqGlJITLuMRwzbqRkqZRzro.H5RPtT+ckvS2d6sZdbj1Aesi.ZmSwEHgQpXHLR8THgwavRXT27RQoIVoYGYZha8viCzD+W9W9WcMuzDe8eve6e90hjl3M8wOogpZ+l8EjkmSPpW.DLM9OjNRBF74O8Qv7p93jHd2DPqjJUR3e7MW6QO+iT4GY9G7ARqPyBfPHV1+24TQRrfO+IVhkyQAUOGmSYrlPq784BsLW6Q8IV5hJrXraxl3wqHHShmpatLJ2ATQdKUYvPSFkCmTv0zmIwZvhKI9i0ZY+c3Hf4i6SRBp+38j7BbaI73BY+Hdm9YofArDRnzELBxV2R666ylU2rRa7osTctHZ7Hafc2t4GGLsmjnrNO.GEREi2CnahsYNch2LiSju8heeKhD+Zar05UGYr6q7vQA6lp3IX2GAxoctBqP.vq6RH8501nF4LKRtv5XMJD0tR2RLbw4m++w0LuLZMgMW924+10ZHJi2MUtQzkLvTQwcKerhn3Qh.5GS.zWii5eXGxKUECf.yDB+bb8U6195qWekRqGgdO+UWK.sZ1QUpiHAc4z5fherjr7pBcwa5TQ2Jxh0XNOEXDF.6YRFfcULzIcCyQkdzBxzGYWjCKCm1s6V1H9.dm23HwsYIUR8KYhn3sel9ivs6d3IYR5LMmkKuISvuqKRk16Tc85kq05VwOEWQZ.p2K9bvdnVzTXgU0Xwtd0wlbuStA8ZnbbbjZ1idm8d5mpc16iZtUuNcI9c3ZZ.lI2Gu6dHQ4ixk5E3zo+p8FfoZQvm5al77o.qzwJjr2z75gEWgb1u815upH4SUpOXuumuk4Zog3.QACuj0mqXiFWWSc3.125atFg3ijd8LN.nthHfS8z2xZp558fkCYr7TQA1Zn1dd2e0.KPL5daCvutwrHxBu2k.5HoNVDAN8l7UxXtY9Tbzemk424X987L+NOyuKv76EX98hN+lBP2PX.kwTGRdk1tClQpz+aNegG6rIiaALljTF1UOWQZO6uGskXDBc1mXEB8XLBbdDcOk0bj5UlpfPBYUnEbN9xD4PMD+xgRZhcsej6YJdipMXeUEoNdI6Ax38HWfntbpWPKJ+pE5S2wKUbcPIJAMu6lGI3wDxJgWgiNcw68bwG+divT4guuo5LDNhDOKZO0Iy5uGAKZofwNpxC6yFomfmzNJQfwa0R4AXeF1HI1zHCBPKWE5EtF5RTGEW9vfzg4HQwhySgCOCWo0pzrgoGiD5pqgQGE8pqnhWySmPTskGpcGQFsoDNvWq9IwosrNdMz6wiz.uN2j8jgytg+Y+6J1bntAiaS7saIewpcTO51pvkvsJOu6sJGC8V2KXM+nXgieSvmiif9OtB+NOmIw3wV.3KvYt23wIHL.VSeWaVSaH0ohD8NR43C2o7EGKtSOT6DtSmvc5DtSOQwc5DOxDOajorbWxVp3s2HxUdUIYK2lSRblUqsN5tbKMrWgbHwTf2OL2m7ve8u9sJtpFXWkqDe3guQyeQwa33E8+2Wi08E2.izhWPtoK+NrniIT.ueYN6E0iGqiRfuUeUhIJN3HGzvHXOjaAvI1opVSCulO8XvUqO9xJgfvOIy7UGDFN6mTlu9Nb4xOm2+cm5v+o2OD+ykO3lZewv5GCrvMJ74qxYxDfGIkOdmiDu.2MNFP3cFKFC.hEU+1fL2tHCc1MRDQ1QB5NrLo5MMy3aRVT4TUEBLuucItgOUpBEOIapNIapNIapNNFPtPSxVdOGviX1u+zct56udoCn481iuxZ7YWD3JPpPJgjzs76xEYR2hO+I1bOgyJYdHN1o5WRHbdMWIyS0azFuy05q6OSdfoF0TFcq4.fCpZUjIACpdZKSj+AtfKMMEh1SRQxPrRiHSNwSDddhvySDddbT3YzVaPSl.dJm+iidQkjsE7Xxw7zFNpi0PAqGy+lZy8osKiwoOkLaPFzG1qGNkNEWPFDcdRV55MsJeSO4cdips1twlsCNqjiOCl9lqETFL8MWK3LX5at1IYZ4S2Gy7mx8y8oSfNS7d1eQTZxY2EqFkt8w8+m+iEOwoCGw9r5sH9rxF6rizPKLSh8R5ib+UdhZdmnl23Zl6zbkTDjOP2T1+q3g2j0cgJCUePoO7CKtkl3cjDuqWONbghO0Yx6K68X4IIi04gnzJ5VO7Dl1mXr6IbAO1vEbr9F3aF52v5gQwHIHSsdcWGAzSLz5DCsNwPqIogVugqcWQal0IUJiGwlY8lDyrLwMmXj0IpW7sIirdYW7kNwDq.XbeQ2UFiSLv5DCrNgC3S+FXcTc96eU6yeuUQl1jm62xOJ9ey07cT7ADx2hOJ9Xpiex4t+Iqyce5Ddt6uHmnxcPF.39eKtCGkm59KV7jSc+I93XhezN7op72CUU1RvFwIGaLz3DskOQa4SzV9jbu6Ql67nmnLfET0VlRWSzj7wPYQ6jDDLpDD7QwrruPGM01cn2OLjqlCRKvrTgbvDlhaC727YSQtyXv6T3LykIUePi21c5XdUJmJ32I2X7NyOFuS9w3cJLFuyBiw6r3X7NKE46fFaTZngJ8BnBE36bs.kJ8y59GboeKu6EeVNbikVOrP1S9VlklVyXlRO.INDijCPhy9uUGJK6qOXiL8q4sEuKqJ5ZvRBa6mdw+rq+2769KPMz0j1ETNJU5rlW4pzxse8F0tdsMKsdayKOoMUg4eOIYQ5M+F4RX08ocMUDq9YdBX0+dbR8gkI6p2bQWi7rQYM+1OArl+.y6q1fWyUD6ILT1n8pZ3ktKdSZ6YsuwVUo7QS65n7j5+OzKcMXJ
      
      posted in Scripting
      C
      clevername27
    • More Positive Posts?

      I've been thinking that almost all of our posts here (mine included) are drops about problems we're having with HISE. And I'm thinking about @Christoph-Hart (and @d-healey), and how it may be a real drag for them to see every morning.

      Maybe we can all mix it up with shares about our HISE projects, cool things we can do with HISE, and proactive questions as developers (i.e., feature design, user experience, marketing and promotion).

      It's a great community here, and I think there's potential for even more.

      Just my $0.02.

      posted in General Questions
      C
      clevername27
    • RE: Next HISE Developer Hang

      @CyberGen These all sound like important and helpful questions. I'm not a vendor myself, but can share what I generally tell clients.

      What pitfalls would you warn against?

      Plan ahead.

      Don't create a plugin, and then figure out how to market it.

      Start with product idea, and then determine if and how you can sell and promote it. Ask yourself if you have the infrastructure to support customers and provide development. What are the possible technical problems (e.g. relying on OpenGL, and then macOS drops it), and how agile can you be in dealing with them?

      Only after you have solid answers there should you consider development. Don't be afraid to kill an amazing plugin idea if it turns out not to be an amazing business one.

      People use plugins, but they buy products. The hard truth is that the industry is full of incredible plugins that no one has, and ever will, hear of. And many leading products have poor quality over multiple domains.

      Acknowledge your competition.

      Know them. Foresee what's coming. But don't necessarily be dissuaded or intimidated. Being first, and being best, are often not the most important factors for success.

      Have a plan.

      As with musical groups, failure ends them—but so does success.

      Be effective.

      Focus on the areas of development that are critical for your product. Don't get bogged down in details that only you will care about. That's a hobby, not a business.

      Focus.

      Avoid casting too wide a net—as an independent developer, it's often better to serve a small segment of the market well. Likewise, if there's something that a small part of your customer base clamours for, don't be afraid to let it (and them) go.

      Support Your customers, not your plugin.

      I often recount to clients the story of a technical support rep I used to work with. He knew nothing about the product, and was incapable of diagnosing even simple issues. But he was consistently rated highly by customers. One reason was because he was essentially handing off the problem to a more knowledgeable rep. But the other was that he understood his goal was to make customers feel better about problems, not solve them. Listening—acknowledging the customer's frustration—is often the most important effective thing.

      Contextualise bugs as a constant to be managed, not problems to be fixed.

      As developers, we often have a strong motivation for our code to be elegant, clean, efficient, and bug-free. But none of these things are necessarily important, in and of themselves—only what their tangible results imply. Prioritise. There's a wonderful scene in a Microsoft/Apple biopic where Jobs laments to Gates, "But we're better!" And Gates correctly replies, "Nobody cares."

      Keep your eyes on the prize.

      At the end of the day, your goal isn't making cool plugins. It's building a sustainable business with the security and work/life balance you need to feel safe, secure and satisfied.

      You can be competitive without having the coolest interface, the best features or superior sound.

      Nobody can have the best plugin—but you can have the best product.

      posted in General Questions
      C
      clevername27
    • RE: HISE Meet Up

      @orange @ustk @d-healey @Dan-Korneff @Lindon @Christoph-Hart @Robert-Puza @Oli-Ullmann @ulrik @Matt_SF @ustk @HISEnberg @DabDab @Morphoice @Jay @pelle @griffinboy @aaronventure

      Monday @ 3PM EST has the most available as per "Doodle" (which I was certain @Christoph-Hart had made up), so I have taken the initiative in declaring the winner. I've scheduled 90 mins, as these things tend to go over.

      Could someone pls verify that this is the correct time (i.e., it will be 3PM in NYC)?


      Join Zoom Meeting
      https://us06web.zoom.us/j/86319501370?pwd=7Ihj8Ny7IHwd9oSLqm1OeLqg8rGdOm.1

      Meeting ID: 863 1950 1370
      Passcode: 888935


      Specs:

      • It will be a public space, so anyone can join.
      • We can accommodate up to 100 people.
      • If anyone wants to share their plugin, I've enabled uncompressed-audio and screen-sharing. (The audio from your plugin should automatically stream to everyone at 24-bit 48kHz.)
      • You can do everything through Zoom's web interface, but I suggest downloading the app.
      • Remember that you don't have to be on-camera; by default, I've left both audio and video disabled for everyone. Feel free to lurk, or interact via the group chat.

      For those who can't attend:

      • The proceedings will be recorded automatically in the cloud; you can view directly there or download.
      • @d-healey has kindly offered to also post the results on his YouTube channel.
      • If anyone doesn't want to be recorded, let me know, and you won't appear in the recording.
      • Zoom's AI will allow you to ask questions chatGPT-style about whatever shenanigans transpired. Supposedly. I cannot attest to its accuracy.
      • If English isn't your first language, you can ask Zoom for a transcript in the language of your choice. Though as an American, I'm skeptical that "other languages" even exist. (Why?)

      I will try to follow this thread, but it's already at almost 50 messages. Feel free to DM or email me. I'll be monitoring my DM during the meeting; if anyone is having trouble connecting, let me know.

      As your host, I'll award a perpetual NFR license for either of my Steinberg apps, your choice. Except @d-healey…he knows what he did.

      See you all Monday.

      posted in General Questions
      C
      clevername27
    • Matrix Peak Meter Tutorial

      As promised, here is peak meter tutorial and LAF. I did the FFT component as well, but it requires a script node. (The FFT code tells you the amplitude of the highest frequency band for each peak in the peak hold.) EDIT: Replaced source code with executable snippet. The onInit now also contains the instructions and code for creating a demo project from scratch.

      HiseSnippet 5472.3oc6bs0abbjcdnjnwNiSB7tvXQdr.wBng1iFRJYuIPL1qn3EYlHIRHRYYuBFFE6tlYpk8z03t6gin8Jff7KKH+BxOk8g79luy4TUeY3PZtBJZiBBgMA6tq5Tm5b46boqVGl4hL44trVK093ymXZszeyxGcdZwnsGosos1eG5FOwTXxT6XF6Z8vymnyyMwsVZoa9HZDK09Vs3e9S+tGpSzoQlpa0p0W6rQlGaGaKpt6gO3ewljrmN1brcbsQ+YOX+HW51tD2TvM2b40aMQGcpdn4oZZX2X4VK8A6FaKbYGUnKL4sV5VOzEe9QibyRkw+01b6IIF5hMZcDHjb68bIwDGS2s01irIwGF104sZszxGVICtoHC93kehM1Vd+JYwGwOPUMi5xiktQS16lMXuMtL1aArzR0XoaIrzub4ihxrSJpdBwOe3x6mBcy.MD60YEYrstw+wcWdsO4s3Oc9D0auedmRsmr6w69r8e5iT687mt8w6evS+qOu8P3Fn18LcZtRmFqFYyUEF8XkafZfIKyTj+Nh2dK9yZc5r1Zpio8xfooQEVWpB+crI2NL0DqF3xT41zgIFUzHcZpIIm1u5owVWOUwH2zgiT1B0LHaHJomV3FqKrQ5jjyU5yLY.PPMdZRgcRMZzWcjoPcNPNToSGeBPq.QCOjniMED2nN1lXtctZRlahIq3bkgcX6CsfIMr5yLJWJsXQjiFOsIF8oLYvrrtXO2zc1HLKZMe7V60X6RO2DuZOhVoFvzpwVPJMSHhNmXhzSyMpuZ+i1klfENwXWlNT4nQSS4bUtdLsG8rdWH5JFE4FiQspHvTLolN.VK8weRWsUAO3SbEPtQBgBVUXI5jGnXjK1nJbproog48UlLiRi+m2t5L.4BVJOr3GFDX1z7IlHHy1rbOLyvJJLWKQ8wlTYi.4Bf9TYlzXH0RG1Sk6FaDdxj2XUHssJ0UvDBamnhKN8.mBz7D2rW3xNMGwGL2Ws+vTWlI738wve072744li.AiLa6MItu5EiLfMxHaF0LcZAIOFaz4S8x.xdUmnRfpHQMzQ6HaZgHxomKJ.nNl3RwNlnyswTyLPYXRi38Kr0og5lVLYZgPp.GcnNNFi4H6OhcvismZTaezQPjv2smn0v+YFOABcdipfMEjxto.pfnJzD1XRbF3Hx1F9AVDBlr6HExTxUCfKjApmnkRc1rikRwAlhhU8D8qNDFoP.YKFoRgQ4YdyzZJRlRrRK1lOIQCmEUtgHcggkPCyzSFYiTFwdP0UqRrolUwL0EfRSxfEPZg3cM1kS2KhFH4fzW8BiJNHpsrQn2KirgTESyRkG3FLP0012zG2G9+VVK9ilL2pgsjWgyVEFn12JEBlLvv0vG5S1GpWt92QJrWtw2wfTIlAEz0Y1giJXVoZ36OPfZD2obVTO1k5v1DJGxhJ1kd6Bn2RrdTIwbBHBrM5sGqFNEfKj1AtpipvBCtffzPYtGgVBckAXiLYDdmnwL2zjX3CB9t2FeGg+Ad3bxfjE3mXfSBvwBfsDiEPMquYHYKllXQDfvJcalrC7wOmRSiIvNvgr7NrrzjBaZ.M.QF4UJVU5IXeah6Q9SoX4E8Hz64i.Dl.lBHxT0PnyxG6f..QFfWhx5Er5hBj5GQqgYFMAogQS509LFGY6AglN8bU74o5w1HFRORjnUdOvfDQNllny.ZMfpFLMgzsDMBpNluFg3JptPVKpM5xUgAIbXYfgLDg1RVq8fQL7TiylNNuePQBXKUDvFQJh8.XbgZeR3agyt2FcBCs6nn7BzVYDEd0Cfmvo.RGHHfI7zb1PG1zLT5hwKqATRwe3GEvBHyGkN2KPo8dL6DiXedW5JbUvvfQSOMn0O1ydpyzISChnYF1Ckl4fLDYgQDH1dPhSBbMAXjE94HpInd3KIesM5uN4MwQ2n7Ar4E7tsu52C0JGaBvW.5pes4IQJKlYPX10AAHaPhP0vOzpnDXk48u5SYebY+vRIHb2ISOSc.jZRYMqcE+vIybm5+ndTh6DDW3q0YVMRlOmGx1jUp331HU.BHgzOrtoeGTdCP5vH9djRSlkAZEl3KTa6Ph7oE8iXR8XGRg3wN2oakFumwjzc0M4E5ElaCMu4U.yUhLC6hyBrhhyGYFA6y7x39cvyTCYN96k7hNX.ufOeRLUiBV202jFTaRg+UnNouxkY+QvJ5jCFLfvT+BRxu4BDD6XF.DcVPtme+xih1TA7jfsQAzscVv9telYnk.3BTn6JwP67jliZkdkRztTT0S9Cqp9oNcZWI3qDAP+NBaCVUDCTJ34RddRRGhYsvakQt62oMIk369P2qPwaYEeC11XY5CCbMhKr4BFx2VeHaL+PdgMF.T0FwcmeDekgCrTaH2iFBuqJ8.E3dBREHOvzo11HmMtL5nQk4OWApOyb6Pz+5aORhtESRYYY5TeQgG3vhQkoMVt7leXJr4grkV8pDruhUUIKaCitPxW0W89xRViIZXQSHLdqcffw12fEN2mbCtkO+zpHW7xFrlCpg6sY082xWCwWrdcMx1trTS1ynrqHC1uPc2F5KcVfTMzva1gpfp9vdpyla1Kw4xDZL+y2BZ5p6NB1.l7B1kgcECOHrANjq2fHk+g7uB4qCW8XwKjjAURMxxfxVjfdh39o.D4.oy0CLOwyMRyVXzGYTHbqIshMPBl5jKcvmanX9UidlNiB2eoi2g.oCMUiOJwNYhI9RGOxL8hRjKLpYiPwSMENhUDmusXBQ0rXGXE6kX72mv4wcLYJUFLwiYLfSfuHPKfSpkXak4g5Qyuf.U3nsFSY8MEol+Ep674KRV1XD2qZDwj3I6hCYilhLuDq9PH.51W.g9nByD0F2W8HMUoCYVueJLMFyYin15DJiKB99HN1oPgWPErB4DxmeJW+HYGUg4fjRfQGk6FL6XTVaVnpbHOQQq.jfSsEvvyXJR9qTPqS7drmnoe6R8SFouQ4KT5ddDVVdCI.B6yEFSF3Ybw40J8pFryYTxN9NL3QopA02rFVqIupJVQKR9Kc4IPYC2.oDQZDyp1xuo7ZhiEbWdFX4376mNVnU6pMg+u9T9O1bdxrmW.F.ADxA4BkVqGnupjCIvuDXG.xAecUBDNYRdmT8yAhGxZpLSDpiDTkKWn3q4WcI24BeNqDiPauJ70vJ7vxp+UiQPBncEy.xLariqhAVIHBaXSH8BQTP1RsJ0rDDIFambj+Pf3T58VOu.rzI9kEYyxpourNvIogZhiJh6Wyy40M.FXYNWfgOH.WtI+zFgFJsDWawQv7ta6O3BDiCVeBRykRTsdUo3Rtt1PuFnB0llZifXPbSDyVHRynr1q0BhQ5Z4K2iSBFlHj.Z3kmVsveodLsgVjPGptYLWjBYfoGiPcbBE9436b0IZ+RPY8eaJkRI4eldKf2afIVeS.NHntBh0ujXWRc0TViaRZKdENnjTgFK.dZrFfbSmvNEybbUcnRdM30rKzOgl0CziIJKwTzHxNC1eR2THqvzXYOHh.1fO3oQMrg1JyMKtVzfBaxZFxbRTVLW2KPSopMcHlhWqDznXOwVrYhSB6oybMS3PoLsE.ebeAfly3feWJymFh5NMy3I.dtfvA289b8O9pJUayKqO.fLom5lEv3IOyo95Zj7znMnZh8UvGnW.anYAXsmOgotMX06zfQWU8I0MF7tUbskz5GiYhJb4lg9CSsT2B3UgCcy8EJJAA.yC2lBOwiqWv7cRFp84jjyY5RUpW0EfJ2MXJbZpaVe0QbzMt3ZtCvTsHTjPQqQlaVdKWSMU4uqCcAHznO19uoz3KqtQUhhqRUyzFB+19755MWhcMqiopaRDG0W8vZwSqWKHTgbwQwBgYljoL2siPXcasLB7.z8IbCRGzKTKoNzzrBmPLIeJJ2onBJoEIWppUmMSbYwjGQy7qxoZmHquQkEZJYW0SnbiwbFEtNpbD7CmQBx.DE1LbYTPX2d9rrgo2KaVTWu4pfqWyj66MWsYR4XRRQTgMRSfI3OonSsO2ZpYmwVi.MdlMeJ+xAZtsQk+EVNgJu1nL4MeSV74nP1i2NXOegn9LzKuj0BOPFAfnC6iXMOxyI6AS3tuj3d9+CuQF+jmKC.Nqbxxx65P4yV2QCOi6TNvd8Di6DE2HpfgfGqqZMNAE1Sc7R19nLg6LOVIwzsuXwHyoj9l40Jqc2d+7aKsfYPfrgHAvhuvjEZml2weT.OucMOZJcFOjM.TnPBMjA06C2ks88DzVJ.XNYgRfEVzTul36WCYfzvrPDspl1QU+v1q7KBfaBuFjmaZoMi6MZuRCXlgF.0toN82Z.EOVxxVPkh81zbAXzVzXYoieCV2mnWHVRPjjBAeQ4bgYORU0P4p1+prQCYoxaSOovJ40XgMaH+jBiGcSxlhrGpG9vuR.ScJVCO0B1B9WCVpqg2suAt0yKkqfHCo8qBdc4TCtmlD6onNYl97bIyXGp9CIVgHBSb47o.nW46OSvsCn.gL2GOMm5heviS5tMj7QtgoVpCtIbsV57PTGobJeK2Umbd8LwXZ77Tt60b6RrYf5jwrWQzq7sdRbDk0dYEFXQ7whlwRGaotrA1WPbz.EvEEAhuIRA91jRv24HtAxT+b6xH8deBOQGpyXBtpOoYU2ZtMgUa0KE7X2Tf6X5ODXgPnrmlJxaOW1N9Z96dYEqu5E7nRz4A6z48qtv6GjxEgJuu7MXKoe3IGA9adUwchMSnlt68yVPuU94Y+EzDAly+tU2rLEBj.mjAAk8x7YKPIXKZ+pWDXn6H4dr5HIc.DhUHXU9GBTXtA6n3ER.TzOrbQswcgoNpy.LxHKtr7sUwubNgrvz3LcwToOVbRIxat9U2lren1wkKA1FfnYbm4LwOSR3Hwzsdn9dKpGdjD40Wdhv2qYhvboiTdoHeprxlQVuRa72b+K3fvTsS7dkpkp.xmbVRG6oXYY2TsalWYhlxupiu0MEwykrGMFl.9LrPN8bk706mosf6m4Uz99O8S2rrqM0SXM0LSJFkaEdHu0TSnBJt1QnrzSlP3t6Jn2Ll9zrrvqgspLEeeb7kpLGkqU+G+FuMohG.8RC4sehdRt+jeLkygoFWBlpeaIS4Kjp7k8JIVU8G+iptW0a03Kmq+oqxcwQr5drgvhnn6FlwKkULDLWht7vhpvp574Z7sTADeDJjWObHfTYrcrFfsgyrz2bdKKkQMn3N7K7dhG5iXhFhTxn+JdcLMDSUd8g26OkoZvLbAVBDx.kSIEbUd2gjhxmJDaWKmdkbe53N+AHIz+GZq9y9BkZ+5RyR4PBP69xNq1jgnyFDAKR76L+YxnrHEesktrKTCsu7pZM94eRZtPo.Ytbm8H4jUX8BVqXl7xrnEv3tM63bM.1ClWiw145PoIzITvQXc7YIAd1bTtxT7EKlII5Hegd76b1m5hu7JNrXPKZo7.F37GL.OhKSRhiCMYYQVKeY0iDmpOUsg3KTuby7pnEWv8VBXTKiWta51w1DcY2dZHNk4.SQecNC4NNUq0e5HA8LTANKztT+fKA7+kW1NtY6E5MW8dK9g9p8tjfHjrJDFYeepeQZpH8ZgVa9Fs2i2Z9TDs3wQnD8KKjrxNdrgRvjRnqSYk5qIlIdHkxlz5xskuX4KH66JM5pRHhYaQtRfruFvvvS3mpkjyyn2FB2vONcj5V90dALrYeXJhKU4lXNe.XJwg33z8o3a9zxIDoxR54P7Xz99U3SEgfSCYMe4694MzTWpubv74RsethdR8VwngkYutyq4Wa+6qG.2i15IG93cUaevN6t1gO6f+4c2932oGY12pxsN7aLkaZXUGunLzPRXU8zImOBiT4V+A9j5vmQRwYlNXGrAVGew6cND1d4TohElP7yXi+jW4KeSv4gWIWC8ENeHrwNnzF8CmjApaiToVT3uglT50j33jr3yE0SbwSA6cblgl0c6G5v+SzzgnPwmS8dJcLACbjrUn5HTik4IGKU0JxtjdhPvU52Q04dDtszTXc5YZDUnrOWzIKrbxSpcrLH.GJOBdVxAXQQGWcUGH4VY9iwAX4Oqu5PhW88yBUEImpRh.6Puo0SP4GmhpGl6XmJGr9UueG5c07SzuVo7fvue7J2eA6odXTqvm6O73M3ql6nih66a1Ad1QlgzAm6wlX5LYhGgBT4GT6PvU6tMNJb0G87mzzlKxolYRQcDO4mRsiBZs6V6rXVi7MONizv6PuiqNede90R5yzQNcutz8SsEPjQGJ61gyWzX8ol8xvEke3.c+squdO0mu95qxM7TNjRgWG67GOogTPB+ImoaMaAYtkWSAStvYXZAG.n2qwGke18o6nNXO0d6CnR06q3iq0oDSxk9T.ncPZ2U6fzE575Np4ezfAK7YjIRF7vLYK7wjiR1UMwtRAE8jhtJGXqktUyOqlO358Y0DIVr0Fn3Pb.p1Pt9p+tfZ4M4we878IrI56xweupiR.t2NlyrQF4qzo8x6XxOsvMgGq2Oo0ReXg+yJR9tb1yet3Hb0V1X5y3ozyo0qp9hn1+AmWdw+dxC3TkaszxK8esTqVxK9ft5eCO8jgguap1e.t7OSyvVXFWc2m+7mO2cuKc6UVYE917F7FezRK+Sc9+wVKwVecvHH7MXMWHsVst3Gp0GsLKjn310+twJkdblGM9XsHj3TjX+40+X5l+iI6VWtU+5W6u0sqK69KW9PaQznEyu2XA7K7Mt9e7aqeke7ast3mi2e6x6xm04JF7VKu227l9s2s90+au6WT9IQV5AvK+uZ44cItrOLx+0Ot+u4A6XRzMDVuP7jC23aevB9zI2Okd8mG5Pk1yKpu4aquyvacssG3zHeuw98WsLKxeehgkFz7dCC+QKen9+MXPfZtoHoBtLhF9zoiaFifhPdCJZtb85z0DCcjIMlu3Oie7ObC55k7ObivCqKR96DQxGB.gTC+cRyRieMes5ETUaOJT01FWwGK8+408ikdx09ik9fnBr7GSerJSb4MH7Qlw1iQpH40uIhltWl4GdFo9pe+sc5rE9n+zuaOrIW3bNhdONrcvV74J6pPqt00CspY7xZi+mAF6c0Wv80OH1+ylWvam.csC7nDnaW+m0UIX5.8zjhvcaZX+DWpaxHWpMptV+YF3PNbnIqNuuvMzV725U0c93G7LC2Xkpa8advi4ys.jSl2PYwe4ev8KTe82urvtJ9ah6uJ5s2J4vcy+OcNbuShJ7tXMFqixbeejTeLYm9K36f8cJ+uIFsQAI3Z0Fs3Zlw7VFUyzZLP399nHRDeG.Xt34b22f4bu2f47YuAy4yeClyu8MXN+CuAy4e7JmCEbYK++lE.WNbiC2kqsdok1MkNGArkdq+aPzccMu
      

      Looper.gif

      posted in General Questions
      C
      clevername27
    • 💥 RNBO 💥

      In case anyone missed it, @Christoph-Hart posted instructions for binding RNBO with HISE. Personally, I think this is even more useful than FAUST. If anyone has any MAX questions, feel free to post in this thread. (I'm not the person to ask about linking or compiling, just MAX itself.) Cheers.

      posted in General Questions
      C
      clevername27
    • Super Compressor & Note Shaper for Y'all [Now with Scandalous Video]

      Intro

      The Note Expressor features provides complete, visual control for the user over every note. Unlike a compressor, this Effect triggers perfectly, and always has the correct gain.

      Thank you, @Dominik-Mayer, for adding embedding so the video can be included; @Simon for the hosting; and @Christoph-Hart, @Matt_SF and @d-healey for technical assistance.

      Snares Demo

      In this clip, we'll use the Note Expressor to make a "perfect" Transient Shaper. Now it gets interesting…

      Overview

      If you think about it, is there really a need for so many different types of compressors and dynamics processors? Most of the variation comes from the fact that we don't know enough about the signal to do what we want (e.g. triggering, timing, gain precision).

      But with MIDI and ARA, we can know everything. So why are we still building compressors?

      The implementation in this example is for MIDI-triggered audio, and implemented in HISE. It's simple to implement in any environment (but requires a later version of JUCE for ARA).

      It's been used on tracks by artists such as Marco Minnemann, Steve Morse and Peter Frampton.

      Code

      Scriptnode Network

      e2555001-b829-46ee-af52-bd672b27042f-image.png


      HISEscript Code

      Note, this is not a self-contained snippet; it employs Dynamic Contextual Interfaces. (Feel free to ask about anything.)

      //////////////////////////////////////////////////////////////////////////////////////////////////////////////////
      //                                                                                                              //
      //                                                                                                              //
      //                                    MODEL MODULE - DYNAMICS PLAYGROUND [UI THREAD]                            //
      //                                                                                                              //
      //                                                                                                              //
      //////////////////////////////////////////////////////////////////////////////////////////////////////////////////
      
      //////////////////////////////////////////////////////////////////////////////////////////////////////////////////
      /////////////////////////////////////////////////// TABLE UI CALLBACK  ///////////////////////////////////////////
      //////////////////////////////////////////////////////////////////////////////////////////////////////////////////
      
      inline function DynPlayTableUI_Callback() {
      
      	if (	(g_executionFlags.onInitComplete)	&&
      			(PerformanceLoaded())				){
      
      		if (IsDynPlaygroundTableClean()) {
      			
      			// Disable the knob.
      			knob_MODEL_DynPlayground_UserMakeUpGain_GUI.set("enabled", false);
      			
      			// Disable the Network.
      			UTILITY_SetEffectActivationState(fx_NODE_DynPlayground, false);
      			
      		} else {
      
      			// Enable the knob.
      			knob_MODEL_DynPlayground_UserMakeUpGain_GUI.set("enabled", true);
      			
      			// Enable the Network.
      			UTILITY_SetEffectActivationState(fx_NODE_DynPlayground, true);
      			
      			// Compute the maximum dynamic gain, based on the new settings, and adjust the internal makeup gain.
      			fx_NODE_DynPlayground.setAttribute	(fx_NODE_DynPlayground.internalMakeupGain, ComputeDynamicRangeFactor(fx_NODE_DynPlayground));
      		}
      	 }
      }
      
      dynamicsPlaygroundTableObject.setContentCallback(DynPlayTableUI_Callback);
      
      //////////////////////////////////////////////////////////////////////////////////////////////////////////////////
      //////////////////////////////////////////// RESET TABLE FUNCTION  ///////////////////////////////////////////////
      //////////////////////////////////////////////////////////////////////////////////////////////////////////////////
      
      inline function ResetDynPlayTable () {
      
      	// Erase all values.
      	dynamicsPlaygroundTableObject.reset();
      	
      	// Set it to the closest thing to unity.			
      	dynamicsPlaygroundTableObject.setTablePointsFromArray(DYN_PLAYGROUND_TABLE_INIT);
      }
      
      //////////////////////////////////////////////////////////////////////////////////////////////////////////////////
      ////////////////////////////////////////// DETERMINE IF TABLE EDITED FUNCTION  ///////////////////////////////////
      //////////////////////////////////////////////////////////////////////////////////////////////////////////////////
      
      inline function IsDynPlaygroundTableClean () {
      
      	// ------------- Initialisation
      	
      	// Get an array of data points.
      	local tableConfigurationArray = dynamicsPlaygroundTableObject.getTablePointsAsArray();
      	
      	// Reset the table if it's fucked up.
      	if (tableConfigurationArray.length < 2) {
      	
      		ResetDynPlayTable();
      		
      		return true;
      	}
      	
      	// ------------- Determining if Edited
      	
      	// If there are more than two points, then the table is dirty.
      	if (tableConfigurationArray.length > 2)
      		return false;
      	
      	// There's two points; compare with the default values.
      	if 	(	tableConfigurationArray[0][0] == DYN_PLAYGROUND_TABLE_INIT[0][0]	&&
      			tableConfigurationArray[0][1] == DYN_PLAYGROUND_TABLE_INIT[0][1]	&&
      			tableConfigurationArray[0][2] == DYN_PLAYGROUND_TABLE_INIT[0][2]	&&
      			tableConfigurationArray[1][0] == DYN_PLAYGROUND_TABLE_INIT[1][0]	&&
      			tableConfigurationArray[1][1] == DYN_PLAYGROUND_TABLE_INIT[1][1]	&&
      			tableConfigurationArray[1][2] == DYN_PLAYGROUND_TABLE_INIT[1][2]	){		
      			
      		return true;
      	
      	} else {
      	
      		return false;
      	}
      }
      	
      //////////////////////////////////////////////////////////////////////////////////////////////////////////////////
      //////////////////////////////////////////////// ENABLE UI FUNCTION  /////////////////////////////////////////////
      //////////////////////////////////////////////////////////////////////////////////////////////////////////////////
      
      inline function Enable_ModellingDynPlay_UI(enableUI) {
      
      		knob_MODEL_DynPlayground_UserMakeUpGain_GUI.set("enabled", enableUI);
      		
      		table_MODEL_DynPlayground_Table_GUI.set("enabled", enableUI);
      }
      
      //////////////////////////////////////////////////////////////////////////////////////////////////////////////////
      ////////////////////////////////////////// STANDARD LIBRARY: CORE FUNCTIONS //////////////////////////////////////
      //////////////////////////////////////////////////////////////////////////////////////////////////////////////////
      
      inline function TRANSFORM_Architect_SUBMOD_DynPlayground_PerformOp (moduleState) {
      
      	// ============================================== Reset Ops
      
      	if (moduleState == "init" || moduleState == "ready") {
      		
      		// ------------- Disabling the Network
      		
      		// Disable the Node processor.
      		UTILITY_SetEffectActivationState(fx_NODE_DynPlayground, false);	
      		
      		// ------------- Disabling Widgets
      		
      		// Disable the UI widgets.
      		Enable_ModellingDynPlay_UI (false);
      		
      		// ------------- User Makeup Gain
      					
      		// Set the knob to zero.
      		knob_MODEL_DynPlayground_UserMakeUpGain_GUI.setValue(0);
      					
      		// Manually set the Network parameter.
      		fx_NODE_DynPlayground.setAttribute	(fx_NODE_DynPlayground.userMakeupGain, 0.0);		
      		
      		// ------------- Table Topology
      		
      		// Set it to the closest thing to unity.			
      		ResetDynPlayTable();	
      		
      		// ------------- Internal Makeup Gain 
      				
      		fx_NODE_DynPlayground.setAttribute	(fx_NODE_DynPlayground.internalMakeupGain, 0.0);		
      	}
      	
      	// ======================================== Specific Ops
      
      	switch (moduleState) {
      								
      		case "init":
      			
      			// ------------- Table Length
      			
      			// Set the table length to zero.
      			fx_NODE_DynPlayground.setAttribute (fx_NODE_DynPlayground.EnvDuration, 0);					
      			
      			break;		
      								
      		case "ready":
      					
      			// If there are resonance parameters, load them in.
      			if (isDefined (g_articulationData.dynamicsSuite)){
      				
      				// ------------- Enabling Widgets
      				
      				// Disable the knob.
      				knob_MODEL_DynPlayground_UserMakeUpGain_GUI.set("enabled", false);
      				
      				// Enable the table.
      				table_MODEL_DynPlayground_Table_GUI.set("enabled", true);
      				
      				// ------------- Table Length
      							
      				// Get the length of the first sample.
      				local sampleLengthInSamples = global_allHits[0].get(Sampler.SampleEnd);
      				
      				// Convert it to milliseconds.
      				local sampleLengthInMs = Engine.getMilliSecondsForSamples(sampleLengthInSamples);
      				
      				// Set the table length.
      				fx_NODE_DynPlayground.setAttribute (fx_NODE_DynPlayground.EnvDuration, sampleLengthInMs);
      				
      				// ------------- Internal Makeup Gain
      				
      				// Set the table parameter for any initial makeup gain specified by the Encoder.
      				fx_NODE_DynPlayground.setAttribute (fx_NODE_DynPlayground.internalMakeupGain, g_articulationData.dynamicsSuite.internalMakeupGain);
      			}
      					
      			break;
      			
      		case "user_poweroff":
      				
      			// Disable the processor.
      			UTILITY_SetEffectActivationState(fx_NODE_DynPlayground, false);
      			
      			break;
      		
      		case "user_poweron":
      
      			// Only do something if the knob is not at zero; activate the Node.
      			if (	(MODULE_GetModuleActivationStateByID("panel_MODULE_MODEL"))	&&
      					(!IsDynPlaygroundTableClean())								){
      
      				// Activate the Node.
      				UTILITY_SetEffectActivationState(fx_NODE_DynPlayground, true);
      			}
      
      			break;
      	}
      }
      
      posted in Presets / Scripts / Ideas
      C
      clevername27
    • An Inline Progress Bar for Y'all

      Here's a progress bar for y'all. I use it for displaying progress bars on the UI (instead of a pop-up window). Each progress bar instance has a unique ID so a completion function can be called for each. Below is the raw code from my plugin; it's easy to adapt to your own.

      Progress bar code:

      //////////////// DISPLAY PROGRESS WINDOW ////////////////// 
      
      const var panel_HEADER_progressIndicator_Frame_ART = Content.getComponent("panel_HEADER_progressIndicator_Frame_ART");
      const var panel_HEADER_progressIndicator_Bar_GUI = Content.getComponent("panel_HEADER_progressIndicator_Bar_GUI");
      const var panel_HEADER_progressIndicator_Backing_ART = Content.getComponent("panel_HEADER_progressIndicator_Backing_ART");
      
      // ------------- Fade In Function
      
      inline function FadeInProgressBar () { panel_HEADER_progressIndicator_Bar_GUI.fadeComponent(true, 500);	
      };
      
      // ------------- Fade Out Function
      
      inline function FadeOutProgressBacking () { panel_HEADER_progressIndicator_Backing_ART.fadeComponent(false, 500); };
      
      // ------------- Progress Bar Animation Function
      
      inline function DisplayProgressWindow (timing) {
      	
      	// Draw bar.
      	panel_HEADER_progressIndicator_Backing_ART.fadeComponent(true, 500);
      	panel_HEADER_progressIndicator_Bar_GUI.set("width", 0);
      	Content.callAfterDelay(500, FadeInProgressBar, this.Object);	
      	panel_HEADER_progressIndicator_Bar_GUI.startTimer(timing);
      }
      
      // ------------- Progress Bar Callback Function
      
      panel_HEADER_progressIndicator_Bar_GUI.setTimerCallback(function() {
      
      	Animate.increase("width", panel_HEADER_progressIndicator_Frame_ART.getWidth(), 1); 	
      });
      
      // ------------- Post Animation Functions
      
      inline function PostAnimationActions() {
      
      	// Handle calling function specifics.
      	switch (global_animationCaller) {
      		
      		case "smart_settings": SetSmartSettingsActivation (true); break;
      		case "automix": SetAutoMixActivation(true); break;
      		case "infinite_dr": SetInfiniteDynamicRangeActivation(true); break;	
      		case "extractprofile": DoProfileExtracted (); break;
      	}
      	
      	global_animationCaller = "none";
      };
      

      Example of calling/creating a progress bar:

      ///////////////////////////////////// SMART SETTINGS //////////////////////////////////////// 
      
      // ------------- Callback Function
      
      // Register the callback function for when the button is pressed.
      button_SIMPLE_SmartSettings_GUI.setControlCallback(on_SIMPLE_SmartSettings_Control);
      
      inline function on_SIMPLE_SmartSettings_Control(component, value) {
      
      	if (value) { 
      	
      		global_animationCaller = "smart_settings";
      		DisplayProgressWindow(65); 
      	
      	} else {
      		
      		SetSmartSettingsActivation(false);
      	}		
      };
      

      Enjoy!

      progress.gif

      posted in Presets / Scripts / Ideas
      C
      clevername27
    • A Code Example/Tutorial on Dragging Audio and MIDI to the DAW [UPDATED WITH VIDEO]

      EDIT: All works now, thanks to the tireless efforts of @Christoph-Hart. Thanks, man!

      This code example demonstrates how to:

      • Load a MIDI file.
      • Draw a map of the MIDI file in a Panel to check if it loaded properly.
      • Play back the loaded MIDI sequence, synched to the DAW.
      • Create a panel allowing the MIDI file to be dragged to a DAW.
      • Render the MIDI file to audio (with the currently-loaded Sample Map).
      • Create a panel for dragging the file to a DAW.

      The code is straight from my plugin. I've commented it to explain what's happening at each line. Comments/feedback/corrections encouraged/appreciated. [EDIT: @Christoph-Hart improved my code, and added it to the Snippets library — use that code.]

      EDIT: Here's the usage case, including a simple progress bar:

      dragging3.gif

      Raw code for the dragging and related part (not a project):

      HiseSnippet 3952.3oc0a0uaajbjmzqUvIc2Ej.bO.cz+XJDZFoMa9.1vHgRjxlI5CFRpcSvhEBMmoIYGMbZdS2TzDAF3dZt2l7RbOA2avc+pp6Y3PpurT1rqWBCayo6pqpqt93WU8vtYlHk0ZxpTc6AKmopT8eaq9KScSNZhTmVoSqJU+wacjIVIZ+d4zYIpJGtblzZUwUpV8ydKMmpa+7J7m+2e2gxDYZjZ0ipT4KM5H0I5oZ2pm182+G0IIGKiUCzSKM6u322IxjdjIwLGxyms09UlIitRNVcljl1y1pR0eT6Xsyj02IcJakpO+PS7x9SLKR8y+K0V8PHj3KGToOVH+iO1jDSRL8zJGMQmD2MeeaqfUo6Jsvm40B+GacpNVW77UZieBOfXEEk0GUe15h2msl3cvcId2hHUsjH8buH8S2peTldla0Hj77utUmTmJajLZ8iF+bq7r+9K25W7c9mcdRTI52df3hthuCY4+X6RvSwaUNwPXkpSGKlISUIhL0HUlBtA1F6.yYqSbsLyO1kGc9ocOue6dW1RM5nTWh8xt3r6TS5k8U+myIh9RsZwku8hNh2HNxfS1TWiwJ2QloyLo3K018wtP6t2qebhAQ3g9czkM6M3eDAYikhDkbcVbl7iQg09riNuEs5X5cM5T2ocZ04iP+bmzcapiaL4lyi0lmBWJHLeq1LNV3lnDD6EyRjKUYk2jSQrD+SWoH6huSVTf2bjXhybvHdd0189nImsGkoPDHlyCxjo1YlLm3cxz3j04uKevvXfmsSGqSUMh3UXvFiWyu9ehGOQbbmSZKZ0q4aEGewYGMny4m8J+Ivm3wSd.a2FVXIXlaUGISRni6ZilmF4zlzZpqgY4dh+1N6rsdjv+0FQI5nqTw3whc1da7mfumbkKmvYXqjlylIZIcRwHJUYVCwWMYoH1nr7nGqST8WZcpohIxqUBYpPRV5hQX.afl5hgychTCs9ddwp7xS42IdqwDKP.JKI0Mvzx8BHVXaoyTQH+4RXGthmjC.mAOqVoGBIlDXxfjYVIS9T0BlsPNiEiu4FV6ZHFLQa8SZAvhHFpDlqUYKxzN3s6WQkLZhvADJbvpwTDdSTz7LaCQeScAzyKMygRJ8ENwBYpi9ZlvjowTkIq18kW459kFmgPnh0iXox4mVJP4HlfGfMAzvzNIewx0Tz7FXZ+d1e9M2hhiCSQnInGWaWnnvTkYKuTwzz.TPwH1d6b6g9z4IwJZoI0hR.KN0XDKf0YVRgsXhFpBaHyB1iiVQBVl6KhTCKXPS6oAIsV4cPcwArr3kj1oRfMhW3B8Mh.a8G2rjMzXRTP0bsLYNjSKDLEleFIiSMqsQ.g3fejLAZ5gpHIz3d1XXi.daNxjMURFhzRoIMkSESqkze3gniHLr1eTzp4WUeUnb9.CTkZDIlTRakpT.iYCOSFvxAYELSlgiUfPilMQdjgfQybMJ3FSD4f8XCqSl4Z+dLaPJotnP.anx3sD9mbOexomUgDewtdhYdRrHZhhD8QEpSXgZE14QDzwQyS7Nqda2qRMKD.jJ14jjr86Z2jB+zIMVGAWp9EDAIhEH9P6C68ZhseXmO7C0bB8ekn4Es5bt3Gh4DJPZ7wjTX6sE3ySL0PHRuOuPHND+rGeH6BpHKn6ko9HyvagipGeGw+tEwX8.fiSLCkIWJg93ZUet.19fg+bwtMVHud2hjGOPrGevDW1bV9hLyVtRHCAWxiQ3SmPACDR1uIjv4w3hSLprGdYG7fSYtq7iyg86O20OZNJ5b1f18Nq4InZv+zEvrucOwfye6agy6QMO4jCadzeT7ocEgcPJljkhbaBNcgG69KrbI.L3dXU.C9XJ2UtOFAq.T6CJ6+aJCAOAZA.Z.QemYl.4SlXhwYOwsQfDB8gOyEs9ajkhXWcXJmhbBwv7zMYU9rNAwjvBEL2HnepTgh8HhquRhYCahkrILisxRRibtyPoQIYcY8ULfHbhRFWv5fqMXbfGwZafIt.rir0ANQrj3XJBZk42a0PZLRZgtX5RJ6JX77DpTtj4vsswd6nSSPALE6mfucmvp2u.DSsvVrS.2LAFBd4mJsT15iRLbh46GaixgRzhFX7DwzTZYe8Ne3G.YF+Egrf8ZeFhhz4rRIH+zNyHj727X9HNbtyACBXGdnB1JhdrCHh0uSoRh8S5f6rx+v3btiv+mrCnImYRJRBaRCCFF.SeSCyMmRsnbtT2ivsvtriGG2Pu7Cy+YYJpQe+O+W+29j5ESOOWNnPVBvNHIwHiCTvjbuF1ZateR6oybKqcvdhe1a37RqA2r2lQvnmGZffO5Fmx+94ETusILImnstiyLSy4LXZcQwz6sZ4x0w..JkViSp85Gu4PvnnvHPbb3fgWpAkiIR5OJ7FBhMbo3cc52VPQjVJ9U6uuXpkBLaQEgVCWQXDpPYVl4ZcLUjG9eioSKDGFkUeCif6aCJpYF9W8FALToL4PRWiH1vPUSQYfHBMFe.7G5e9YBLe.ChNFPnHDJUaOVmpsTz22PC1XT3qL18vjxkPFWYXd4OiKULXwrZwVyH.ojxTA6SpdVpfIonKAaEI7holJXSLnj6VpYXOxkQmtpxsRzYQQbnfJnMSMt5gkGf.otZKTZd9x7YW.YrNQvFPHkkUG.vVpSBQGbdSh8.n.ap0wwGbn5JC0M.Jf.N.yHbb3oYYT92QntJYJ1X18ZHNbo.xkdLutLOYn50KskrfPkHvgLEIDX8nbWzbRziT4kRyjR.MQt3zq7YjoxK4hJ8fEHpKqtHMaXoGpbKTJ+njcp0mqMX0xlREo2IRdvZJn0tQfOdCh7MNiXl3YSduiccQOFJrJItOAn+KIsgFtf+XQg1.dDgJNkP2CqY72wxg5DsaIKddyROgTOdFX9pLMv79FwiQvyMceDk1D372BU2D36SooTLNq7VFQQP78PxamXodDQMJJ28HXsB6Lf2uzd3a+JkVoM6qT4sVHuOH4NtDLHEPxh7OqjEs8z4IN8QdSHHMZaK0HxWn1MNj+58+lFIpzwtIgZD4xy7aiUc2gdNER5ms9RuG2Xqxa8FrRr3no1WeCF9M0ya4MzG9MdOblUCIeN3W621vrW8fq7MV3GdcorWBZwKGNsad9BnUwYORa67A42mrRNfOhAfAqA5gYHukqlX2bZdkXWbhsV7beoe+v.HJCFsUm9cOo4eo.Dp3e5r7aCfnqCWv20B576yaIFmImMov+M.toQQgd9N0giVagWUlxe3mO4.1s5EMxDLzMQ5P5UpsccDQIJoOmhmYXYRMqHu.8WCTcyxgJOOdAwhoTtaUhZL0+5ERD+8wd+hD32tH0jqmYtCl6qZ+z3RPWTduWDlRlqJvhjXrE2aZdKdPQgDTwlzLei3q2utX+5btLxO5qzwtIjKT9CdmROdhq1deyp9HOPxWFK2KG9FMxQHUpR75giHnAR.rSRj9hWtpUsb5dqnluR22WOTxKWcKD.ND9Dly644Ic7MSEoG4K9drxfEBYMnIloRjTPUwLra8.+G4uaAfxQ8RJZrLcruS5jBfdZu7GRfhCM5+9.Pe1lzTqjZrTO16qJhhl.HNzKZACG4NDmw9JanoUy+O1FKlfXaq5eWGnuHEIkv5tVFvgZqsqHHh2XatFnxtLjOZ47PuBIrYn2M61gE53L4B5jtfWdvbiaP6NZoWmo4QB+juc0h9CZdVql8ZINoyg8Z16u7JTkPu1O5xx+9JV3wA7st4.lgVl7JezQqpnVJKpjLxMm.W6cazQ7U3rLzEm5LfHJk4T51wPXJfSDSm7blYRVhnVyvRN02ALrxoLJ8cAFe2tzMrLkb7Jb7unCh00AiIxqrpgX2dnNJLYpXZUz7DsLaMQ30HvvUpEZezVxbaWD4M6xYlEpLS5trqc4GMZzt7pJiWtadGpVPc4RJ7Y+OUNSLQh5.Ij5g3w2c4f2neUWd54st3j1bbXS1zymIpg814yH2OPoOVqcg1AelaYjsiHj1dMzqV4m8xxeDg2UivvO9WviFVjOJuaF7EUsFtw0Y1MdwD1.zrbsVwU22vQD+R6nxZxhoqWKuhgMeOFn3V99981LcbMeC0Onw9a.i0GLrLa78tkBmSMsrbKKuK1PM.7TSrp1MFrKiuOuW+2Jq4ZmxSHVz2yUEKEAfjTiUI3B5oRBNYQKF3JUmMGAxC0fIlBKrbi9.iJVyWSwbg0MYFXgxLzWY+sySUodvmuuX3robWLBfK57ho.jBNaqWpuNXK+Ni0c3ro0.IanRYmpUcxMhUoVGfFWW7WmaogXInQfjapPclY4l97Ax4o4JPp027IomiOLo0VW15jtV.FRCy9dZKACKUQ2YBph0eynVj.GAFLvuEp0kzk4FCKOj0OYFUnEUfCec+E6U9HHuYBrie9MB4Y.kMFpx8niUtc1kt8+7.UX1uvxMPHsj.pRoXeV9TojUSfWbJQDGxWvPxBB3h+dlynDivfVsBBBeW9gUoDbHNlbQW5uSS8SzoWgy8AlR17zwgWEeqN4kXRo4zl2QEvPQZ5ITh7P+MJQCKJ2K3mLxhyeAW2+DYLxMSJBnZqsg0A7zP.kadqMjRidqVVKhvF2Rv1Og6I3lwGawEDv2HiN5JK2XqxEMvVhjnLTEt7nvqq.2FivwZ94NRr5u2zGTztvxuGt.i6T3.MfX8lB2PDR9JtcqEYRXEe4TI4wzhlmwV0ERcPkkf8dHuWoPcOpC3RLmRy9JAdzmtlTE4W9NzVJv5SfZdEuITJuzhp7hbONcO3k+8H5u0s24+g1GM3xiO+jVs68ApMC2SGin2xn7qwdUDauQzZmiqie5U7gYXcIr6sTY5qYPLMYtfJg3c55K2ssZoEVl2+xQRWoUK7FsT5JZnJqNOs1d6fhS14C6H1bnQit0wBff3WYxaYXxeK69HrV57oCo5T82rS9DqT84q+Fl+i93dCyi7WkUoIZRoHd.jX362+qHekvcgg+2EcndbQuh5gmg4AnlNMINUaotVGo7uv5auUKk8JjUtRka91r+S1BIPlizRq+x0S+hBBC.8wZuQ6Tt8TTA8xx+hCdDuw86euuw8erh3OcqtDD6aWFe1sHiPS8OCYL76T3eeq1.EQjak.97sN9O+T+QI7.r22gmwmJcY52Wo5VmMeZefAJREZ+JV7sp9LxZw+88ouSZf9HYE+k+O7IL3Az2qFF7f7AqLUFkYtLx6EP+RH9W3m.YJk+Qfr8VmReWbPE1ynrdlBkcYTz5K0MH7yepD9KepD9EOUB+UOUB+0OUB+MOUB+sOLgzq.Zyv6JBbapT4zts4PIUq5KUisVq7+CgstiXA
      
      posted in Scripting
      C
      clevername27
    • Interest in a macOS Code Signing, Notorising and Installer Tutorial?

      Is there a strong interest in a top-to-bottom tutorial for this?

      posted in Scripting
      C
      clevername27