@darkInteger I've never tried but I don't see why it wouldn't be possible. Are they failing to build for you?
Posts made by HISEnberg
-
RE: Can I use RNBO synth patches in HISE?
-
RE: Quick ScriptNode Tutorial
@clevername27 I think @d-healey pretty well covers almost all of this in this video https://www.youtube.com/watch?v=24vH-oxX1m4
-
RE: Introducing: HISESnippet Browser
@Dominik-Mayer Awesome this is such a big time saver!!!
-
RE: Distortion
@pelle There are plenty of options in scriptnode already using the math operators (like tanh and clip), as well as plenty of faust code for different waveshapers like soft clip and chebyshev.
-
RE: Reducing LAF scripting redundancy
@d-healey & @Lindon Thank you very much, both of your responses have really helped me explore the possibilities here. I am pleased to know I can use the text property in this way, and will definitley explore this more in future projects. A lot of this particularly UI is already laid out so I am settling for bypassing any text that is not the exception cases, and employing it for any cases that call for customized value displays.
Example based on Lindon's edits:
const tempos = ["1/1", "1/2D", "1/2", "1/2T", "1/4D", "1/4", "1/4T", "1/8D", "1/8", "1/8T", "1/16D", "1/16", "1/16T", "1/32D", "1/32", "1/32T", "1/64D", "1/64", "1/64T"]; const filterModeLabels = ["Lowpass", "Highpass", "Bandpass"]; const LAF_StandardKnob = Content.createLocalLookAndFeel(); LAF_StandardKnob.registerFunction("drawRotarySlider", function(Style,Widget) //... if (Widget.text.contains("FilterType")) { // For FilterType knob, display the corresponding label displayLabel = filterModeLabels[parseInt(Widget.value)]; //For TempoSync, display tempo sync values }else if (Widget.text.contains("TempoSync")){ displayLabel = tempos[parseInt(Widget.value)]; } else { // For all other knobs, display the value displayLabel = Engine.doubleToString(KnobValue, 2) + Widget.suffix; } Style.drawAlignedText(displayLabel, [Area[STARTX] + LabelOffset, Area[HEIGHT]-Area [HEIGHT] +6, Area [HEIGHT]+LabelOffset, Area[HEIGHT]], "left"); //...
-
Reducing LAF scripting redundancy
Not sure why this is causing me such a headache, but I have a LAF for my knobs with display labels. In most cases I want the display labels to just show the values, but in some cases I want it to make exceptions to display a specific list (LPF, HPF, BPF, or for TempoSync 1/1, 1/2, etc.)
I have figured out how to display the labels I want fairly easily, for example:
// Labels for Filter Mode const filterModeLabels = ["Lowpass", "Highpass", "Bandpass"]; //... var displayLabel = filterModeLabels[parseInt(Widget.value)]; Style.drawAlignedText(displayLabel, [Area[STARTX] + LabelOffset, Area[HEIGHT]-Area [HEIGHT] +6, Area [HEIGHT]+LabelOffset, Area[HEIGHT]], "left");
I cannot figure out how to make an exception in my LAF code for each specific use case. So far I have just been copying my entire LAF and creating a new one for each use case (creating a lot of redundancy). Wondering if someone can help me out. Here is a snippet:
HiseSnippet 1954.3oc6Ys0aiaiEVJSzzZ2KnEn8cB+Pg7DGGKmjoYf2sMwI1SLhSbZr6zY2.iALRT1DQlzPhdl31NE8mx9KXedeb+G09On8PcW9RRp6UTLxHFlmqe7vCO7Dpyc4lDOOtqhZtdSGSTTeWstSYhgGNDSYJsNBnqcBieUarsR8oiwddDKEU0G7TIa0bqq3+7iedcrClYRRHon7LN0jzlNhJRnd99mPcbZhsH8niRI8N62xjyNj6vm.P4AZUTFiMuFOfbFVJ1ZZJpOrgEUvc6JvBhGHSct0ztC4uhEH+yndzqbHxAFJcACEPV4vgTGqyilldJJpqedxj9AAS5OR6TpEMldxj+C7YfRzHcLPcsaCRF+BfjZJHsd.j9PstltzwhDNR77NZsXBhqMFB0ogRfrJq8u+XsC4fDLQ4Q3qIMcgAwZn+3JUJgfuJVKedHb6IPc6cvE8dN5ehpTKMk+EPwHhxW05ndGCDpFQ33Fsd5w8.JaGamC6bV2dun6De+7TWrEEfPO9XokuoYyJ9O0tMgqyEB9nP42Yucpua0rxWm6ZQbCRQBE6IaCedRVwNh5ggftUKlE0DCqNozv1dW7tWsq4h0HDPY7fwSLvFVKV95S.Dy5QtQjET6.evyFYFgcbBTnIrjzk90DYHFlh42ZqurEJT3WhcQxcaF.yn0wADv9iFyYv.8B9bKTr1LJT8VUnpTAoml8AcxYcpiZ2oyInCN6HTyFMZilWp7Qyk1Gz7EPxNyB6ZIsaJmZ5RfMAs4lXm1b90GvrZRHN5w.UpZSpCjIdJ2hbuTL+rtqrKY.0CLQyILSAkyzKX4he0EbA1cZWGJjdTnDxNhYWwTGRouhZAAjh4+l74jAqC.2AdOfZYLLpV.CoCNlPGLT.rkRcYPZd+T7AsDCmmc9DIBygB8xkFUKgj+4ONRiMqtSoLl.HzWt9jyGwk8HhnMEPDyQ+xPvREjQAYZFyXws.W.6rmStpKPtzNtODkCcpM3oFNNzwdD8YlHxkhbasUa7UDmfYp+O6XaCHc9nQ7jH.C5gnRDuOoXZgj6FzKz4loCHLTctiUAYDqXMTjLxU3CbnCXDK4VszlqD5ReeGTDqOZiz.alPbl3.Zy8lIxrwR0reITAGhs.1BgfmkA8KHCl3fk4eFURg9jvPkm2r4daCe9zhoxndF1YBIIe7kxggrgMHP8KBC9yJRrFrATFDS3SfBP83cEtT1.8XCUpZQHHDYLuI11zapsr.4b1e0Cma73UNbJ+S9UPkr4pKbNVLTOJf4ixKvrAohXiv2f1Ld.kUK1XdPUAQbRZ0x6jvB6Z1aH07ZFbvprpc4JUyvLZetQ4JfwqBe+nL5DhGByJ19al1caDpSZZOJyZ7YbW3DA3T.qDGCL.CUnPBkCbMicPkxFx8gTajNROY9h9GnJEQexmjPCBHeljVQz2LSL.lm6UC8ZvJmTFaYAVW+xLghsPUArG60Rn6jaPjZirBtYhPOp58TLHuHSHbSezVJULdCeJ9oMwAnwP5QXs1Sjm6UmOgY4omp5dTdmTu41TFGztZPboIooS1v3m+cRoXGUJ8IGW52YT+YRNBKWdJehGA04kDWeSJW2BUcHGHh91uMxTlNflDKX8JetDumpxAzTwgFvGnrXtzhrh.DENKec9ncfvY9ni.igDCIH+7SDMp8oxohHtbYmt5wqIPEiEDpkIJYgQJF8yDhu8SIRjSd5zEx0Vh0EDSnkfAND8k46j5AY37HzlPBjwRQ1RUqR4pOY2EqlO2JaWZoZVYWHwdaYAL3yqC6BKntpGxl6hB5IBIaJJrSI63tjBEC5inPa9qjM6CGuT3XnGkneWGZNx+28CaWJoEqeMMKg98rYoeS5U5u1sJg9itWon5gVTuwN3o99D71roRWNF65Qf+eP8zmEUres+V2r0xlboCV+o06yaZ84Ms972pVe9qeyNuoWlek8xDzGi+MQIm0yc2MyduMf392B0RENoqkh0h5HAwYmwEjNLc+6tIOr.NKKa6ExSVF0k63PbWHa4EO6daJpylL5JhaofNgiETQc8rW26CueW2qYPU8TBxYsXTQmwjvwMgixkWiq72ye4vJgGKnnntVHBAQE9WR76GdIwA8yoPAi7V9WWughO3Cuf8u+i9u+vmqbuUtZFkCd9xVGgEX4UUGBG.hiItBpLRndD4kTSRvEWmS6Hh20B9Xe7FdOjJpu8ch3aRbn09SiG78ew9Q0n.ZO7mfGI4jV2jTU9te5+Io9JY0VEUM02WUQYneGpxQ+GE+3XLXxemQfDv7+uJEX1e79wtX84bwhwzhPObTUpv69Pe5ik2ILXHM3jWEk4ee.efFr+.55Qj80SHeOLgLfj3LuS.489y7nhooeOM+BdmEUt02Yw8Ehen14Tg4vEiw0V.Fk44+Nfwv2zy6o0v1FJ6l.v00Z97U805bGtGJyKnrAmhEtTX8V6rIi5BIBlDv6LFzPtLwYMYpYv3JxwxHPW3XI+Ax7kPlFxwpgLMhXBYRlt7WXFr2V9tjdaeJ.lX9u5rbZmJGiLleS8HpE8EllYM0bJVcUUb6UUwcVUE2cUU7wqphe5pp3d2shx273ASD7QAaaTTN87F9EgUUav7eCTxrUkeF7bR6sA
-
RE: Group Project: Reverse Delay
@WaterSpoon Congrats on finding a solution! Very similar approach to the one I took. You can embed the RNBO patch in scriptnode as well for any further adjustments.
I know there are some new features like time stretch and core.record in scriptnode as well, which means storing buffers. I.e. once these are fully functioning things like a reverse delay should be possible.
Just fyi, buffers can communicate in RNBO and Gen~, so you just need to store a copy in both and your good to go.
-
RE: NEATBrain Writeup
@iamlamprey Fantastic work, NEATBrain sounds very promising!
-
RE: Group Project: Reverse Delay
@WaterSpoon I have been working on a reverse delay in RNBO/Gen that I am pretty happy with. Haven't finished working out the Scriptnode network yet (for tempo syncing, etc.) but once its done I would be happy to share.
-
RE: Recorder Demo - trying to compile
When I remove the SNEX object it compiles, but loading the Hardcoded FX crashes HISE.
-
RE: Recorder Demo - trying to compile
@Lindon @ulrik @Christoph-Hart Any luck with compiling the dll? I am experiencing the same error.
-
RE: Scriptnode Cloning
@HISEnberg Ah I believe it just means that the number of clones (voices) needs to be the first macro parameter in the network.
-
RE: Scriptnode Cloning
@ulrik I am getting the same error, did you ever find out what this meant?
-
RE: Mac Installer Advice
@FatMitchell Yea I managed to figure it out eventually. The problem really is that if you don't incorporate certificates and notarize your product, then it is flagged as malware making it difficult/seemingly risky for the customer to install.
-
RE: Faust error when compiling dll
@fazzitog What version of RNBO are you working with?
-
RE: Update Sliders from JSON
@HISEnberg Also just to clarify the issue, you can see that the slider values are not updating
-
RE: Update Sliders from JSON
@d-healey Thanks, I will try this. I was sticking to var since I am updating the sliders dynamically, but I could see this leading to some of the issues I am experiencing...
-
Update Sliders from JSON
HiseSnippet 1532.3oc6Y0raabCDlqjXhkhSZRQRaOtHnsvAHHvxIMs.EnVwVVoBw+HX4FmdJfZ2QVLlK4BtbcrZQA5wdqOB8UpOB8QHuAsj6tRhqjrirfc9qQGD.mgb3LeC47C2VRgGDEIjHmx60ODPNKha2mq5sdOBkiZVG4r.dOHR87pn05GRhh.ejiSwGa35TtDJ42qVcMBiv8fQjPnmJndvlz.pZD0V0dBkwZP7g8nAVy9A0Z5I3qKXhXslTDuLJj3cH4.XahYZEvHmKsgOUIjsUDEDgbJslvue6dhWxSm+SoQzNLvLnJpsVPojaHX9FM1PEsdOJyu0.KNBoEZqQ1ewT6+l3sn9zgzGgCWOgg6nUXiGNExqdEyodUsUuksTuonRNVpToTU5F31dRZnZDGi9bEbStBjcIZX2VURmKpvm4fWWnmAWcu.xgPCodvvUrzCWd465p+6NeeEJ2iE6CKc65fGiHIJpfGcuWDcaadazsK3ohdjzqG8HXbtqKB5H5HNNit9W2XtmQPtB91BErCeo6T4WqTtxuUwcbVc6NUdFkWJXLPNU1lCPxSagKwiC5.x65dDgECCmnFUy6pvmrqx9jjWJVZMQAuImp1ID3mz4KTlCP6VKkoU5opRbpWOyol.cqINFQ8MW9VOnSJTWEkn2V2npgFWFWKSFsYTePlHgqfeBuSKsWLXBAz7LJfUFS.0DmQAb+ILAD5mZVmnHly4YXiFuBAohZbEN0gizAMRO0WFWGhNTIB0WS0fTnfaPRmKMqv2wi12urVe6AADMOrSA8.pBBhLlwtvQfrSk5.iz232FteKNSPs0l8C1a1OWSAGqxlacY+8AExG5RhYpmNt2IRAgso+RN7Jf56yfVhHp4vctYG2sK8XyIuuBEoOTlHtVhvXMdcY7Z.S7RThgNRUnQsXwGP4I5LniDnQ7B11JN0VuZlstIoCvxL0M6vlzT+ZaSsdlodIbRrca4VdlNsYIX+oggWKACMNnFR.PmA3p1eNDtvXWsC2FXp8W0NiXfsp96jogAUvM.vuiNGVNbnzLco4DNKU6E0PSlaPmUR3GyHp7opL4myXX.B67Clb.bM.02N+84V9qYUEuAtEU40a55Xgoni5PFWD5XVV+qhSCaLRAKga7rKlT71a+BmPQWKlj6VOBjmKEdENyEd4T7hnPK76bEZ8w6ReHbWJW4xWNc+W.2F395czr0WKYf6fhBN4qRFgS3bfoqGMBT1LLRnI2GN11K2NPHT8n7Cx45KNy1U0yba.mfuOw9d6b9bWQrRi.aQTxjbqaGGzVGHwCxfxnAkYkMdYy3AHZxf+U+KiYUyXmLlUGvz970sRwgqf2mbDjDvLABtUx3tBYf6iAc.SC.cZd5+97On4NdJsJrmjviBEQPUaIOFuUr4UGTw77SOkTtYYLuFZyyZdKTa.wUrI1hvyIL83bRZKp0Y3+Y0M3DsitMnsF+ch7zFqA6rOqzJlEA6S8U8pZuvQjWwl7ORj9Z+hWtHMmZ9jpevz396A4SxETo7.crMMHjAavOR2xflhQG+TcqWI8nLfZ9qSaI3hvdBNMmidWPGE3fCfbmelpA8HkxTY7PJ2r1t.CHQfcSZapq8gH03DLmXw4T.1u.mpttlX.tu+VGPw+2TS8oe6SGB7cau3mi0ghWwMwU591wW9lHu9a3ZGxZz5SRJWZXuU1kPMuMb8pUmVsCuZ0oW6fNj3Ypgq4MAYoOlf7iAZuHZ3pvjXTkr2yJqkqEyF513Y4tJUH6KS37G3QOWenDBIRXOQKFo+RQDSsH6p0w651gI7Nz7.eS9F+gopvZlYrjWV7h44SAfOmpl3MRzrgeLg45QzQSV62svlB18zkXoafjDo.oalKrLtwwsYhwZXdaP8Rg7Py6Km9N4idSaqGlN2izZ8sCFPOeCBW2Pe3ikZIl0T7WWqDua6t9PYOBHdRwy8RuIYh.rPBEM1xS93rkwaYF6N4Grx7b7zm64kWTSrvUl2Ed+4cgOXdW32LuK7gy6B+14cge2qeglr9OJVIBRyggPa0Zij.KNNouLPxsdz+AX3TEFG
I have a project which will include ~20 effects, each with only 3-5 knobs. I plan to create 5 slots on the user interface and allow the user to select which effect goes where. I plan to eventually create a preset browser (or Combobox) which will allow the user to drop in the effect they desire in a specified slot on the user interface.
My idea is to simplify the process by creating panels on the UI with 3-5 knobs each on them. When the user selects a new effect, the sliders are updated according to the effect they selected.
I wanted to make it simple for this example, so currently I have one HardcodedMasterFx (FxSlot1) and a Combobox (CmbEffect1), with two networks (Delay and Reverb) to choose from. Currently, I am trying to update the sliders on my UI (KnbParam1 & KnbParam2) according to the networks loaded in FxSlot1.
My thinking was to create an archive of the necessary information (text, min, max, middlePosition,etc.) for the sliders in a JSON format in a separate script (EffectsArchive.js), and call the parameters when a new network is chosen in the Combobox.
So far some things seem to be working for me:
- The UI knobs are linked to the HardcodedMasterFx according to the index.
var currentEffect = FxSlot1.getCurrentEffect(); var effectName = CmbEffect1.getItemText(); var params = EffectParameters[effectName];//Effect Parameters is pulled from the varialbe in EffectsArchive.js var paramProperties = FxSlot1.getParameterProperties(); //Connect UI Knobs to Fx Slot inline function onKnbParam1Control(component, value) { if (currentEffect) { currentEffect.setAttribute(0, value); } } Content.getComponent("KnbParam1").setControlCallback(onKnbParam1Control); inline function onKnbParam2Control(component, value) { if (currentEffect) { currentEffect.setAttribute(1, value); } } Content.getComponent("KnbParam2").setControlCallback(onKnbParam2Control);
- The Combobox pulls up the correct effect:
//Assign Combobox to FxSlot1 inline function onCmbEffect1Control(component, value){ local effectName = component.getItemText(); FxSlot1.setEffect(effectName); currentEffect = FxSlot1.getCurrentEffect(); updateKnobsForEffect(effectName); } Content.getComponent("CmbEffect1").setControlCallback(onCmbEffect1Control);
- Then, as far as I can tell, the UI knobs (KnbParam1 & KnbParam2) should be updated according to the data pulled from the JSON.
//Update UI Knobs according to JSON function updateKnobsForEffect(effectName) { var params = EffectParameters[effectName]; Console.print("Updating knobs for: " + effectName); // Update KnbParam1 if (params && params.length > 0) { Console.print("First param text: " + params[0].text); var param1 = params[0]; Console.print("Setting KnbParam1 - Text: " + param1.text + ", Min: " + param1.min + ", Max: " + param1.max + ", Middle Position: " + param1.middlePosition); KnbParam1.set("text", param1.text); KnbParam1.set("min", param1.min); KnbParam1.set("max", param1.max); KnbParam1.set("middlePosition", param1.middlePosition); KnbParam1.set("mode", param1.mode); KnbParam1.set("stepSize", param1.stepSize); KnbParam1.set("suffix", param1.suffix); KnbParam1.setValue(param1.defaultValue); // Update KnbParam2 with the second parameter, if it exists if (params.length > 1) { var param2 = params[1]; Console.print("Setting KnbParam2 - Text: " + param2.text + ", Min: " + param2.min + ", Max: " + param2.max + ", Middle Position: " + param2.middlePosition); KnbParam2.set("text", param2.text); KnbParam2.set("min", param2.min); KnbParam2.set("max", param2.max); KnbParam2.set("middlePosition", param2.middlePosition); KnbParam2.set("mode", param2.mode); KnbParam2.set("stepSize", param2.stepSize); KnbParam2.set("suffix", param2.suffix); KnbParam2.setValue(param2.defaultValue); } } }
However, even though the right values are printed in the Console, I don't see these changes reflected on my UI. The knobs (KnbParams 1 & 2) remain in a range of 0.0 to 1.0 instead of updating). Have I missed something here?
In short, I am wondering if anyone can offer advice on how to tackle this operation: How to dynamically change sliders according to Effect Slots. More generally, is it even good practice to update UI components like sliders and buttons according to different elements in the ModuleTree? I can't foresee any issues with this and, as is the case here, it would certainly go a long way in reducing the amount of sliders and panels I need to add into my project. Any advice is appreciated if someone has experience with this.
-
RE: Inno Setup is Flagged as Trojan?
@Christoph-Hart I was tinkering around with this today, very exciting and can't wait for it to be incorporated in HISE!