HISE Logo Forum
    • Categories
    • Register
    • Login

    How does the .keyPressCallback() work?

    Scheduled Pinned Locked Moved Scripting
    18 Posts 3 Posters 439 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.
    • VirtualVirginV
      VirtualVirgin
      last edited by VirtualVirgin

      I am trying to set a callback for certain key presses on a label, but I don't understand how to use it.

      Here is an example:

      const var TestLabel = Content.addLabel("TestLabel", 100, 100);
      
      // key press callback
      TestLabel.setKeyPressCallback(function(key)
      {
      	Console.print("Key Pressed: " + key);
      });	
      

      When trying key presses on the test label, the console just keeps printing random object codes for the "key":

      Screenshot 2024-12-23 at 3.28.30 PM.png

      I'm not sure how I'm supposed to filter specific keys this way.
      How do I create actions based on the "esc" key for instance?

      You can listen to my orchestral mockups here:
      https://www.virtualvirgin.net/

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

        @VirtualVirgin key should be event and it's an object so you need to use trace() to see its contents.

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

        VirtualVirginV 1 Reply Last reply Reply Quote 0
        • VirtualVirginV
          VirtualVirgin @d.healey
          last edited by

          @d-healey said in How does the .keyPressCallback() work?:

          trace()

          Thank you :)

          So few more questions:

          with trace() it is now printing booleans on focus status:
          Screenshot 2024-12-23 at 3.54.38 PM.png

          A) how do I get it to recognize specific keys pressed?
          I tried adding this:

          TestLabel.setConsumedKeyPresses(["27"]);
          

          But I see no results in the printout ("27" is supposed be key code for "escape" in Javascript, not sure if this applies in HISE or there is a different way to reference the keys?)

          B) How do I utilize the focus status in the callback?
          I can't seem to figure out an "if" statement to capture the status.

          You can listen to my orchestral mockups here:
          https://www.virtualvirgin.net/

          d.healeyD 2 Replies Last reply Reply Quote 0
          • d.healeyD
            d.healey @VirtualVirgin
            last edited by

            @VirtualVirgin I'll give you an example when I'm back at my computer. If you follow on Patreon I covered this in the snake video last week.

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

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

              @VirtualVirgin

              Ok so you start off with this

              const var Label1 = Content.getComponent("Label1");
              
              Label1.setConsumedKeyPresses("all");
              
              Label1.setKeyPressCallback(function(event)
              {
              	Console.print(trace(event));
              });
              

              Click on the label and start pressing keys, and you'll see the data that comes up for the keys you're interested in. - Notice that at this point we are consuming all keypresses.

              Once you've got the data for just the keypresses you are interested in you can replace "all" with that data.

              For example:

              const var Label1 = Content.getComponent("Label1");
              
              Label1.setConsumedKeyPresses({keyCode: 27});
              
              Label1.setKeyPressCallback(function(event)
              {
              	if (event.isFocusChange)
              	{
              		// Respond to focus changes here
              		Console.print("FOCUS CHANGE");
              		return;
              	}
              	
              	// If we get to here, then the escape key (27) must have been pressed
              	Console.print("ESC PRESSED!!!");
              	
              });
              

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

              VirtualVirginV 1 Reply Last reply Reply Quote 1
              • VirtualVirginV
                VirtualVirgin @d.healey
                last edited by

                @d-healey Ok, I'm getting it! :)
                A couple further questions I have about it though:

                A) the format here

                Label1.setConsumedKeyPresses({keyCode: 27});
                

                The parameters in curly brackets, that is not a key : value pair I think but is it JSON?

                B) When I click on the label the console will print:

                Interface: Key Pressed: {
                  "isFocusChange": true,
                  "hasFocus": false
                

                and when I click off the label it will print:

                Interface: Key Pressed: {
                  "isFocusChange": true,
                  "hasFocus": true
                

                That "hasFocus" seems reversed. Is that a bug, or do I not understand the logic of it?

                You can listen to my orchestral mockups here:
                https://www.virtualvirgin.net/

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

                  @VirtualVirgin said in How does the .keyPressCallback() work?:

                  The parameters in curly brackets, that is not a key : value pair I think but is it JSON?

                  JSON is made up of key/value pairs, so yes it's a JSON object with a key value pair :)

                  @VirtualVirgin said in How does the .keyPressCallback() work?:

                  That "hasFocus" seems reversed. Is that a bug, or do I not understand the logic of it?

                  Yeah seems inverted to me too - there are a few things in HISE like that.

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

                  VirtualVirginV 1 Reply Last reply Reply Quote 1
                  • VirtualVirginV
                    VirtualVirgin @d.healey
                    last edited by VirtualVirgin

                    @d-healey Trying to set multiples and not getting the syntax:

                    label.setConsumedKeyPresses({keyCode: 27}, {keyCode: 13});
                    

                    I thought that would do it.

                    This obviously works, but seems too redundant:

                    label.setConsumedKeyPresses({keyCode: 13});				
                    label.setConsumedKeyPresses({keyCode: 27});
                    

                    Actually, that doesn't do it either, as the 2nd one (27) overwrites the first one (13).

                    You can listen to my orchestral mockups here:
                    https://www.virtualvirgin.net/

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

                      @VirtualVirgin You can only pass a single parameter to the function. To pass multiple values you place them in an array:
                      Label1.setConsumedKeyPresses([{keyCode: 27}, {keyCode: 13}]);

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

                      hisefiloH 1 Reply Last reply Reply Quote 1
                      • hisefiloH
                        hisefilo @d.healey
                        last edited by

                        @d-healey just got here with the same issue! I found the problem seems to be using a Label. Have you tried a panel? Mac works!

                        const var panel = Content.addPanel("p", 0, 0);
                        
                        panel.setConsumedKeyPresses("all");
                        
                        panel.setKeyPressCallback(function(obj)
                        {
                        	Console.print(trace(obj));
                        });
                        
                        d.healeyD 1 Reply Last reply Reply Quote 0
                        • d.healeyD
                          d.healey @hisefilo
                          last edited by

                          @hisefilo said in How does the .keyPressCallback() work?:

                          just got here with the same issue

                          What's the issue? Didn't we solve it?

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

                          hisefiloH 1 Reply Last reply Reply Quote 0
                          • hisefiloH
                            hisefilo @d.healey
                            last edited by

                            @d-healey sorry, many tabs opened. Wrong thread. The issue you described here:

                            Link Preview Image
                            Return the old Content.setKeyPressCallback functionality (that we had for a few days)

                            Just ran into this myself opening an old project. I have a label. When the user types into the label I want to perform an action based on the text that is ty...

                            favicon

                            Forum (forum.hise.audio)

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

                              @hisefilo We solved that one too (scroll up in this thread), I was misunderstanding the new behaviour.

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

                              hisefiloH 1 Reply Last reply Reply Quote 0
                              • hisefiloH
                                hisefilo @d.healey
                                last edited by

                                @d-healey 😵 This is what 14 hours of screen time does to me! Sorry.

                                d.healeyD 1 Reply Last reply Reply Quote 2
                                • d.healeyD
                                  d.healey @hisefilo
                                  last edited by

                                  @hisefilo said in How does the .keyPressCallback() work?:

                                  This is what 14 hours of screen time does to me!

                                  I know that feeling!

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

                                  hisefiloH 1 Reply Last reply Reply Quote 1
                                  • hisefiloH
                                    hisefilo @d.healey
                                    last edited by

                                    @d-healey Well! had a good sleep! back to the arena.

                                    Do you know how to catch the "note off" or key release from computer keyboard?
                                    Im handling this way, but obviously got hanging notes due no note off.

                                    HiseSnippet 1507.3ocyX0sbSaDEVJIho1TXJcX5zK2wSuvvjIwNwwNoLLjDmevj3DSbBAZufYizZqkHsqP6JCtElgmh9HzGhdaeg3Mn8rR1VqHNAiKvTcgGc9aOe6YO64bjaExsIBAOzvL+w8CHFleqU69LoacWLkYzXKCyaZ0DKjjPTBqM6GfEBhigo4r6pXXlaNi3m2+fMwdXlMIkkgwS3Tax9TepLkaq02i54sC1gbL0WS6Jq2vlypy83Q.dl0pjQ.19bbWxAXkZyXY7Prv0v7tVkVoJgTa4NNN3kW1oZ0pqs5ZUVqLtSoJ3yJWcsJKUo1RqVqig4011gJ4gskXIQ.K5lbm9sc4uhk3fmPEzy7HJhxFsAOmv1ntK0yo0vfivvvzpUZnZ1jP0ssZRcni3mFx9tXAnTKzCZlybUPp7m.jL0fzbIP5VVssCoAxTIJ7bcqFL3DrCFNazgRhtFyb2qYUmCZvjK3iOmrSHPLxhhUKUZdD7yctW974WbwVd39HGhvgfjDaOrCG8xWQBk8yCGdBIpGNDEfYDuGGyEcezv0tKQVm6GvY.QwBZ5THdoUFZyEQ9Dm8H8EiLuPxx+3S29nieFV3zYi1asyu8Z6d+xSq+j.NMp0gMNw67W31c+8dzC20mcVyC1rvBh.OJ3F0Zu3hevZ2BrRsxSj040P5BB0dfMbgZEBAYhn3Ef8XLan50wddmA40E6DwrkTNqHoGDPtS9eOOBdTHMlwVXIFvXBW0SApXGtcj.xyXcIE94D0VHC24S011EGhsgCwQZNhilVh.hME6AfajZorlW22m5Rg7U3FotqSYlQ28IRcGOjQFc1h1kJ0TIlVSiyI8qycRc1.ZMMfjv3DXHFNRKMd56RWZmTeESoGo7cRiQ9NZRvdoVAuGK3s2KuJCf6QVHHjBYxxP0sjjCQ04dtEWD0DN6eAGM7Nh.oxY2EUzmx96+RXGoX0G4i6Oj5NwqMsCpXlcK592GUcEzadS9bJ4WP1pKe4xpt5kKqVoDGllckcOUPkpBwPUkeTDCmrMT6G0FQcqXncwcKVH.JJb.WpJc3eRihkUELlGsVoAJ913em93BwSPFevo1RpM4PvbQwUtZwqb0hqNsQoce3i1a+IILUaoLgo7uMtTX9g0FPblR+CYEU0GxkGBjennNcFqLUQ2PtmGIbrhUcdCuJCKxh7OCtxBEj7hHiTD5zjs800lr1W1I8.zTjyZvnxCCHCn2g64nZKod+hM6LFzDAd6jFpRip9eC3A5E.UYoJ3XtEoGLwQR2vbVaQDmK4AvvCi57.PVFK8FC5UtO9LhmAEbcQq5dT6ySZegjbDTsj1C1mnjlOH04Gk0030oCs7r06Oh3c+55uh5HgQTrLeOP6RncckJphFwagKCBsTNLFB2vRqsgteZn4GiCR8iqote9i34qtvXAv.IbG35jL6TJp42FH.N6yLZfp8OSPk80mu6SXzkRW4nKSJDukUKpz1c7XblwfQHq3KAFGLv2Mr1tSGhsLEfyYsySm1o6lb2eyD2ecq1TFItRRry+gXZzo3dPAGBiDpBdkuzIze2y9yIcB8fIdB8Cskf6ONDyDAbQlEtMwmdLjuKzYdh.J9Qd4QpSSc9043vwJ58OXGXSNVaZikQgwoEa3yiXxLoAyl8bXtIqLU1aDZ5Olwum6K0WDL2jky7QJX9++p.Y9.lbCwXapefGYaVOhGTVOFieOTGuCNxSNja1j7lbFOvkyn15Y.GQjgztcIg5XeranMjRXd7TN2d8iHdDrd17Os99PVHNDhSjoLV7o+wbi875GsRfKRcyD8e4b6qZZ1UVIe1IpR9mc7N8U0+7.ki3QRXZhlXHQE5zacPjeanvpMQ8sbvP.BUG8YTEGSnKonSprxbhI9G3YfvxJZyABKOT3WEe3isC4O2NYtQUt72DyA12r3+3lbVMUznxFwyRpeF6CUEetsc1k5BFtzzZ3xSqgUlVCWYZMr5zZXso0vU+3FpZZsQjj6mbk0vnYqsiG91zbaFFx3iucX7uMR0n2.
                                    

                                    Screenshot 2025-02-28 at 12.48.35.png

                                    The desired behavior is already happening on the built-in HISEs keyboard. (once clicked, you can play with your computer keyboard and it's getting notes on and off)

                                    Screenshot 2025-02-28 at 12.49.20.png

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

                                      @hisefilo I don't think there is way to detect a key up.

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

                                      hisefiloH 1 Reply Last reply Reply Quote 0
                                      • hisefiloH
                                        hisefilo @d.healey
                                        last edited by

                                        @d-healey got it! thanks

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

                                        24

                                        Online

                                        1.8k

                                        Users

                                        12.0k

                                        Topics

                                        104.5k

                                        Posts