HISE Logo Forum
    • Categories
    • Register
    • Login

    the value on the label

    Scheduled Pinned Locked Moved Scripting
    14 Posts 3 Posters 2.4k 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.
    • Christoph HartC
      Christoph Hart
      last edited by

      Hi Alex,

      you can change the label text using it's text property in the control callback of the knob. You might also want to checkout the TooltipPanel, which automatically shows information when you hover over a control:

      const var Knob = Content.addKnob("Knob", 16, 26);
      
      inline function onKnobControl(component, value)
      {
      	local v = Engine.doubleToString(value, 2); // 2 digits
      	
      	// set the tooltip of the knob to the value
      	component.set("tooltip", v);
              // set the text of the label
      	Label.set("text", v);
      };
      
      Knob.setControlCallback(onKnobControl);
      
      const var Label = Content.addLabel("Label", 28, 105);
      // [JSON Label]
      Content.setPropertiesFromJSON("Label", {
        "saveInPreset": false,
        "editable": false,
        "multiline": false
      });
      // [/JSON Label]
      
      // Adds a tooltip that appears when you hover over the knob
      
      const var TooltipPanel = Content.addFloatingTile("TooltipPanel", 10, 134);
      // [JSON TooltipPanel]
      Content.setPropertiesFromJSON("TooltipPanel", {
        "width": 237,
        "height": 24
      });
      // [/JSON TooltipPanel]
      
      TooltipPanel.setContentData({ "Type": "TooltipPanel"});
      ``
      1 Reply Last reply Reply Quote 0
      • alexaudio10A
        alexaudio10
        last edited by

        Hello,

        Thank you very much for rewriting me. I am beginning to understand the functioning, in fact, I think I expressed myself badly.

        My problem is that as soon as I change the image of the button, the values are lost.

        Your code solves the problem anyway, thanks. However, when I try to copy the code (changing the name) it does not work anymore.

        I do not need tooltips, I use them for something else.

        Thanks

        Alex

        1 Reply Last reply Reply Quote 0
        • Christoph HartC
          Christoph Hart
          last edited by

          Can you post your code? You've probably made a mistake when replacing the name.

          1 Reply Last reply Reply Quote 0
          • alexaudio10A
            alexaudio10
            last edited by

            yes, of course!

            ~~Content.makeFrontInterface(150, 150);

            const var volKnob = Content.addKnob("volKnob", 16, 26);

            inline function onKnobControl(component, value)
            {
            local v = Engine.doubleToString(value, 2); // 2 digits

            // set the tooltip of the knob to the value
            component.set("tooltip", v);
                // set the text of the label
            volLabel.set("text", v);
            

            };

            volKnob.setControlCallback(onKnobControl);

            const var volLabel = Content.addLabel("volLabel", 28, 105);
            // [JSON volLabel]
            Content.setPropertiesFromJSON("Label", {
            "saveInPreset": false,
            "editable": false,
            "multiline": false
            });
            // [/JSON volLabel]

            //!

            const var widthKnob = Content.addKnob("widthKnob", 16, 26);

            inline function onKnobControl(component, value)
            {
            local v = Engine.doubleToString(value, 2); // 2 digits

            // set the tooltip of the knob to the value
            component.set("tooltip", v);
                // set the text of the label
            widthLabel.set("text", v);
            

            };

            wdithKnob.setControlCallback(onKnobControl);

            const var widthLabel = Content.addLabel("widthLabel", 28, 105);
            // [JSON widthLabel]
            Content.setPropertiesFromJSON("widthLabel", {
            "saveInPreset": false,
            "editable": false,
            "multiline": false
            });
            // [/JSON widthLabel]~~

            Breakingpoint no.1 was hit !

            1 Reply Last reply Reply Quote 0
            • alexaudio10A
              alexaudio10
              last edited by

              Do I write it correctly?

              I have misery to enter a script on your forum!

              1 Reply Last reply Reply Quote 0
              • Christoph HartC
                Christoph Hart
                last edited by Christoph Hart

                This forum uses Markdown syntax so in order to write a code example with Javascript Syntax highlighting, wrap your script code inside a three fence block like this:

                ```javascript
                // Code goes here
                ```
                

                Now back to your actual problem: The only issue I see with your script is that you're using the same coordinates for both knobs so the second one masks the first one:

                const var knobName = Content.createKnob("knobName", x-position, y-position);
                

                And you've got a typo here:

                wdithKnob.setControlCallback(onKnobControl);
                

                Also your error message suggests that you've accidently created a breakpoint by clicking on the left gutter of the code editor. This will abort the script execution at the given line and store all current variables which is useful for debugging, but in your case, rather annoying :)

                Either click on the red circle with the 1 on it or Shift-Click on any line number to remove all breakpoints.

                1 Reply Last reply Reply Quote 0
                • alexaudio10A
                  alexaudio10
                  last edited by

                  Hello,

                  Thank you for your reply. It's great, everything works, and most importantly, I understood. :)

                  The only trick I can not understand is that as soon as I put my label that displays the value of my button, it destroys my link with the effect.

                  Ex: I have a volume button that has a link to a "simple gain" effect module ... Everything works great, it is a -12 and 12 because that's what I need .

                  As soon as I put the label that displays the value, it destroys the link, and "simple gain" no longer works with the GUI. Is this normal?

                  Here is an example of a script I have to perform...

                  Content.makeFrontInterface(640,480);
                  
                  const var background = Content.addImage("background", 690, 23);
                  // [JSON background]
                  Content.setPropertiesFromJSON("background", {
                    "width": 65,
                    "height": 67,
                    "fileName": "{PROJECT_FOLDER}Background.png"
                  });
                  // [/JSON background]
                  
                  const var vol = Content.addKnob("vol", 0, 14);
                  
                  // [JSON vol]
                  Content.setPropertiesFromJSON("vol", {
                    "text": "Volume",
                    "width": 45,
                    "height": 39,
                    "min": -12,
                    "max": 12,
                    "suffix": "db",
                    "filmstripImage": "{PROJECT_FOLDER}m4003.png",
                    "numStrips": "31"
                  });
                  // [/JSON vol]
                  
                  inline function onvolControl(component, value)
                  
                  
                  {
                  local v = Engine.doubleToString(value, 2); // 2 digits
                  
                      // set the text of the label
                  volLabel.set("text", v);
                  };
                  
                  vol.setControlCallback(onvolControl);
                  
                  const var volLabel = Content.addLabel("volLabel", 0, 54);
                  // [JSON volLabel]
                  Content.setPropertiesFromJSON("volLabel", {
                    "text": "0.00",
                    "width": 134,
                    "height": 15,
                    "multiline": 0
                  });
                  // [/JSON volLabel]
                  
                  //!
                  
                  1 Reply Last reply Reply Quote 0
                  • Dominik MayerD
                    Dominik Mayer
                    last edited by

                    Hey Alex,

                    i think thats because your custom onvolControl callback now overrides the onControl callback that was added by the ConnecttoModule command.
                    You can now add something like this SimpleGain.setAttribute(SimpleGain.Gain, value); to your custom Callback. (you can see your legacy code at the onControl TAB / and by the way clean up :))

                    Oh, and dont forget to declare the SimpleGain via const var SimpleGain = Synth.getEffect("Simple Gain"); in your init script ..

                    Greetings,
                    d

                    1 Reply Last reply Reply Quote 0
                    • Christoph HartC
                      Christoph Hart
                      last edited by

                      Yes, Dominik is right basically, you have three ways of interacting with the controls you define:

                      1. Via a custom callback (your onVolControl function).
                      2. Via the "catch-all" onControl callback (which I consider a bit deprecated because the first one enforces a better encapsulation). As soon as you define a custom callback, the onControl callback will not be triggered anymore for the respective control.
                      3. For simple connections to modules, just set the processorId and parameterId properties of a control and they will just forward the value to the connected module. This works only for simple connections, as soon as you want to control multiple modules, update another UI element (which would be the case in your example), or calculate something, you'll have to resort to 1. or 2.
                      1 Reply Last reply Reply Quote 0
                      • alexaudio10A
                        alexaudio10
                        last edited by

                        Thank you for your help. I do not understand yet but I think I have a good track to continue.

                        I'll keep you informed!

                        Alex

                        1 Reply Last reply Reply Quote 0
                        • alexaudio10A
                          alexaudio10
                          last edited by

                          In fact, it was already written in my code, but it does not work anymore.

                          const var vol = Content.addKnob("vol", 0, 14);
                          
                          // [JSON vol]
                          Content.setPropertiesFromJSON("vol", {
                            "text": "Volume",
                            "width": 45,
                            "height": 39,
                            "min": -12,
                            "max": 12,
                            "suffix": "db",
                            "filmstripImage": "{PROJECT_FOLDER}m4003.png",
                            "numStrips": "31"
                          });
                          // [/JSON vol]
                          
                          inline function onvolControl(component, value)
                          
                          {
                          local v = Engine.doubleToString(value, 2); // 2 digits
                          
                              // set the text of the label
                          volLabel.set("text", v);
                          };
                          
                          vol.setControlCallback(onvolControl);
                          
                          
                          const var SimpleGain = Synth.getEffect("Simple Gain");
                          
                          const var volLabel = Content.addLabel("volLabel", 0, 54);
                          // [JSON volLabel]
                          Content.setPropertiesFromJSON("volLabel", {
                            "text": "0.00",
                            "width": 134,
                            "height": 15,
                            "multiline": 0
                          });
                          // [/JSON volLabel]
                          

                          And OnControl

                          function onControl(number, value)
                          {
                          	
                          
                          	
                          
                              
                          		switch(number)
                          	{
                          		case vol:
                          		{
                          			SimpleGain.setAttribute(SimpleGain.Gain, value);
                          			
                          		}
                          	};
                          };
                          }
                          
                          
                          1 Reply Last reply Reply Quote 0
                          • Christoph HartC
                            Christoph Hart
                            last edited by Christoph Hart

                            Yes, this behaviour is expected, as stated before: as soon as you define a custom control callback (which you're doing with the line vol.setControlCallback(onvolControl);, you're not triggering the onControl callback anymore for this particular UI element, which contains the logic that changes the SimpleGain module.

                            The reason for this is performance: you usually only need one of both methods, mixing both only leads to duplicate script execution (and control callbacks can be used within a time-critical context when automated).

                            This can be solved by copying the line SimpleGain.setAttribute(SimpleGain.Gain, value) to the body of the onvolControl function (and delete everything else from the onControl callback).

                            1 Reply Last reply Reply Quote 0
                            • alexaudio10A
                              alexaudio10
                              last edited by

                              Its WORK! Big Thanks !

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

                              17

                              Online

                              1.7k

                              Users

                              11.9k

                              Topics

                              103.6k

                              Posts