Did some more digging and found that
-
The bug isn't present in Rosetta builds
-
There are a few mentions of floating point values on ARM builds in JUCE's GitHub issues, including this one with a related forum post. Possibly related?
Did some more digging and found that
The bug isn't present in Rosetta builds
There are a few mentions of floating point values on ARM builds in JUCE's GitHub issues, including this one with a related forum post. Possibly related?
@ustk Good catch, I hadn't checked scriptnode values. Strangely, I was only able to replicate it on a fresh network once I set a bipolar min/max and <1 step size.
The bug affects preset values, too, unfortunately.
Occurring on M4 running Sequoia 15.2, Xcode 16.2, current develop build (happens on older builds, too).
HiseSnippet 850.3ocsU0sSTDCEtEnnr9STiO.S7JzXL6BqKPTCHKftQA23fF8JRYZG1lsS6jocPVMdiwmGeE7Yw2.uv60S6LvrqrB5l3bwjb94qmud9qcyzQbiQmgv01cPJGguLIbfx1qcOpPg5rABeUx1TikmETnZ8AoTigyPX7zOwo.O2LH+22Wccpjph3UpPnWqEQ7mKRD1JscW6YBobKJiuqHYHuatVmHspsVpyA9LMoNJkF0md.eGpysoHnmRM8P36Ppe+Vb9RKFyXzEWj0pUqUVdklqzfFWuIc+FsVo4BMWZgkWJFgmcSlvpyBsTK2fvyrtlMHrm9cph.7ZgQruj6DZfBgHWndKsj4thNsn18DRV2iSTFDbJcqRaSWj1tIYaASbh9pz207FBpPLbBDO0nza5QnWi+D8FCkvCQoYJnz0IgQYhTakEGetDoiBplwTnNMLUJ7Eg+AosFbPYuWBsOeqLP3D.y2pd86F.+t8CpUCJUFavgzrfmoz62H3QAGC7.tssNIUq.g4uk25sbHhyUQVgVEnU6ns7Wnl+109Ps4p8wZA+to33wZyEgLsTxyFqYW6T1YAbdUdx97r6BzVlyOwQHkMZcX1+t5PTwEdHG0pNJg8Eo7R4ytQBUlwb0uRFBtZ8UuqVV8BkBFOCIfC4BDetD4Ie0XyQOD8pNaPsziOF3DgnjxyrB2kAuA+PXHrnoXNxFbSeqN06aYQBgux4FzipBnXsAUBucMicfK0Lq2QThfwj7tZivk5GdU.rDIMT7dOy+vM+xS916+7pIir.4ql73XwQ9Q8XgLwXAxzIA1.fv2f7JCOfwio4RafoO.TJT84rc0d+emfYgcCD7mfSpGWbPOqS5g9ENmZ1.lJ0rbI0N5npagVoAG4Gd9vMDnfK0fgW38OL+V+Lme+ao30IcE1ndimiSMFNB8D+O3X4VuqP1LNlGYqH3Ljsdyjth6bB+K04Vg5fsoPWAziP1IOIDdoHhCQWo3RiqdOkappPttS1kAB4JlW3mvWowFNYbowFGaDkPixz6EULK51qdQuFfSJ+aPyAOFBxAmZHD4Z7E6EEM5QcJfKLo.WbRA1bRAd+IEXqIE3RSJvkOeftWgebtUmTL1fPa2cS+RSLdSEE5.8cqneAC18cCB
It doesn't occur at a stepsize of 1, only .01 and .001.
Not seeing this problem on an Intel machine running the same HISE version. Is anyone else encountering this on Apple Silicon, or did I just forget to set something in the native ARM build?
I've been digging around the ModulationMatrixTutorial snippet, and am curious about a particular use case.
Let's say we have a dual-synth setup, with a filter on each synth. A single UI slider should control the frequency of both filters, and (ideally) the slider's right-click menu should assign a modulator to both filters. We can't use a control callback for the slider, as it won't work with addModulatorTarget.
What if we duplicate the addModulatorTarget, changing the Target but keeping the same component and ID (so it shows up as a single entity in the matrix view)?
matrix.addModulatorTarget({
"Target": "OSC 1 Filter",
"Chain": matrix.Frequency,
"ID": "OSC 1 Frequency",
"Component": "Knob5",
"Slots": [2, 2, 1]
});
matrix.addModulatorTarget({
"Target": "OSC 2 Filter",
"Chain": matrix.Frequency,
"ID": "OSC 1 Frequency",
"Component": "Knob5",
"Slots": [2, 2, 1]
});
Chaos ensues. The slider affects Filter 2 only. Modulation activates for Filter 1 only. getModValue is lost in the slider's LAF. The mod matrix shows 2 instances of the same ID. The right-click menu doesn't reflect the currently active modulators.
I'm exploring workarounds in Broadcasters or Macros, but so far am unable to produce a solution that retains the UE of the ModMatrix system + allows (sample-accurate) modulation of multiple targets from a single component. Am I missing something obvious here?
Changing HISE/hi_core/hi_modules/effects/fx/CurveEq.h, line 318:
sendOtherChangeMessage(dispatch::library::ProcessorChangeEvent::Preset);
to
sendOtherChangeMessage(dispatch::library::ProcessorChangeEvent::Custom);
Seems to resolve the issue. Not sure if it's a typo or if there's a missing definition for the Preset event, but I haven't found any new problems since making the change.
@Lindon said in Can someone explain front-end macros to me?:
@Goodflow yeah that works - but of course it limits us to "just" the 8 Macro slots....
The hise_num_macros preprocessor definition solves that.
There’s been improvement but it still gets crashy in large projects. A home brewed alternative is way out of my depth though so all I can do is hope it gets more love.
@d-healey said in Can someone explain front-end macros to me?:
I think this is a very specific and narrow use of the macro system - I wasn't even aware of macro modulators, I'm not sure what I'd use them for.
I'm more interested in something similar to Kontakt's automation system, where the user can assign a macro/automation slot to a control and then control it through parameter automation in their DAW - linking it to their own LFO/Envelopes/Modulators/etc. if they wish. Does the macro system support that?
I think you can put constant modulators in the Macro Slots, assign those constant values to be controlled by corresponding user knobs (visible or not), named “Macro 1,2,3,etc”, and make those user knobs ispluginparameter=true. Then your external modulator can control the values feeding the constant modulators.
@Lindon said in Can someone explain front-end macros to me?:
can I LAF the frontendMacroPanel these days?
Yep, drawTableHeaderBackground / drawTableCell / drawTableHeaderColumn / drawTableRowBackground
Can I LAF the little green numbers that get displayed on attached knobs?
drawNumberTag
If I create a Macro Modulation Source in a sub container then its modulators never get referenced when assigned, unless there's a way to do this
I think the issue in your snippet is that the 2nd LFO was added to Macro Slot #1, which is already populated with LFO 1 in the first Source container. Try slot #4 on the sub-container:
HiseSnippet 2153.3oc6a07aajaEeFIyr1JdSxhlhrsmDB5Am1.COxZkiwhBONRVNBwNV0RNYS2V3POCkDgmgb5LTNQcaAJP6gda+SnGZOzS8VO2z1qM.AnG5k8PJZKPaOsW1yojCmQhik+PwQ9CkJAXCwG+5Ge78d7w2SrpO0BEDP80zyTuiGRSeZPsNDVqhsfXhVkRZ52.3Bs7oAqSsa6.YXRy6Sn6Dnc2Ndvf.jsltd5UEMVepIzB+7kKcWnCjXg5QRS6gTrEZMrKl0iZUy6icbJCsQ0wtJsNuYEKJoH0g1lCrzf4z7fV6Bahd.TzrT.s6ACZoo+sAy8QEPnElugsMb94sKTnvh2Yw7KZ.aLWd3NFEVLet7Kj6NKzPS+RqXiYT+ZLHCEnoOwco1cp0h9ThbBdHN.uiCRTvPqFelkjKScrEKQAUshsvN1Ui4XAZ7AsZO9WZI+65f0w13tz6wGuVXEY60CUFndpjvKcB3YnBu4Tf2A.IcEHMgDRe.nlkO1i0qFAdtLnBgg7a.46SpPQ1VsTSqCJR4sfvl0EtKprOuP2dLSg4l61Y4+6VeblLqPZhInYCPrvFgH1qGJwLymdysBP9YWq7FF271Yu4Jj8PNTOj36aBI1TWw2p0dGQKxcye3s93FsIVLLkjkRd.kg1fLysx7YYlJyOMS18WUiFGXcBH6ScbP9GX0B4L+ipiyPZ6tCx+1Y2C5zF0sgbdYxMHvguAoJ+XI4fJMjRpPvrM7PjCSpRKhsy2LSGgJ92XgakWIZqrlC1F4qg46XuGPnOZnEB3HcnW86+FO2Taf6btDc9Ie9e5eszf244SzYy+3+9kKosUkRPFTHMFsV3qOOjOCKXc5kP6wsEHkMmBTBErKi5w4vEotdThXkqeYVjxjbRK6PCs7TGyYwho9p.URFZOS0TSmdEdr4Sw1rVcI7jmY1Bga1pmQnm6aFgwX82DBwUgDji1NMiMFM0khmELC41i5qe8q+YIolSkLC8LV+MVSYEO4wtAqrF6X1aMZ9DSWUqu4Mcg8Z5u7uZZiZ.a6vdnxtDuW+JdurscPUoAXgJPuZ9bSUbMwwJ6bH3RC+FMNyeXiyq7L052lF2Zp77njlXEGDEePEeMoZWSX6hvWqcTOnZnY2cPg3G.phYVsNXLl5.vHWI5z.iQmV89fUZz.Yw5AvI.k+jSmilTm9IkS+M.gJY83F03ZH7yiD.4aJqKauJyJq03Hb83kCpqGdCrqG5oOJOGLNgdNL8okmCSLXaOGM7N6T3NSg6Qp7kdfT9F538jqHdlx5lJRaz3LzlZBeYulDb..2WwHYO92x1EpC.vJ6i9QsQDKEhWyTXBnRhS+dDbOTCpuajCJc69Znl7IRkRcD+3M90krTIVykRYsB8LQ0vx0MWiR8Vg.4Kca01WsELP3NK28YUAOwvVmtNLf6wcQGp0tpUVoIg5ijtHqRuX6.F0MdADdSoZLjWnyX5eJnP9Y4eZ7cD+ewh7+M+FCmxuImQYbz64oFPAxuV31e28YgfvEbqORD2UHbD.wwJ84NuT5upDbuGX46Up1lQ1vC+d13KSlTuecJg50hRvVppEahX93lMQ9pH9.WFKyXPqcK11euDdPTBYA6zGUYiU8cPRYMDGZpM7d7ci9FttD9veqYMtdaB+Xd7y2D4f3FFTG8UrDdJgNgr8iQuCLfxDuOPtHyFZd6hs76UhwpbG4hMXmFDJVLJvWuJHRfcjfwdEPjtzn.qM1j67mWlbujDbSBjQnK5jKYg2Hus1J.UGFN+JFhCGlPxReR3NnLzLg8lxhyOhHJ7QiH3rvHBNWXDAm247BmaRaKhr55PtWSOi6YvCZ6Ji7BGiDBxQD9a8ThqaHKOmnb3cVPD6vBul+IpRCQY8nJMhq7.hETeIdZ5v7OvKg7MFFYaZXExmSZxh.W3RVz33p9tVbUuZBcoU8os8Bm8qKIfBvhDxER+LVmRF4ixqmHbEPeeLxuBwFoD7+u7Ozc+suZ1hfC3WwKDJK6RaSXIb4PVaIDqMIAzipnlmOBlH3KBzWCwgpc3PFjPF9TIvuSN1JvaoGpSEiwZXWOGTbf.hLCTRlsqtTG9QGPMld8cK8uk4Z7Crf9mdWTWe.2t9P0Kpmcz03c5+uw38wEc.gUs8G0vTWL1A4G3DZa8bDduMoTL23TJNNkhiSo3HSJEGJJLmAYAYTIzgmK3L+Yv99acZkychRq7jC6zJqoMNsxiSq76XoUdbfsGGX62kCr8Mj7hKCDVNCi+VHa3qChsjlcUDA42e9zN0u.xFVLNDp6CIAdz.jQhSHPt35TBJHA080ibGXOxk7G4f39pF8SJQqDrhxbVgg5gmwDyoRrJjjXv3kSLRqiS7i.WdjnL1daDXwYLB9bhSHa6Dfdj3mGtx39JEx4TIeOnu89OS9z4dbWZbDBGGpoy0cQtpzE6.FdC.WkNW1vsxrmO6kmEmkLdNF74H7QJtsk7UKElnkPJ78OR3iF7xftuEsjOUJq+6WsjK2H51VVwClttU7yHydaOnOe.XhzCLs34pn9t4TpCnmVbDbLgskyZ7aaIwKzQSS8E5v0ebnOUT7238cy7290uboV3lguXoW7WDe9mKErK5opMme2MOQ4O65+tU+6+3ewRXxdHelTpWDDVJwoi367EQXEbzs.X9ElkTuv8uSw6tZS9crd3JkgyskQ014cr1sxph+lc4RU+D726QeeisJy+9d76fookjIlAzMuJ6k34D87sM2GObe8r6umniqemLdepCk2mav38Rd8Wzk2+m+pY9Ah2A2EIde7KkLo7K8e73gCOT+P4gFZG8KLKhGFWaLOLt5Xd3K9I+mE94tu3bjGlBrO4Og7vQJ2dQoGB27VtMi5JOni6ta0UjweQuave3Vf9evuDSYK
The way I understand it, the macro knobs aren't for direct use as knobs so much as vessels for modulation from a Macro Modulator Source container . You can populate each "source" with any modulator, then the end-user can assign any controls you allow (enableMidiLearn property) to any of those modulation sources.
You could add an LFO, envelope, and random modulator to a Macro Modulator Source container, and set up the macros as Engine.setFrontendMacros(["LFO", "Envelope", "Random"]) (the macro names are just being established for the end user here) Include a FrontendMacroPanel tile, and the user can right-click controls to assign modulators, edit ranges in the tile, etc just like CC.
HiseSnippet 1438.3oc4Y0raaaDDdokWGakDmDz.zhdRvmbPMBrrScSQNDlHKkHD6XAKmzFDT3tlbj3BStKK4JaqFTfdnG5s9ZzS8YHm549Hj9Fzy8h6tbIEWF+SjBbbka4ABtyr+7MyNyryNrUD2Ahi4QHqY1peHfrtBtcelvqlGgxPMWEYMKdcRr.hpnI8v9gj3XvEYYU5QJBVyLIJ44ut+CI9DlCjSBgdNm5.qQCnhbpsreB02uAwE1hFXz66X2zgypw848j3oDdQTHwYWRW3oDU2l.irlptKUviZKHBHV1mGxc621iuOS2+mSio63CpFUQskSjlLplG02sUlrFiPV3V4RdIsjeS75TW5.54ZfqmvnR9HL0AVSbZPp5H.IKCHMoFR2.21IhFJx4nvykwMYxMjNDop1DJ59hr9abMtrCLwsCH6BMhjMFLf4WYwEWnh70stW4x0YcoL31wfHoS.ycchSDOd9WN2ZM1XtEpLWc1dfOODTeuIg4xCl6at085zi4HnbVEN6obArAa9aU9Ukmo7OTtxaypSmikmBfQbeeH5XYqrKhNsANOqWvNPzBU1i32CFzQohq3twTC2tgiVeYzQNqIiJ1HDRa2f66pzxpuO5dGJUgK2EKkhP4Whj8vYS2Ca6ScgHDUNIWB+DFempnDvmZ++lMge+9ngdvKUXv5mgdvKeLC9YMWkHHJyvTYQJegPjfpTiVqB6I8i0FkyfWEh2UvCkZ6Z7fPNSI4VWVj5EoWzF9bhfx5tEUptUK80vljphNvb46m23E16ScEdRWTKOKDxCnc8DpVKXMPOm4vVvrsEgA9nc5lE.Yloxlcp.Bxod3gG9iEotjIYAbf3ncFYHoS9N2XMjs914xl82ZOJyyRmz7fniz7r7IMOuIzFczfNxvcb2d9DQwXfpf8oLjthEB7nhtvhoh9lGFLBAFW7TCLNrP7F3VTgi2wiwINFLJM1+PfwziStJtdmNfiHGfSha70uumcL7K+z5k+iwINE4Zi1RKZ4AFJf7oZdUxYVQys5ob79eLrGuGNzGuaU5r5ryq7uvw4mMVsWzcrJ8+FGqSSEMSpGU0ywsuBILdcM3vXYhao1UxupL.pCAvZDAeWOf4XPbZakaby7n.1+h8WQ1C5viBRSFXvvWC5JWHSJaAxinj2lvwzxnc.mK7RxBvL3vMsWiyCqyHRQ20bRZ4QhUoQJSRsvzHm1s35alTym6rqIylcY7HPmZpI8Z8hE7fLAH4FEsEPXRhOVuDuxcts7oymod+k0juVdiyl1nytKILwPZP9QIa+C1mUFBito4jCmo46H23QBwCLBu.f3Lm9kNGv46L.v0z.8R3G73UauYZb6juqjcIthw.Vmy3gdbFsf64lfHh1sKDYh9iUjdfPHucdsdQ6UHifUAGR+iPU2YybAzTVCjPyriOVJwGY5FP3S9U61Re3B4k7hWuI3CxfDlydcGUlOv6Yb2Qn1Aml8wUwZgrRRntwaa4YyvpdGY7FrWAmXVbQPudMbpA6EBE6r3TeoKBp1rvuKOND9cJMPmFqqRV5IZ5FiTVXOKF1hjfEifxISSBYctJpRgdVENaTU22YL7FJYX6yGiw1JiwX6KFiw1cOOw1l7dpJTtNQlEzAxS5eZu.ckQj3hw.+XUgHmPcUBc6EUsStOBvbSZbn7IkYUUaqTlUyXdtrFAJU21N5BBqhUMcBEobyR9WJ56IZVEX6e9tqXGPcoa63jMMVVNY0o2c6PRjbnBUlgWVUaQy+BgAOMZFPXa85kUXz.ZgKjEPNvbezmuuIWOZWOS1w6B6Wns7tap1u5l+1i9yu+mtOUlmajPamDADWNyuu5aTQYuLNKg32pL3ud6yFEvDmnBXowBEvfCo9vH9kNQwe4wBwWd34Q98Gukf+elQnpz4C5I3A551gPq2ptNEBqA0ZQpf9Gnn62aC
Sorry to dig this one up. The Effect Slot issue was resolved quietly months ago, and I incorrectly assumed the fix carried over to HardcodedMasterFX.
HiseSnippet 2420.3oc4Y0sbaabEFT1HMDwo0YlzK5cq4EYHiooIonjrrqmJJRPKNg+MjT1ViphmU.KIVIP.V.PKooQuQ8gnOR8Mn8b1Ef.fhR9mIIWTCMiD1cOmc+N+tGbz.OWCluuqmRFswWMmoj4ApitxIvpgEk6nztoRl+hpE0yzv0jYRlbIw21MvmDv7CT1+p4TeeloRlL26UH4YxdeEwy+4usO0l5XvhmRQ40tbCVG9LdP7rC16m311snlrw7YInt1dsMbcZ3Z6t.f18TKqLmZbNcJqGEIaCUkCn9VJY9Q0xasMisylSLMoato41au8tOa2Z6VgNobM5oU1d2ZUqsS0msyDkLektIOv0aT.EPuRl6uuq4UirbuvQd.ul6yO0lgCpnLBNY4zsbsMQQDmUogE21bPjNyWA1kAwZv6I0feuZWtIe47wZxGJVfDyQREXlMRCu6kBdURBuxIf2ZfTlDP59RH8cpiL73yChWAwy2n11If4MgB1ojPQRqxFa7P0Ft.ENAklQOm0xCFrji7aWtbQxVkKW3EZZO8oY6UuqNoeKx3CzIsdKYbeR6dizGNljWu6fwGQdIomKrPgrOYcOZf01Of7dpGx7KIGqkSe17fqxUTKWiEdumo+OvWGwmM2lMj8dl2owiQeObTSlMUvgvIi4ImapG3cI1GKWuE93aCrn9rVuUrCzfEdTPuKH9JG5LtgflQVz4HMZmHkO.Vi5ze7HxP8V5C060PO6sIAiDgHnPHBkJMkEfS05s4yoOYByHPPQkbEJdmDT8CQvleHBp8gHXKjfPAbP8d5cP6Vy1iFzo9QQVxF86bX2d2zrkEdHhekx3Mf5vrAgOxyAN3Ftyl65.CxmKb8bnSCdnidS8A3gz5vdMF2teu04cnwcr4NLxjENFAbWGh+Ez444lWVoHA9c0BZ+Ssr1tFTaH+TE3nE5+iQB.Qa4JUStRUbEsr.8kD6FrbAwLg.rjGaN3UEjGl85kN.RUzf5s6MlLr+gia2KkSfVDy9rfAH2CcWD.HOeDxyOUf0okl.I8paamOvh6iZn74NcpLYWtBHNlhaQKWTiYxlPWXGjqHoRMbITKSAQIh0Nn3su6BGS+7kkx.RBllFnhd7lmPdpTtKYyblFXsjjIWJbRQMApJb8H48IbGIwEzxBHMjNfLwYAQhdfYT5.gpFIAbSffIWhTz1LdZHVhAKvMK4u3T+.OtyTvpUh6Xxtr+j74dWtBjGSDFwPnsj0SCyFI2WteT1I4lGRj6omQdI7Nhyr4lbYtmuVTVLbYDNqkDDyRhBIA+ibhHb.SF8JL+0gf.Tfkluv2JOfDDXWGoYo1ysPaT4RaIz1nittNFaM9f5iEAVMGV+UuRuYXNk18Zp+VRaL4B71PX9N0GMVxHjHcLodm2T+nQj2ztSGx9GQdc6Qs2uit7zL.ie.0yKxXFZKOCAvKHmQ9qoM+jyd7iAqaV9DjlGE5IYRCnkf.CbkrQ6nT5NS5UkdxzL8BDpQROOFCmKwv42.CmKv.Z43.IQa8wmKbFIgnCzuGyOozRmge4WHgSIcsdII7RBAniU56faBy1mkb5JkJGZ1DAWxnsDAfvEFyRFBlMDDoDTTcwKD4yIiiGhwdLygfmD0YpMK+wUKRpBd1hPvejvKBQgUOg7DRshx4f2NoHYSwojBMx+3W5BdfUcD2wyXA3qnzwpPDildzKpaym5vLGytLHReIc0KRNtbwUvfbL7mbFf2uG3WK1pqkRanF6SPzRqadbhw.zldzuqBdJrH8PRoB9nv5sqftV65BqbOP29GNRmzndmN6WuwOs5MWIuLnq6BeVCps8oPQrw2F.kw3DHtQ.CarRjT+.FepkLCahj4VqKSN5iJ1nRVtPYQje3GHORN1i4CWbfdqwxpjlWR5RgZBlX655Ex7UvdiGSgU1zvMAyD0oe8lIuqF1X7Vp2leksuHQxJFQglmU2RCatw4xvY4DnAHJavpTIBsSa69.nOapsIbuStGB6MrKwDbTHaBZLr.e8vqZtNMxmg1wCmi5XteS1D3tcyUxDhqciTFOoRn3kDDtymKtf6tEFQ0Io1vhjarKBJWUI8jJuX8hTji7HVfrJsKCV.UHMi4rH6cW2EFuFQedHeM8pD0dglaYUuYy8DxJ+.UTmMmqyScmLQ7pGaF3p.g01hgqmd7MtiOyKHZpDWugGGVsRHLjdOHDj2OguJE23Z57w77ycmuXdWPVaiDCkUIY5LWtS9b+cGQxerhuzBK7gKRkVBEVjdY8eQyspBg.FgUTfPT84CY8LrjRTnfX.eeBYMZkmmZsD5Fbgrm5wnm+hkjDptEKIMQIJqZYkvmrlRltQEWYuaxAoZI8OJ5PjLtBlRX2E35lUcBOfCqMi5kes6f7F+muBn9PL.eH2GEKfE9.n9KxazIhzcXoZ0aL9v5cvLePc+8i9rHrvMfgvxyWcyAMRn1I1Q71+5Bsk9GtN8bCX8cxK7LztVir5RSlr10P+ROWaal2ZWF6th2cwXdmEyNEyc+dp8B1RBUxb+zskP81aKQxtlXH+5uDD55z1gGzeNy415khR3mLBucX6lPhLrWFgyAzMG704HDxzj8dtAS1YirpMY9mG3NWPa32Ypj4AAhU+1n9dfZcEtIRenMP4xkca5eau2UwsdZ7dWvMCrhm3m2yRbcbL8d6g4.h5N0CTqUc2Z6t8NU2cKEvy18hnq5Av9mTguyiDOQ5zOJY9Wp2HJWSF3pEGqncSZRG+qIbx0B6ThVx1jnE2iDMQCRzB6NhVXqQzj8EQKroHZK6HhVT6PzB6EhRbMxRo9Ykqt41aWsrRzWuJmdmmUcypU2sbB5qFsRkcKW9YkUTtYOpdnZWWyE13ImrkYHvCW.bXS0mJrWTN97fqR13we05i1GKD+N0AX960iwMVCFA25eKvXX2G+VUYhmX.devk+2nVMpdSczeV8fksKtK0GbzfrkBb7GUS18qTHpGK3BWuyEM1My89nQWk6V4Ha+xTn.KONDsq1awrQfunACzMNPJ.LcVlMvDOxwkwwn8YDywTL3+BOgKVAGmIbwJQKp7Yq.p9ktBXyuzU.09RWAr0+mn.983LlQM7bemgrXML06WKlAjaGw+Qr+fZmV8IUTDkuEWox61aF2j+NCizazJrU8yisM+7Xq1mJappuVuymJSekZu9i0WgK34t45qUGVuWy9c+TOsuQsa+lj2bf9M.5ZNR7+BX8EAtyjkKnnzcftnd2LYzcnfesHdP4+UVDtQA
@aaronventure I may be poking around the wrong part of the source code, then. The scaling op for that is in ScriptedDrawingActions.cpp, can't make sense of it though.
After a few tweaks to the snippet there's some progress:
"bool drawOnParent" should be false in the beginLayer call
the Path.addWhateverShape call should be done before beginLayer, then use fillPath inside the Layer before applyMask
This new snippet works on 50% scale and above on OSX , 75% and above on Windows.
HiseSnippet 1244.3ocsV0raaaDDdorYRjbZaBPe.H7IY.AUJY2jzZzFYqebMp9CVNtE0vHcE4Josd4tDjKsqhgA5gdtuQ8deM5aPeCZmkKoDorcpc.BunclYmY9lQyO6v.gCILTDfLJd7beBx3olilykyZNCS4nCagLdjojDJQ6O2GGFRbQFFqcfRlQw0Qwe+yq2GyvbGxRVHzIBpCoK0iJWxcXiumxXcvtjiodYt8NMNzQvaJXhH.GqYZi7wNmimR5iUWqfI.h1tToHXjDCfAYr99B24ilItjqu+IzP5XFQQTCMBLjlcGAyUgXEWTyYTl6vz3MDAVY3xneMcz+4l8ntzE7WlEdVr.qkZjMeXTHO7VKG7pkEd1Yf2s.IiLPZcMjdt4Hm.puboDEd1v7PtjDLACo8rPQeWTg+nfYSAbCtrpG9bRm.fXgFkegscEq511asaIHyGJsX3IVeiUa9TJmT0If.wwALwXLSautBw46wc6PHrxfNvsqFPlRCA60Ih6HoBd4McCvWdjPhClOhQcIAaVwZRpvoUrDi+ksrtpTohWfCrv0A2cJvpJFb1o0O6K1oxBpsyQAxpmSV8y1ErRohSqNAJm1iwJqKcBAL4Bnqn1E90.WjlCzgzPrblB+E8qUE65djHhC0GGQbjX9TFoLtdEqZ1ZSLs5XHB4cwyIAkmfYgDE+oUCIRs6V30oADBWKTAnXm3WKNfiwrVD12mMuGN77XYJOkZTkTB2U6oTmeS2b4LpLACpL8B2nL0NJyb8V6llusD79BIY.u7VktBL30krVUzjI2pLUBKPvXJnbKhUMtAuOEKyi7FSBpXcAlEQVbQnZNeKh4c2hjsC1Q++WlKJ3GxoxA9D9c0WiR9SW0NkfJ3px3loOMoYRWghntp4aGqluEi2rSvPu4vVXIN0JfAAm3SBjTE9MZQt.lvoaQKZ1hDdtT3CCqZJ77Ebk6Md7+mO+0k9i1X9RhusAzY4Oh9tT.03ue2u+5KotxYPly3u.NyHzoyjJpeBEGxK75FxjIYZu1gIvRJe5wTH6p78mYlkUsLfnwOmAD+FtQRXqiwmY1LJTJ7FQjJcCQimlNw9ol6T+kup1WYa+JaDTj5kcT9R55ZFwI0B+og4Ukrr1rU.8BXTwWq6FpDyJNyli0fHoejLGq8ilLgDnxQ4XOB64yHGAEY4XqGls+vd4urDZO8fnomvcEy3fYjNXGnhE3KChzri2psmGL2P1KhIo9L5JfuIifCTqJZ17VvUWgCV0urR7NN5lH3MgDUQ9AcuKb0EF+BxNEXaYYWsdkzCeY5osSOrS5gEhdQ5gWt3PhrZUsSOTeAqjC0qZC+dVoqQI0hoENQMRqGSKg62.cyUYvRTgaDCKyuYU8bhDAPtI25L0JKdHUNO6yMVcc652u0su+WCbeg6yMGRkNytc7V3VvKL.4iMdSd7xmX1F5IbjKA65lc9wONuTAAKOUyA5gkATXDhY+HuQPStCA7NmSXpY7FETilzz1JZU1XDrqKl3eguDg0TzFIBqkJD4gcBDu0QOCW87nmDyAvDO9kgO1ramAV0t4raOnA7sNN4MzJpU+CSss+vTamGpZllmzt6CUoGY1evwsenZ8Dyi1qeqA8dn5sgYuAsr9guq88AnpYh6EAKPzMMHTugsiWEXXzligZt35Sz+AH5Kxc.
This issue is still present on the latest develop build. I'm getting inconsistent results when testing across platforms.
OSX - scaling bug in plugin preview, but compiled plugin has no issues
WIN - scaling bug in plugin preview and compiled plugin
Added a UI zoom tile to the prior snippet for convenience:
HiseSnippet 1196.3ocsVstaaaCElxILq1ccqEXO.B4WJ.FdVtYa.aXnIwWxBpcrQbZ1.BB5nkns4BEofDUxbCBv9wvds1yxdC1aP2ghRwRINaMAq5GRjma76bz4BGEI8nwwxHjU0iWDRQVeJd7BgZd64Dl.cPGj0yvwdDNSLKjnli1aQHINl5irrVaesHVUWGk972uZOBmH7nKIgPmHYdz9r.lZI0Q67ZFm2i3SOlETP5s24.OonsjKS.3rFtIJj3cNYF8PhVrJXj0Fc8YJYzXEQQiQVqumzew34xKEF4OgEylvo5MtnwfgLj6I49ZDqohZOmw8Gk61wHvJiVFDVyDD9B7.lO6F5KCFOOkg8RMJFOrpTFdqUBdtEgWyBvaEPxp.jV2.oWfG6EwBUK4nwySwGHTznoDHrWDJFYQU9yJ31RPBgpQ.4bZuHXyMZ370MaV2Fds02UCh7wJaNYp82a2ULiInM7hnferOWNgvM1quTd9tB+dTJ2AzAjtQDcFKFrWuDgmhIENa5GQt7HohDsXLm4Si1rt8zblypaKm7KaYeUsZUm0HlpL+scLehAq4C1EXMExPNh5ob.waP.fnIWq5EjH6PW.h4NkAiifLSGiDyZLAPjnOYAMxQEkP0jCcaP78ORlHf7.sYIhYbpyo4F+zlmU+l0tEV25rur0xcuD1cVca2lFLRBC4KFPhO2IzM0uRkptc1opEgJ7MHIGb20kubNSQMFTG4RcEs8djfaa8Ies9k4OZb5+fBQLHP7ZgbhylGSiUaVuYcs2j+CxVJNTpnCENaU6J.wWWy91rlNck7zlORx4ZecEr0U5Q+aJ5HRBlPipaeAgCgubAgz+x0T36ulpXIumwaKHnTbffoFFRE2Wi.TVHRW+kgJPTUZ02mkU8YRoQLnHaCrNBhRwawVdn2bPGhhjaEvfvgDRiTLM9s5Pu.ZIZpoqh6PiOWICgtaskAgRg93sv+Wm4uBxXoOpE4KfRvvwr2kCjc9q286uBUvjUUY80LlrGWRTPK8iYPnSa3OGWjjq9Dx7neityha17yzcx7IiC7bb6jXkLXLUo0MFMYVd+6pa.x+dsRP9cPIpnxTaUjbZnqxeXgupls8lchXW.cP9V6oDdLsdJoz3WIRCSTgIpRj1KY5TZjNhTh7XRPHmdDjJUhroG2diFTVXETWE.t0.o+sLCLPj1i3A4k.cc8dJ4zgc6F.sYTCR3JVHmcKv2lSIQ5IHsauBb0W5QzUE2xemjbWD7lXpNUd+92Gt5CckAdmBjssa13qpms3axV41nY9hV2PJaQqFMgumU6ZXV8clCAS.k9Ibhp7XQ8cAxX.dPoYQ54MhXlZQw6J7+1rxOTH9B7Hlxa9pwXkUfQn.9iAFytgwyvcgLTO0R.tNt2O8w45DHXxmt7b.QEwz8NNLIXLT34QgSWHnbceUqJ5Nfl8MyaqLFFfkt48vSFSW8dqLlt4LQADuH4a8L8M02g4IoT.LIRu91mf62ans6c6WF.kCu0yqrgtkZsdbp8xGmZa+PUCiOoa+GpRafOb3wcenZ8D7Q6dXmgCdn58T7fgcr+wen6GBP0cn1MA5qaJTPnAi5l1X1xpqf.4bo4mn+APXBroF
I keep coming back to this commented-out line 191 in PostGraphicsRenderer.cpp:
if (scale)
{
other = path;
Rectangle<float> area(0.0f, 0.0f, bd.width, bd.height);
PathFactory::scalePath(other, area);
pathToUse = &other;
}
else if (scaleFactor != 1.0f)
{
other = path;
//other.applyTransform(AffineTransform::scale(scaleFactor));
pathToUse = &other;
}
@Christoph-Hart should there be something in this spot to handle the non-1.0f scaling for applyMask? I've tried uncommenting the line, adding variations on the two lines from "if(scale)" to the "else if" section, and removing both conditionals/leaving the contents of "if(scale)", but no luck so far.
@clevername27 Sorry I missed that bit, sounds like it could be a missing file pool issue in that case. Have you tried Export > Export Pooled Files To Binary Resource before compiling?
@clevername27 said in Where are MIDI Files Stored in Compiled Plugins?:
midiPlayer.setFile("{PROJECT_FOLDER}" + [MIDI File Name] + ".mid", true, true);
Have you checked the result of this against the respective file/value from midiPlayer.getMidiFileList()? I went through something similar recently and it was from a misplaced text.replace on the [MIDI File Name] variable.
@FatMitchell Yeah scriptnode can be daunting. I wish there was a single, comprehensive resource I could point to; the best I've found has been a combination of the docs and searching the forum internally + via google with the site:forum.hise.audio operator. The snippet browser's been great for learning structure.
We can actually replicate this in HISE's module browser faster than scriptnode, so let's start there.
Roar's waveform makes it look like some kind of modulated wavetable distortion. But running a sine wave through sounds like what Ableton describes: the signal + some white noise driven into a basic saturator. Notice the way the curve goes from smooth to almost a square shape?
That's the same waveshaping you get from ShapeFX's saturation mode. You can see the curve change in the SNEX version:
In this snippet, I've got a container with two noise generators panned in either direction (waveform generator should work too) and an instrument. The container has a ShapeFX on saturation mode, and the noise generators have filters linked to macro knobs. The single UI slider controls the distortion amount + the noise volume. The limiter at the end is just to wrangle the volume.
HiseSnippet 1978.3oc6a8zababEen1k0UTNFwtFAo.EEDB4vpBWGsQ1NtHHPzRqVKgHYuVqx+PQgyHtyt6DycFVxgxdcfA7gdn8RABPQuTTf9In.sW5w5BzO.snWCPa9BT3a8XyaFRtbH0p0RJRNYsoNHfYdyaleu+Nu4IwVAbWRXHO.YL6NC8IHiyZ1dHSze09XJCsQCjwELuEmFRraPCE7.AkyPqLzGGFR5fLLpbS45LlsJR8ySWdErGl4RxlBg9.N0krIc.UjMaKm2i540D2grCcf1puhyFtb1pbOdDfoJlKh7wt2C2ibKrbYyXhL9Nq0gBHos.KHgHipqv6Lrce98Ywq+Cngzc8HxA0QsgMJd5lbuNRDKmEsZepWmVoxdHBYX1JSSTIVSbQysncnilOSi7pJB1YbnqOLlIO7pjCd00g2hZvaLPxPCRUigz4Ma6FP8EYTj3YNyMXBRPWLn10gR7ZQybtJlqxgUvDWd.9djlAvfQbT6ZKt3krgesv6XYAp9Pg8d3.618w9jleTc620V4Ob4dDwZc6RbE0lWQyFHNeddT9IR+gPfKqep09XbSRWgsbAyuvk1O0so85mR15mA6rEk4QYD6tQLWoemMm8dL9t0kBS.2qlKefOmAh0kfi2Khrf0mYMq0a9lgDgsnOwd.9A1c10tKOPMLQjr6AmfceR.wxi6h8jKqQ.cOB.5qsHbrG3FDGGvCcAOWLXhCU6xrYaS7BdW60X8.bKkMozzD6BKtIOnAwktKwKr1O9sthTykpiuLbd2PHBn6FIH0FMqj2DI6GkhQIaR3TiYCBQlBGDcV9sgEyeFTROc.HYnp1nsWsWKrv67HKqGAGRpCCv3pop4Zyqvv7KHOoDivpXOucgHzZ4sM.N0rZ2hKH2lUK197HK6hj51crzR1KORvXIKSbDLIFqwhFrKIHm2ArPHZJeHp4AGhpmAwMVknsPNaCFUbaeB6fxqfRzixv4DTAKUnBlOWRvbaOZGR.hBwrmwTogQJ.mjT7+7vK9eWF89az.KvoaCrivo3SfzwRAvnAYOHEabNhYMaPBumf6qVahoCj4m4g9fQYgeL1Y3nANepCZ+Yhfbf7NQpv.8DiROqDBEunPlwgEREC0usnX1xpGtrkSNY9gEtm2rEU31e73clwfWP8eZi2j6ddEy3rhYfspYyOZhWzbhCku6ATPvYU2l.iHA0OIJEv+PWJfQkSiq9Oyo0U+OWclKi89FL163Wj2LZm+4SSfmTBPRwciJ2JGDVMJXu3BhWghCkUVoqqjyopmRex0gIZAafdH1l76mape4+xArIZQgutys2iDDhG3C0h0S2+QKb2Yok1zYaRmn7Q62HRv6UHofJ3eClejPe13afzXcK5CxkJQI4ModPUqg4bJpbnsD0mnk.sMOR.R3VXnBJ3rMuUzf1PlGWB3GvXPgSvbFyHuROd7hxwRHzlv5nF7+geRHVWN1HgX8Th5NaWH1XaY1XHCOf5FlXsSGVL0pfrFCCRRGcoWN8N8CHg8Am7hDfZAgByxawDjsIdDbnlt9icjUIDnf0XNhLhi8fxHusLLV+zxHUDIug1QNF7nbQH6GLINOjwgjZOIgVtyx4Ke3uIkohGzSBzPwVv6hh70ErDt1OgoVOtyE6wAITfqtU2oqb4dM0X6ODCu.5lD3RcYh5C7h8GO768ON4uX+1tB332I.yB84g4131jAzcfZXyE0+9gvqXI+7BtbRuQbvXI8zkaBB4X4oMVDEntB5FC3QLwjr0UOb15mQAGUKK33Dr0Hylhw1T3NJHK4dDO3oQI8tpAoKNxSjNad+5s3LteeNi5paz2l.wi85QBzw9XEnh40tny9xl8FP1LFAGj+R0ijtn9QtMQi0d85lwv0VFLZ+hQghUd47QZOmu3H4gfmItQvIuALtWWp5NORWU7z+5o4a.KSIO0kR9sJSI+hTJ4Whd6dk86xeAyVbugwNvwuVUAhYM2r0DyUp9QVdZDg4lp4d7Rewm6bGcydwmlemHrWll9S3e9+9usB0m6gCNTVgiuGd0CoqxqYNRnll7ukVloG798MSL51Rk8zCtOm4c91EXeVAwqeLBhc9e+t0lTP7OnPPLBc8+bYPbYPbYP7W6+rUphOuYJPmybz+9AGX.7u8Wc8mzf3gyEv8gzNh958mbLs+ZCnX1.QKo8qX3Zkm2gqSad9xWD.p7oI.qbIld.7qZ1B+sAGhmG8s3a9di7JI8FI9u+1Qq4HKW1bjxlin0bjkJaNRYyQdAu4HVxliLwjkmHcGAg9S+cmxGVU9vpxGVcZzcDKY2QN5QwG01i7Gt9uurGmkQwkQwmzsG4rlYe+Ek8Gor+Hk8Gor+HureFCvtA765F+c6HSwXolAreL0WiXU3kK49VcfWkrky.ZG5cccS2EiYbS+Nl5bWeb.vorlIi4je6MY+gg0nDCkQSb23CatrxLPCzKp5JNCvOP+efaO980o1GxqqSN7dDE8e3u9ubU7b+ykCED0+fqe1E+i27Ke3uXYpJWcrye.A2gy7FJe6JZBxg1a3lBDjhVw0KZEQW8HZEW+EDq35SsVwYM2RN1dohlRDpfo7.X7JGWFu5wkwqcbY7sOtLd8iKi+jiJiVILVewmMmxNFK+TQFDe4KBsUq0TesiFFi9F.Lpf9J.K3zuWB
Since this technique relies on adding frequencies to the signal (via noise) before driving all of it into a saturator, the range and amplitude of those frequencies makes all the difference. Mess with the filters, and try tweaking the max values in the slider callback to see how much the shape of the sound changes.
Faust can handle it, but I'm not aware of any demo or resource covering this kind of routing. It has noise generators, envelope followers and oscillators, but you'd need to script the signal chain and roll your own saturator (or just use a SNEX shaper after the Faust node). I'm still green when it comes to Faust and the topology, but I'd recommend checking out Faust projects on GitHub to see how similar effects are structured.
@FatMitchell What's your path looking like so far? I got pretty close in Live with a white noise layer (eq'd/ bandpassed to taste) + a soft/hard clipper, with the noise volume & clipper shape mapped to one knob.
You can do it in scriptnode with a noise osc layer + soft/hard clipper (the saturation snippet from the new browser should work for this).
Ableton's manual mentions
Noise Injection applies stereo noise followed by smooth distortion to the input signal.
I think a container.multi with a noise osc for each channel, followed by the saturation should reproduce the stereo effect. If you stick with a noise sample just make sure to add a short delay to one of them.
Re: Erosion, based on Ableton's description it sounds like a whole different beast, but probably doable in scriptnode.
The Erosion effect degrades the input signal by modulating a short delay with filtered noise or a sine wave. This adds noisy artifacts or aliasing/downsampling-like distortions that sound very ”digital.”
Idk how dependent this technique is on the delay algorithm, but scriptnode and faust have plenty of options, and they can all be modulated by an oscillator set to sine or noise.
The Frequency control determines the color, or quality, of the distortion. If the Mode control is set to Noise, this works in conjunction with the Width control, which defines the noise bandwidth. Lower values lead to more selective distortion frequencies, while higher values affect the entire input signal. Width has no effect in Sine Mode.
Add a bandpass filter and when the sine osc is active, disable the user's width/resonance control and set a static value.
Noise and Sine use a single modulation generator. However, Wide Noise has independent noise generators for the left and right channels, which creates a subtle stereo enhancement.
So two noise oscillators in a container.multi = Wide Noise mode.
@d-healey said in Slot FX Broken?:
Appears to be related to the new dispatch system, I tried disabling the new system and reenabling the old one (by changing the flags) but then HISE won't compile - so that needs fixing too (or removing).
Thanks, I hadn't found that flag yet. The bugs started with the Nov 10 commits (not sure which one, compiling gets spotty there), which makes sense given the dispatcher changes. The effect slot crash points to
.../hi_tools/hi_dispatch/02_events/Source.h:118
Unfortunately the swap bug didn't trigger any crashes or meaningful changes in debug
The issues seem to have been on the develop branch since November/December.
Just want to confirm it's not a rogue file or something on my end before submitting an issue on GitHub
@Lindon it's here, just lost in the fold again.
This is the problematic commit. After noting the changed source files, I grabbed them all from a prior commit and placed them into a February build. Everything works/compiles fine, so if you need any new features besides 24db filter curves that could be a temporary solution.