Chasing logic/auval validation...
-
so I have a plugin that is failing auval.. the pertinent bit is probably this:
Parameter ID:2135008121 Name: Gate2-Depth Parameter Type: Generic Values: Minimum = 0.0, Default = 1.0, Maximum = 1.0 Flags: Values Have Strings, High Resolution, Can Ramp, Readable, Writable -parameter PASS ParameterID=154368669, Scope=0, Element=0: Saved Value = 0.468254, Current Value 0.000000 ERROR: Parameter values are different since last set - probable cause: a Meta Param Flag is NOT set on a parameter that will change values of other parameters. Cannot perform Parameter Value check across initialization and reset
as you can see auval kindly tells me which parameter has passed (like Gate2-Depth in the lines above the error...) but unkindly doenst tell me the name of the parameter that fails....it gives me the ID instead. Does anyone know a way to get the name for this ID? I've been at this all day - it started out at 3 errors and now I'm down to 1 by trial and error...and I'm losing the will to live...
-
@Lindon I don't know how to get the name or where the ID comes from. Does that output list the parameters in the order they are declared in HISE?
-
@d-healey no it doesnt -----
-
@lindon Did you ever figure this out? I have 5 parameters that are failing due to Meta flag not being set.
Trial and error is not fun -
@dustbro happend to me too. It can be easy... Depending on the size of your project
You want to set to 'meta parameters' the controls which act on others : "when you move this knob, then change the value of this knob"
An example would be if you have 2 wetKnobs for the L & R channels of an effect and you've somehow linked them with a function (tell me if i'm not being clear)You 'just' have to find these controls and set them to 'meta'
-
@matt_sf this could be done programatically - Iterate all components and call setValue with a random value, then check if the value of the other components stay the same.
-
@dustbro yes I did , but you are not going to like how I did it....
-
I went through every widget in my project and set the isPluginParameter to false, and also removed pluginParmeterName
-
ran auval - got a "pass"
-
Then I went back through them assigning unique names and turning on isPluginParmater as needed
The thing I learned from this was....NEVER set up this stuff until EVERYTHING is built - clearly if you ctrl-D copy a widget it takes its isPlugin and pluginParameterName with it, and at that point auval will start to fail....
One "nice" feature would be if ctrl-D DIDNT take these values from its progenitor...
-
-
I'm getting some parameter warnings with auval, but it appears to be passing the test. The default and retrieved values seem to match. Fake news? Or should I worry?
-------------------------------------------------- PUBLISHED PARAMETER INFO: # # # 48 Global Scope Parameters: WARNING: retrievedValue = 0.400000 (was 0.400000), Parameter did not retain default value when set WARNING: retrievedValue = 1.000000 (was 1.000000), Parameter did not retain maximum value when set WARNING: retrievedValue = 0.495000 (was 0.495000), Parameter did not retain default value when set WARNING: retrievedValue = 0.400000 (was 0.400000), Parameter did not retain default value when set WARNING: retrievedValue = 1.000000 (was 1.000000), Parameter did not retain maximum value when set WARNING: retrievedValue = 0.398689 (was 0.398689), Parameter did not retain default value when set WARNING: retrievedValue = 0.400000 (was 0.400000), Parameter did not retain default value when set WARNING: retrievedValue = 0.400000 (was 0.400000), Parameter did not retain default value when set * * PASS
Logic is also reporting the Plugin Version number incorrectly.
Component Version: 0.0.0 (0x0)
-
@dustbro - are there meta params? if so you'll need to set them as such in HISE
-
@lindon These don't appear to be meta parameters. I've double checked those.
-
@dustbro said in Chasing logic/auval validation...:
@lindon These don't appear to be meta parameters. I've double checked those.
well sadly isnt very user friendly - and it wont tell you which params its having problems with - only that its having problems....its a pita to be frank.
-
@Lindon definitely a PITA.
@Christoph-Hart I'm getting an instant crash in Logic when trying to automate parameters on a scriptnode plugin. What's the proper way to attach Logic to xcode for debugging? -
@dustbro Product -> Scheme -> Edit Scheme -> Debug -> Executable -> Logic.app
-
@christoph-hart Thanks!
I'm getting a break point instantly when inserting the plugin.JUCE Assertion failure in juce_File.cpp:174
// Mac or Linux.. // Yes, I know it's legal for a unix pathname to contain a backslash, but this assertion is here // to catch anyone who's trying to run code that was written on Windows with hard-coded path names. // If that's why you've ended up here, use File::getChildFile() to build your paths instead. jassert ((! p.containsChar ('\\')) || (p.indexOfChar ('/') >= 0 && p.indexOfChar ('/') < p.indexOfChar ('\\')));
-
@dustbro Check the callstack, somewhere you've hardcoded an absolute Windows path (
C:\Something
). -
@christoph-hart It looks like I only have 1 line of code that does not reference {Project Folder}.
This is the script I'm using to save presets to an expansion folder designated for User Presets.//----------------------save preset -------------------------------------- const var PRESET_SAVE = Content.getComponent("PRESET_SAVE"); var pre_folder = FileSystem.getFolder(FileSystem.Expansions).getChildFile("User Presets/UserPresets/"); function save(file) { Engine.saveUserPreset(file); } var shouldLoad = true; inline function onPRESET_SAVEControl(component, value) { if (value) { FileSystem.browse(pre_folder, true, "*.preset", save); UpdatePresetLabel(); } }; Content.getComponent("PRESET_SAVE").setControlCallback(onPRESET_SAVEControl);
-
@christoph-hart Ended up being the AudioLoopPlayer I was using to test DSP. Had a file loaded from outside the project folder.
Now I can get back to debugging crashes :)EDIT:
That was an easy fix. Removing the AudioLoopPlayer cured the issue.Now on to why Latch automation doesn't work in Logic.
-
@christoph-hart it appears that this no longer works:
param.beginChangeGesture(); param.setValueNotifyingHost (newValue); param.endChangeGesture();
We should use instead:
void mouseDown (const MouseEvent&) override { param.beginChangeGesture(); } void mouseUp (const MouseEvent&) override { param.setValueNotifyingHost (newValue); param.endChangeGesture(); }
What do you think?