Forum
    • Categories
    • Register
    • Login

    Using custom preset system - as in the actual presets themselves, not a browser

    Scheduled Pinned Locked Moved General Questions
    26 Posts 6 Posters 1.1k Views
    Loading More Posts
    • Oldest to Newest
    • Newest to Oldest
    • Most Votes
    Reply
    • Reply as topic
    Log in to reply
    This topic has been deleted. Only users with topic management privileges can see it.
    • DanHD
      DanH @David Healey
      last edited by

      @David-Healey don't know anything about it

      DHPlugins / DC Breaks | Artist / Producer / DJ / Developer
      https://dhplugins.com/ | https://dcbreaks.com/
      London, UK

      David HealeyD 1 Reply Last reply Reply Quote 0
      • David HealeyD
        David Healey @DanH
        last edited by

        @DanH These two

        45560452-a98c-43ef-b1fc-6123cf2a9e08-image.png

        Free HISE Bootcamp Full Course for beginners.
        YouTube Channel - Public HISE tutorials
        My Patreon - HISE tutorials

        ustkU 1 Reply Last reply Reply Quote 0
        • ustkU
          ustk @David Healey
          last edited by

          @David-Healey I tried in during my testing and even if I could make it work, the parsing of an array that contains strings is bad bad bad. You need to rework the result to remove the escape char and other things.
          This might just be normal, but then what about rewriting it back? Might work, might be risky, this I'm not sure until further testing it

          Hise made me an F5 dude, any other app just suffers...

          1 Reply Last reply Reply Quote 0
          • OrvillainO
            Orvillain @DanH
            last edited by Orvillain

            @DanH said in Using custom preset system - as in the actual presets themselves, not a browser:

            @ustk ok got it working. Is it possible to update the .preset file without using Engine.saveUserPreset ?

            Why do you want to do this?

            I'm doing this when I save my custom fx chain format:

            inline function saveFXChainPreset() {
                    FileSystem.browse(FileSystem.getFolder(FileSystem.UserPresets), true, "*.fxchain", function (f) {
                        if (!isDefined(f) || f == 0) return;
            
                        PluginSharedData.presetMode = "FXChain";
            
                        // Get the data object directly from our custom save logic
                        var data = PluginUserPresetHandling.onPresetSave();
                        f.writeObject(data);
                    });
                }
            

            the key being setup a file reference, and then call f.writeObject(blahblah) on it.

            Musician - Instrument Designer - Sonic Architect - Creative Product Owner
            Crafting sound at every level. From strings to signal paths, samples to systems.

            DanHD 1 Reply Last reply Reply Quote 0
            • DanHD
              DanH @Orvillain
              last edited by

              @Orvillain said in Using custom preset system - as in the actual presets themselves, not a browser:

              Why do you want to do this?

              Because it kills voices and I want to silently update some metadata like tags and author for presets.

              But.... your method seems to be working!!! I feel like I'm going to have to remove certain characters in case it messes up the preset code....

              DHPlugins / DC Breaks | Artist / Producer / DJ / Developer
              https://dhplugins.com/ | https://dcbreaks.com/
              London, UK

              1 Reply Last reply Reply Quote 0
              • OrvillainO
                Orvillain
                last edited by Orvillain

                @Christoph-Hart

                It's like this ..... I have an external arppegiator triggering my synth... I click my left/right arrows to change preset.... and because I use a custom data model, I have to tap into the pre/post callbacks.... so here's what I get:

                synth notes triggering.... click the arrow....
                Interface: preLoadCallback triggered - no synth notes triggering when this is running
                Interface: onPresetLoad triggered - no synth notes triggering when this is running
                Once the onPresetLoad method is finished, a midi note does sneak through into the synth....

                Then this callback fires:
                Interface: postLoadCallback triggered
                This kills the previous notes, and triggers the new ones.....

                Here is my full loadGlobalPreset method:

                inline function loadGlobalPreset(obj) {
                        local samplemaps = obj.samplemaps;
                        local wavetables = obj.wavetables;
                        local params = obj.parameters;
                        local fxSelections = obj.fxSelections;
                        local fxChainOrder = obj.fxChainOrder;
                
                        lastLoadParams = params;
                
                        // Restore samplemaps
                        UISoundSelector.syncSamplerMenu(1, samplemaps[0]);
                        UISoundSelector.syncSamplerMenu(2, samplemaps[1]);
                        UISoundSelector.syncSamplerMenu(3, samplemaps[2]);
                
                        // Restore wavetables
                        UISoundSelector.syncSynthMenu(1, wavetables[0]);
                        UISoundSelector.syncSynthMenu(2, wavetables[1]);
                        UISoundSelector.syncSynthMenu(3, wavetables[2]);
                
                        // Update all UI parameters - except the ones that are not tagged as saveInPreset
                        UserPresetHandler.updateSaveInPresetComponents(params);
                
                        // TODO: Restore custom samples
                
                        // Fix-up FX menus by stable id, but only when they differ
                        if (isDefined(fxSelections)) {
                            for (i = 0; i < fxSelections.length; i++) {
                                local sel = fxSelections[i];
                                if (!isDefined(sel) || !isDefined(sel.id)) continue;
                
                                local targetId = (isDefined(sel.idName) && sel.idName != "") ? sel.idName : "empty";
                
                                local menu = Content.getComponent(sel.id);
                                if (!isDefined(menu)) continue;
                
                                // what saveInPreset restored (by index)
                                local currentId = UIEffectDropDownMenu.getIdForIndex(menu.getValue());
                                if (currentId == undefined) currentId = "empty";
                
                                // only fire callback if mismatch
                                if (currentId != targetId)
                                    UIEffectDropDownMenu.setMenuToId(sel.id, targetId, true);
                            }
                        }
                
                        // Restore FX chain ordering (pageKey -> [4 slots])
                        if (isDefined(fxChainOrder)) {
                            for (k in fxOrderKeys) {
                                local key = fxOrderKeys[k];
                                local saved = fxChainOrder[key];
                
                                // expect an array of length 4 with unique 0..3
                                if (!isDefined(saved) || saved.length != 4) continue;
                
                                UIEffectReordering.pageOrder[key] = saved;          // update UI state
                                UIEffectReordering.applyVisualOrder(key);           // move panels
                                PluginEffectReorder.apply(key, saved);              // set DSP chain
                            }
                        }
                
                        // Update all UI parameters - except the ones that are not tagged as saveInPreset
                        //UserPresetHandler.updateSaveInPresetComponents(params);
                    }
                

                It is doing quite a lot... and ultimately what happens is when I switch a preset, I get one voice that sounds one way... and then another voice that sounds completely different... like a voice is being allowed to be triggered before the preset is fully loaded.

                It seems to be something related to my effect menus and/or effect re-ordering.

                It is hard to explain. Might have to make a video. But any immediate thoughts??

                Musician - Instrument Designer - Sonic Architect - Creative Product Owner
                Crafting sound at every level. From strings to signal paths, samples to systems.

                1 Reply Last reply Reply Quote 0
                • First post
                  Last post

                26

                Online

                2.2k

                Users

                13.6k

                Topics

                118.2k

                Posts