Dynamically adding Curve EQ with Effect Slot Save Preset Problem.



  • Hello!

    I'm having an issue with, adding and removing dynamically the Curve EQ using the Effect Slot processor.

    I think my problem is in this function. ->

    inline function oncmbFxControl(component, value)
    {
    	local index = cmbFxSlot.indexOf(component);
    	local fxType = cmbFxSlot[index].getItemText();
    	
    	if (fxType == "Empty")
    	    fxSlot[index].setEffect("EmptyFX");
    	else
    	    fxSlot[index].setEffect(fxType);
    	    
        btnShowPanel[index].setValue(1);
    	btnShowPanel[index].changed();
    		
    	if (fxType == "CurveEq")
    	{
    		local tileData = {
    			"Type": "DraggableFilterPanel",
    			"ProcessorId": "fx"+index+"_CurveEq",
    			"Index": -1
    		};
    		
    		//Console.print(index);
    		showFltFxEq(index);
    		
    		fltFxEq[index].setContentData(tileData);
    	    Engine.addModuleStateToUserPreset("fx"+index+"_CurveEq");
    	}	
    };
    

    I think the problem is here ->

    Engine.addModuleStateToUserPreset("fx"+index+"_CurveEq");
    

    When I save a preset with a CurveEQ it works. If I change the combobox to Empty and Save Preset then I get a crash.

    Exception thrown: read access violation.
    p was nullptr.
    
    
    juce::ValueTree UserPresetHelpers::createModuleStateTree(ModulatorSynthChain* chain)
    {
    	ValueTree modules("Modules");
    
    	if (auto sp = JavascriptMidiProcessor::getFirstInterfaceScriptProcessor(chain->getMainController()))
    	{
    		for (auto id : sp->getListOfModuleIds())
    		{
    			auto p = ProcessorHelpers::getFirstProcessorWithName(chain, id);
    			auto mTree = p->exportAsValueTree();
    
    			mTree.removeChild(mTree.getChildWithName("EditorStates"), nullptr);
    			mTree.removeChild(mTree.getChildWithName("EditorStates"), nullptr);
    
    			modules.addChild(mTree, -1, nullptr);
    	
    		}
    	}
    
    	return modules;
    }
    

    So I tried this in the source code ->

    juce::ValueTree UserPresetHelpers::createModuleStateTree(ModulatorSynthChain* chain)
    {
    	ValueTree modules("Modules");
    
    	if (auto sp = JavascriptMidiProcessor::getFirstInterfaceScriptProcessor(chain->getMainController()))
    	{
    		for (auto id : sp->getListOfModuleIds())
    		{
    			
    			auto p = ProcessorHelpers::getFirstProcessorWithName(chain, id);
    			
    
    			if (p != nullptr)
    			{
    				auto mTree = p->exportAsValueTree();
    
    				mTree.removeChild(mTree.getChildWithName("EditorStates"), nullptr);
    				mTree.removeChild(mTree.getChildWithName("EditorStates"), nullptr);
    
    				modules.addChild(mTree, -1, nullptr);
    			}
    	
    		}
    	}
    

    Hise is not crashing anymore but I think my fix breaks it in some other way.

    IN CONCLUSION (lol)

    I think this nullptr problem is caused by .addModuleStateToUserPreset once I Save my combobox with Empty after setting it to CurveEq. I don't have this problem with other FX.

    Is there a way to remove addModuleStateToUserPreset - removeModuleStateToUserPreset or something similar? Maybe this will solve my problem.

    Cheers!



  • UPDATE with

    juce::ValueTree UserPresetHelpers::createModuleStateTree(ModulatorSynthChain* chain)
    {
       ValueTree modules("Modules");
    
       if (auto sp = JavascriptMidiProcessor::getFirstInterfaceScriptProcessor(chain->getMainController()))
       {
       	for (auto id : sp->getListOfModuleIds())
       	{
       		
       		auto p = ProcessorHelpers::getFirstProcessorWithName(chain, id);
       		
    
       		if (p != nullptr)
       		{
       			auto mTree = p->exportAsValueTree();
    
       			mTree.removeChild(mTree.getChildWithName("EditorStates"), nullptr);
       			mTree.removeChild(mTree.getChildWithName("EditorStates"), nullptr);
    
       			modules.addChild(mTree, -1, nullptr);
       		}
       
       	}
       }
    

    It does work! But I need to click twice to recall the CurveEq values if coming from Empty Slot or other FX. If I'm already on a CureveEq then it loads on first attempt ->

    glitch.gif

    @Christoph-Hart


Log in to reply
 

9
Online

1.5k
Users

4.6k
Topics

42.1k
Posts