HISE Logo Forum
    • Categories
    • Register
    • Login

    Unknown Functions 'set' & 'getRange'

    Scheduled Pinned Locked Moved Scripting
    15 Posts 3 Posters 747 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.
    • LindonL
      Lindon @trillbilly
      last edited by

      @trillbilly show us the code....

      HISE Development for hire.
      www.channelrobot.com

      trillbillyT 1 Reply Last reply Reply Quote 0
      • trillbillyT
        trillbilly @Lindon
        last edited by trillbilly

        @Lindon Yes, of course. Here is Sampler 1. Its in the onLoopControl & onXfadeControl Functions.

        I have ran my projects XMLBackup through an XML Validator and it returned no issues. I have also removed all other coding/functions to see if something was interfering, but, it still didnt work. I also went back through and checked that I had the correct included scripts and that they were up to date.

        It kind of seemed out of nowhere (of course it was, I wasnt expecting it).

        //SAMPLER 1
        const var Sampler1 = Synth.getSampler("Sampler1");
        reg sound;
        reg totalSamples = 0;
        reg isCustomMap = false;
        
        
        //! "Page" Logic
        // Nothing special, it just shows / hides certain elements...
        
        const var editButtons = [Content.getComponent("EditLoop"),
                                 Content.getComponent("EditRange"),
                                 Content.getComponent("ShowDropper")];
        
        const var EDIT_LOOP = 0;
        const var EDIT_RANGE = 1;
        const var SHOW_DROPPER = 2;
        
        const var AudioWaveform1 = Content.getComponent("AudioWaveform1");
        const var SampleDropper = Content.getComponent("SampleDropper");
        const var LoopPanel = Content.getComponent("LoopPanel");
        const var Reverse = Content.getComponent("Reverse");
        
        
        
        inline function setEditMode(editMode)
        {
        	AudioWaveform1.set("enableRange", editMode == EDIT_RANGE);
        	LoopPanel.set("visible", editMode == EDIT_LOOP);
        	SampleDropper.set("visible", editMode == SHOW_DROPPER);
        }
        
        inline function setEditModeCallback(component, value)
        {
        	if(value)
        		setEditMode(editButtons.indexOf(component));
        }
        
        for(b in editButtons)
        	b.setControlCallback(setEditModeCallback);
        
        
        inline function onSampleMapLoaderControl(component, value)
        {
        	if(value > 0)
        	{
        		local id = Sampler1.getSampleMapList()[value - 1];
        		Sampler1.loadSampleMap(id);
        	}
        };
        
        Content.getComponent("SampleMapLoader").setControlCallback(onSampleMapLoaderControl);
        
        const var SampleMapLoader = Content.getComponent("SampleMapLoader");
        
        SampleMapLoader.set("items", Sampler1.getSampleMapList().join("\n"));
        
        
        setEditMode(EDIT_RANGE);
        
        //! Non persistent UI elements
        //  These UI controls do not store any data, but will read / write
        //  to the sample map directly.
        
        
        inline function onLoopControl(component, value)
        {
        	sound.set(Sampler1.LoopEnabled, value);
        	
        	// Make sure the loop end is set to the sample end when you
        	// enable the loop the first time
        	if(sound.get(Sampler1.LoopEnd) == 0)
        		sound.set(Sampler1.LoopEnd, sound.getRange(Sampler1.LoopEnd)[1]);
        	
        	// update the loop point panel
        	LoopPointDragger.updateLoopPoints();
        	
        	// write the loop points back into the base64 string
        	SampleLoadSave.storeSampleMapData();
        };
        
        Content.getComponent("Loop").setControlCallback(onLoopControl);
        
        inline function onXFadeControl(component, value)
        {
        	// the slider is 0...1 so we can use the available crossfade range length
        	// to figure out how big of a crossfade we want
        	local newValue = parseInt(sound.getRange(Sampler1.LoopXFade)[1] * value);
        	sound.set(Sampler1.LoopXFade, newValue);
        	
        	LoopPointDragger.updateLoopPoints();
        	SampleLoadSave.storeSampleMapData();
        };
        
        Content.getComponent("XFade").setControlCallback(onXFadeControl);
        
        d.healeyD 1 Reply Last reply Reply Quote 0
        • d.healeyD
          d.healey @trillbilly
          last edited by

          @trillbilly An unknown function error means the thing on the left side of the . does not have the function you are trying to call.

          This could be because you've used the wrong variable type or because it's undefined.

          Libre Wave - Freedom respecting instruments and effects
          My Patreon - HISE tutorials
          YouTube Channel - Public HISE tutorials

          trillbillyT 1 Reply Last reply Reply Quote 0
          • trillbillyT
            trillbilly @d.healey
            last edited by

            @d-healey Ahhh ok. So now I need to figure out what was changed, and how, because those functions were working just hours earlier.

            d.healeyD 1 Reply Last reply Reply Quote 0
            • d.healeyD
              d.healey @trillbilly
              last edited by

              @trillbilly Is it because the sample map is not loaded?

              Libre Wave - Freedom respecting instruments and effects
              My Patreon - HISE tutorials
              YouTube Channel - Public HISE tutorials

              trillbillyT 1 Reply Last reply Reply Quote 0
              • trillbillyT
                trillbilly @d.healey
                last edited by

                @d-healey You're right, when I load an internal sample map, it works. But it wont work anymore with Drag-And-Drop samples.

                I would rather use the sample maps from internal samples, but, you cant edit the loop range. I've made a post about it HERE.

                Also, obiviously Im using custom sample import so users can use their own samples. Im confused why it doesnt recognize them as sample maps anymore?

                trillbillyT 1 Reply Last reply Reply Quote 0
                • trillbillyT
                  trillbilly @trillbilly
                  last edited by

                  @d-healey Ok, scratch that. its working ONLY if there is a sample loaded. If the sampler is cleared, it throws the error.

                  If you save a preset without a sample/samplemap loaded, it will save but crash upon opening it again.

                  d.healeyD 1 Reply Last reply Reply Quote 0
                  • d.healeyD
                    d.healey @trillbilly
                    last edited by

                    @trillbilly So before you try to call a function on the sound object you need to check if the object is populated.

                    if (!isDefined(sound))
                        return;
                    

                    Libre Wave - Freedom respecting instruments and effects
                    My Patreon - HISE tutorials
                    YouTube Channel - Public HISE tutorials

                    trillbillyT 2 Replies Last reply Reply Quote 0
                    • trillbillyT
                      trillbilly @d.healey
                      last edited by

                      @d-healey That will work better than my idea of populating an empty samplemap when a sampler is not in use. Thank you.

                      1 Reply Last reply Reply Quote 0
                      • trillbillyT
                        trillbilly @d.healey
                        last edited by

                        @d-healey It solved the sound.set issue but not the sound.getRange issue.

                        d.healeyD 1 Reply Last reply Reply Quote 0
                        • d.healeyD
                          d.healey @trillbilly
                          last edited by

                          @trillbilly This line?

                          local newValue = parseInt(sound.getRange(Sampler1.LoopXFade)[1] * value);

                          Libre Wave - Freedom respecting instruments and effects
                          My Patreon - HISE tutorials
                          YouTube Channel - Public HISE tutorials

                          trillbillyT 1 Reply Last reply Reply Quote 0
                          • trillbillyT
                            trillbilly @d.healey
                            last edited by

                            @d-healey Yes, that is correct

                            d.healeyD 1 Reply Last reply Reply Quote 0
                            • d.healeyD
                              d.healey @trillbilly
                              last edited by

                              @trillbilly And you tried placing the check before it?

                              Libre Wave - Freedom respecting instruments and effects
                              My Patreon - HISE tutorials
                              YouTube Channel - Public HISE tutorials

                              trillbillyT 1 Reply Last reply Reply Quote 0
                              • trillbillyT
                                trillbilly @d.healey
                                last edited by trillbilly

                                @d-healey No, Im an idiot, I only put it in 1 callback.
                                Worked like a charm. Much appreciated.

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

                                13

                                Online

                                1.7k

                                Users

                                11.9k

                                Topics

                                103.3k

                                Posts