@David-Healey Ah yes ok this makes sense thanks so much
Posts
-
RE: CLANG errors on Plugin exportposted in General Questions
-
RE: CLANG errors on Plugin exportposted in General Questions
@David-Healey SO jsut so I can check I've got this right...
Go into export and export pooled files to binary resource.
Then at this point do I delete the audio files int the audio files folder and replace with the .dat before I compile? or leave everything where it is?
-
RE: CLANG errors on Plugin exportposted in General Questions
@David-Healey ah ok so essentially revert to having a sampler instead, or audio wave form and let users load in the audio or their own audio also?
If that second option is the case, using a preset browser can users save the presets witht he adio they've uploaded priiding the fodler is kept consistent?
-
RE: CLANG errors on Plugin exportposted in General Questions
@David-Healey Odd so I started doing that and each time nothing worked. Then I switched to removing audio files out of the folder. If I go over 20 audio files to embed thats whats causes the clang error.
So I wonder what the work arounds are to having large amounts of embedded audio files, in this current project there are 154 audio files that are used in this plugin.
-
RE: CLANG errors on Plugin exportposted in General Questions
@David-Healey SO rolled back as far as I can on this machine same errors. Its odd as other plugins exporting fine.
This one relies on audio loop players and embedded audio files is this another possible cause of the issue?
Thanks
-
RE: CLANG errors on Plugin exportposted in General Questions
@David-Healey Thanks will try that next
-
CLANG errors on Plugin exportposted in General Questions
Morning all
For the first time in a few projects I've an error on the mac side of compiling a vst instrument and wondered if anyone had any info/pointers as to what is the issue:
[ARCHIVE 0 - Shared Code] Compiling PresetData.cpp
clang: error: unable to execute command: Killed: 9
clang: error: clang frontend command failed due to signal (use -v to see invocation)I'm on a silicon mac Sequoia15.7.4 running the latest commit xcode 16.4
Windows side absolutely nice issue when compiling the vst
-
RE: Odd complied behavior of VST3 in DAWposted in Newbie League
@dannytaurus so just to update on this it was clearly a UI issue as all sound function were working, so after going through part by part it is filter displays that trigger this behavior for me when using more than 1 sampler in a project at this time.
-
RE: XY Pad with Optional Motion + Speed Control (HISE Script)posted in Scripting
@xm4ddy Thanks for this I will have to drop it in and see how it works. Plenty to learn still!
-
XY Pad with Optional Motion + Speed Control (HISE Script)posted in Scripting
Hey everyone,
After my question yesterday I wanted to share a the script I’ve been working on. Would love to hear thoughts on updates as to whether this is the most sensible approach. Particular mention should go to @David-Healey whose original XY Pad videos sent me down the rabbit whole with this and did a lot of the heavy lifting!
Overall it’s an XY Pad that supports:
- Manual user control via mouse or XY knobs
- Optional motion driven by a simple sine-wave “LFO”
- Adjustable motion speed
- Fully modular and easy to extend
The idea is that you can move the XY pad automatically, but still allow the user to take manual control at any time.
Features
- btnMotion: toggle automatic motion on/off
- knbMotionSpeed: adjust the speed of the motion
- Motion is applied as a small offset on top of the manual X/Y position
- Gains are mapped from the XY pad to two gain modules, with scaling
How it works
- baseX/baseY store the manual (user) position
- lfoX/lfoY store motion offsets generated by the LFO
- updateXY() combines base + motion values and clamps them 0–1
- LFO speed is multiplied by motionSpeed for easy adjustment
/// =============================== /// XY PAD STATE /// =============================== // Manual (user) position reg baseX = 0.5; reg baseY = 0.5; // Motion offsets reg lfoX = 0.0; reg lfoY = 0.0; // Motion enable reg motionEnabled = false; /// Speed reg motionSpeed = 1.0; /// =============================== /// COMPONENTS /// =============================== const var xypad = Content.getComponent("xypad"); const var btnMotion = Content.getComponent("btnMotion"); const var knbMotionSpeed = Content.getComponent("knbMotionSpeed"); const SIZE = 10; /// =============================== /// GAINS /// =============================== const gains1 = [ Synth.getEffect("Simple Gain1"), Synth.getEffect("Simple Gain2") ]; /// =============================== /// XY PAD CORE CALLBACK /// =============================== xypad.setControlCallback(onxypadControl); inline function onxypadControl(component, value) { local x = component.data.x; local y = component.data.y; local gainX = -50 + (65 * x); local gainY = -50 + (65 * (1 - y)); gains1[0].setAttribute(gains1[0].GainValue, gainX); gains1[1].setAttribute(gains1[1].GainValue, gainY); knbxy[0].setValue(x); knbxy[1].setValue(y); component.repaint(); } /// =============================== /// PAINT ROUTINE /// =============================== xypad.setPaintRoutine(function(g) { g.fillAll(this.get("bgColour")); var x = Math.range(this.data.x * this.getWidth(), 0, this.getWidth() - SIZE); var y = Math.range(this.data.y * this.getHeight(), 0, this.getHeight() - SIZE); g.setColour(this.get("itemColour")); g.fillEllipse([x, y, SIZE, SIZE]); }); /// =============================== /// CENTRAL XY UPDATE /// =============================== inline function updateXY() { local modX = motionEnabled ? lfoX : 0.0; local modY = motionEnabled ? lfoY : 0.0; xypad.data.x = Math.range(baseX + modX, 0, 1); xypad.data.y = Math.range(baseY + modY, 0, 1); xypad.changed(); } /// =============================== /// MOUSE INPUT /// =============================== xypad.setMouseCallback(function(event) { if (event.clicked || event.drag) { baseX = Math.range(event.x / this.getWidth(), 0, 1); baseY = Math.range(event.y / this.getHeight(), 0, 1); updateXY(); } }); /// =============================== /// XY KNOBS /// =============================== const knbxy = []; for (i = 0; i < 2; i++) { knbxy.push(Content.getComponent("knbxy" + i)); knbxy[i].setControlCallback(onknbxyControl); } inline function onknbxyControl(component, value) { baseX = knbxy[0].getValue(); baseY = knbxy[1].getValue(); updateXY(); } /// =============================== /// MOTION BUTTON /// =============================== inline function onbtnMotionControl(component, value) { motionEnabled = value; }; Content.getComponent("btnMotion").setControlCallback(onbtnMotionControl); /// =============================== /// SPEED CONTROL /// =============================== inline function onknbMotionSpeedControl(component, value) { motionSpeed = value; }; Content.getComponent("knbMotionSpeed").setControlCallback(onknbMotionSpeedControl); /// =============================== /// LFO ENGINE /// =============================== const LFO_RATE_X = 0.35; const LFO_RATE_Y = 0.25; const LFO_DEPTH = 0.25; reg phaseX = 0.0; reg phaseY = 0.0; xypad.startTimer(30); xypad.setTimerCallback(function() { phaseX += LFO_RATE_X * motionSpeed * 0.03; phaseY += LFO_RATE_Y * motionSpeed * 0.03; if (phaseX > 1.0) phaseX -= 1.0; if (phaseY > 1.0) phaseY -= 1.0; var waveX = Math.sin(phaseX * Math.PI * 2); var waveY = Math.sin(phaseY * Math.PI * 2); lfoX = waveX * LFO_DEPTH * 0.5; lfoY = waveY * LFO_DEPTH * 0.5; updateXY(); }); -
RE: XY Pad Movement?posted in General Questions
@David-Healey no worries if I know its possible will find out!
-
XY Pad Movement?posted in General Questions
If I wanted the knobs that control X & Y (independently) to randomly cycle over a constant period of time allowing similar to that of say an LFO Mod is it possible to do this and how would be best to approach doing this?
Thanks
-
RE: Odd complied behavior of VST3 in DAWposted in Newbie League
@dannytaurus Yes both Logic and cubase, I will download reaper to see, yes started with a clean build each time
-
RE: Odd complied behavior of VST3 in DAWposted in Newbie League
@David-Healey no deliberately not updated either cubase or logic
-
RE: Odd complied behavior of VST3 in DAWposted in Newbie League
@JamesC No I've deliberately not done that as not really at a point it would be sensible to do so so not touched that side of things at all.
-
Odd complied behavior of VST3 in DAWposted in Newbie League
Evening
Hope everyone is well! An odd one here I've a compiled project which has been working fine and tested made some adjustments and since that when the interface is open for plugin in DAW the rest of DAW does not function but is frozen until plugin interface is closed.
Initially I thought changes we made were the cause of this so I rolled back but am now having the same issue on the older version also.
Has anyone come across this and know what it might be that is triggering this kind of behavior?
Thanks
-
RE: XY Pad Gain Scaling...posted in Scripting
@JamesC So for those interested this is how I solved it in the end with a bit of AI help:
inline function onxypadControl(component, value) { local x = component.data.x; local y = component.data.y; local gainX = -40 + (60 * x); local gainY = -40 + (60 * (1 - y)); gains1[0].setAttribute(gains1[0].GainValue, gainX); gains1[1].setAttribute(gains1[1].GainValue, gainY); gains2[0].setAttribute(gains2[0].GainValue, gainX); gains2[1].setAttribute(gains2[1].GainValue, gainY); knbxy[0].setValue(x); knbxy[1].setValue(y); component.repaint(); } -
XY Pad Gain Scaling...posted in Scripting
Morning all hope you are all enjoying the holidays still.
I've got an XY Pad in a project that in itself is working nicely doing what it should and has a knob assigned to X axis and one to Y axis as you would expect, I'm wanting to control the gain on 4 simple gains 2 on the X 2 on the Y which again I've got working as it should, I'm just not sure to the maths for the values currently I've got it set to this:
inline function onxypadControl(component, value) { local x = component.data.x; local y = component.data.y; gains1[0].setAttribute(gains1[0].GainValue, 36 * x); gains1[1].setAttribute(gains1[1].GainValue, 36 - 36 * y); gains2[0].setAttribute(gains2[0].GainValue, 36 * x); gains2[1].setAttribute(gains2[1].GainValue, 36 - 36 * y); knbxy[0].setValue(x); knbxy[1].setValue(y); component.repaint(); }Which works to set the gain between 0 and 36. Now 36db is going to be way too loud for whats going on here so yes I could reduce that but also gain running right down to -100 whats the easiest way for me be able to include some of that in the range essentially looking at -30 to 20 or some such or in other words almost barely noticeable to packs some punch if you want.
-
RE: Custom Display panel questions...posted in Scripting
@David-Healey I'm not sure I've tried to get it to print some info to console for me but stuck at this point. Here is the full code if that helps shed any further light:
///Convo Reverb const var ConvolutionReverb1 = Synth.getAudioSampleProcessor("Convolution Reverb1"); const var irs = Engine.loadAudioFilesIntoPool(); const var rvbnextbtn = Content.getComponent("rvbnextbtn"); const var rvbprevbtn = Content.getComponent("rvbprevbtn"); // Track current IR var currentIRIndex = 0; ConvolutionReverb1.setFile(irs[currentIRIndex]); inline function onrvbnextbtnControl(component, value) { if (value) { currentIRIndex++; if (currentIRIndex >= irs.length) currentIRIndex = 0; ConvolutionReverb1.setFile(irs[currentIRIndex]); } } inline function onrvbprevbtnControl(component, value) { if (value) { currentIRIndex--; if (currentIRIndex < 0) currentIRIndex = irs.length - 1; ConvolutionReverb1.setFile(irs[currentIRIndex]); } } rvbnextbtn.setControlCallback(onrvbnextbtnControl); rvbprevbtn.setControlCallback(onrvbprevbtnControl); const lafrvbnextbtn = Content.createLocalLookAndFeel(); rvbnextbtn.setLocalLookAndFeel(lafrvbnextbtn); lafrvbnextbtn.registerFunction("drawToggleButton", function(g, obj) { var c = obj.area; g.setFont("phosphor", 30); g.setColour(obj.textColour); g.drawAlignedText("\ue02e", c, "centred"); }); const lafrvbprevbtn = Content.createLocalLookAndFeel(); rvbprevbtn.setLocalLookAndFeel(lafrvbprevbtn); lafrvbprevbtn.registerFunction("drawToggleButton", function(g, obj) { var c = obj.area; g.setFont("phosphor", 30); g.setColour(obj.textColour); g.drawAlignedText("\ue05a", c, "centred"); }); const var rvbfilename = Content.getComponent("rvbfilename"); inline function onrvbfilenameControl(component, value) { local currentReverb = ConvolutionReverb1.getCurrentlyLoadedFile(); if (currentReverb == "") { rvbfilename.set("text", currentReverb); } else { rvbfilename.set("text", currentReverb); } rvbfilename.repaint(); }; Content.getComponent("rvbfilename").setControlCallback(onrvbfilenameControl); rvbfilename.setPaintRoutine(function(g) { var a = this.getLocalBounds(0); var cornerRadius = 4; // Text color if (isContainerOpen || isHovered) { g.setColour(0xFFFFFFFF); } else { g.setColour(0xFFFFFFFF); } // IR text var textArea = [a[0], a[1], a[2], a[3]]; g.setFont("font", 20); if (currentReverb == "") { g.drawAlignedText("Default", textArea, "centred"); } else { g.drawAlignedText(currentReverb, textArea, "centred"); } });