Preset Crashes DAW
-
@trillbilly refer to the example project that @Christoph-Hart made and see if they are
-
@DanH Duh. Looks like the "SampleDropper" panel is SaveInPreset active via scripting while the SampleLoader combobox is not. This is the same way I have it in my project, so that rules that out.
I dont see any issues within the .preset files other than that. I have removed chunks at a time and it only works by removing the "SampleDropper" saved properties.
I can then go in and save the preset and use as normal. But once I close HISE I fear it will re-open with the same issue.
It even crashes HISE now as well, not just the DAW.
-
@trillbilly I would build a debug version of the plugin and make it crash. Then you can find the line of code in HISE that is failing.
-
@trillbilly have you tried with different audio files?
-
@Dan-Korneff my first real debugging, yes lol. I'll give this a shot and see what it comes back with.
@DanH yes, I've tried different wav files and the saved presets all do the same thing. If it has no audio file, all other knobs/button recall just fine.
-
@trillbilly here's a quick video I made on the general process:
https://forum.hise.audio/topic/6760/big-problems-with-a-little-plugin/19?_=1673301032810 -
@Dan-Korneff Thanks! Ill do this today hopefully
-
@Dan-Korneff Ok so I think I figured this out on Windows with VS. I have Ableton connected to VS and launches upon building the debug. I love my plugin in Ableton and immediately get a "Ableton Live 10 Suite.exe has triggered a breakpoint" message.
jassert(filter != nullptr); //This line (112) is where it triggers the breakpoint. if (filter != nullptr) { switch (parameter) { case BandParameter::Gain: filter->setGain(Decibels::decibelsToGain(newValue)); break; case BandParameter::Freq: filter->setFrequency(newValue); break; case BandParameter::Q: filter->setQ(newValue); break; case BandParameter::Type: filter->setType((int)newValue); break; case BandParameter::Enabled:filter->setEnabled(newValue >= 0.5f); break; case numBandParameters: default: break; } } else { debugError(this, "Invalid attribute index: " + String(index));
In the Callstack, this is the only bit that has an arrow next to it
> Mesosphere Debug.vst3!hise::CurveEq::setInternalAttribute(int index, float newValue) Line 112 C++
How do I move forward with the debugging of what looks to be a Parametric EQ? I do have 2 of them and both are Draggable Filter Panels that can be saved in preset.
-
@trillbilly just taking a shot here but check your script in HISE, maybe you're addressing an eq parameter which doesn't exist...?
-
@Matt_SF That was my initial thought but I couldnt see anything.
The only EQs I have are for a Dry and Wet Filter. Both are also Draggable Filter Panels. Both the "FilterTile" and "WetFilterTile" have the correct ProcessorID called in the Property Settings. Both Draggable Filter Panels show and seem to work just fine.
I then use this code to add the to user preset.
//DRAGGABLE EQ SAVE IN PRESETS //Filter const var FilterEQ = Synth.getEffect("FilterEQ"); Engine.addModuleStateToUserPreset("FilterEQ"); //Wet Filter const var WetFilter = Synth.getEffect("WetFilter"); Engine.addModuleStateToUserPreset("WetFilter");
The only other code I can think of that calls for anything to do with an EQ is a "Blackout" img that appears over the effect if it is powered off. This also seems to be coded correctly and working fine.
Here is how I have this scripted
//POWER BLACKOUT //FILTER1 - DRY const var BlackoutImage3 = Content.getComponent("BlackoutImage3"); inline function onFilterPowerbtnControl(component, value) { BlackoutImage3.showControl(!value); Content.getComponent("FilterPowerbtn").setValue(value); FilterEQ.setAttribute(FilterEQ.setBypassed(!value), value); Content.getComponent("FilterPowerbtn").setValue(value); }; Content.getComponent("FilterPowerbtn").setControlCallback(onFilterPowerbtnControl);
-
-
@Lindon you were quicker than me
-
-
@Lindon What would be better way for me to script something like this? I've got this on every effect module lol.
-
@trillbilly what is the attribute you are trying to change?
-
@Lindon Just to cover the unused effect modules with a "Blackout" image so they have the appearance of being "Turned Off".
Power Off = Blackout Image ON, covers Effect Panel
Power On = Blackout Image OFF, revealing effect knobs/sliders. -
@trillbilly so what are these three lines for then?
Content.getComponent("FilterPowerbtn").setValue(value); FilterEQ.setAttribute(FilterEQ.setBypassed(!value), value); Content.getComponent("FilterPowerbtn").setValue(value);
especially as the first and third are the same...
if you just want to bypass an effect all you need say is:
FilterEQ.setBypassed(1 - value);
-
-
@trillbilly well fix your EQ code first - and then remove your sample loader...and try again.
-
Content.getComponent("FilterPowerbtn").setValue(value); //power button of the effect, how else would "Blackout" image know to be ON or OFF? FilterEQ.setAttribute(FilterEQ.setBypassed(!value), value); //this is to bypass the effect Content.getComponent("FilterPowerbtn").setValue(value); //this is a mistake, I was thinking incorrectly.