HISE Logo Forum
    • Categories
    • Register
    • Login

    Floating tile keyboard lowest key

    Scheduled Pinned Locked Moved Scripting
    9 Posts 3 Posters 1.2k 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.
    • d.healeyD
      d.healey
      last edited by

      I'm sure this worked for me in the past but using Engine.setLowestKeyToDisplay(); isn't making a different to the floating tile keyboard on my UI.

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

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

        That‘s deprecated because with the floating tile system you can have multiple keyboards so a global lowkey property doesn‘t make sense anymore.

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

          @Christoph-Hart I see, so how do I access the LowKey property of the tile?

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

          1 Reply Last reply Reply Quote 0
          • Dominik MayerD
            Dominik Mayer
            last edited by Dominik Mayer

            There is a "LowKey" entry in the Keyboard-FloatingTiles Data property settings.

            You could obviously also set this via script:

            const var FloatingTile1 = Content.getComponent("FloatingTile1"); // Keyboard
            
            const var datadump = FloatingTile1.get("Data");
            Console.print(datadump);
            
            FloatingTile1.set("Data", '{
              "KeyWidth": 14,
              "DisplayOctaveNumber": false,
              "LowKey": 36,
              "HiKey": 127,
              "CustomGraphics": false,
              "DefaultAppearance": true,
              "BlackKeyRatio": 0.69999999,
              "ToggleMode": false,
              "MidiChannel": 1,
              "UseVectorGraphics": false,
              "UseFlatStyle": false,
              "MPEKeyboard": false,
              "MPEStartChannel": 2,
              "MPEEndChannel": 16
            }');
            

            right now, its just a string that is then parsed as JSON.
            Question: Couldn't this also be done with a dict or an object to access the values individually? a là: Data["LowKey"] ?

            atb,
            d

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

              The JSON thingie that you use with the set() method must be a String to enable the interface designer input box. Whenever you want to customise a FloatingTile via scripting, use the FloatingTile.setContentData() which takes a native Javascript object:

              var funky = 
              {
                  "Type": "Keyboard",
                  "LowKey": 36
              };
              
              FloatingTile.setContentData(funky);
              
              d.healeyD 1 Reply Last reply Reply Quote 1
              • d.healeyD
                d.healey @Christoph Hart
                last edited by d.healey

                @Christoph-Hart I just used this approach but it seems that I can't change the LowKey by itself, I have to also specify all of the other properties too, is that correct? If that is the case then a getContentData() function might be handy.

                Edit: Never mind, realised I can use .get("Data").

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

                1 Reply Last reply Reply Quote 0
                • Dominik MayerD
                  Dominik Mayer
                  last edited by Dominik Mayer

                  Should work.. only thing is, that the "Type" is mandatory.. btw: little naming inconsistency with the Component Specific Properties Panel. There the FloatingTile-Type is called ContentType.

                  var funky = 
                  {
                      "Type": "Keyboard",
                      "HiKey": 19,
                  };
                  
                  funky["HiKey"] = 36;
                  
                  Console.print(funky["HiKey"]);
                  
                  FloatingTile1.setContentData(funky);
                  

                  greet,sd

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

                    Well I hit a little snag, using get("Data") returns a string rather than an object so I can't access individual properties without some serious string manipulation. So I retract my previous retraction and think a getContentData function that returns an object would still be handy.

                    I only want to change the low key when a button is pressed but if I just use your example:

                    var funky = 
                    {
                        "Type": "Keyboard",
                        "HiKey": 19,
                    };
                    

                    Then all the other properties I've set in the interface designer are reset to their default. So I have to set every single property in the script every time I want to change one property. My solution is to store all the properties as a global object and just update it and pass it to the tile as needed but it's not the cleanest solution.

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

                    1 Reply Last reply Reply Quote 1
                    • Dominik MayerD
                      Dominik Mayer
                      last edited by Dominik Mayer

                      I think your solution works quite well.. I compiled a plugin and the performance overhead is quite small and actually, runs smooth.

                      /+ finally a fascinating method to leverage that weird BlackKeyRatio animation..

                      Content.makeFrontInterface(600, 500);
                      
                      const var FloatingTile1 = Content.getComponent("FloatingTile1");
                      const var Knob2 = Content.getComponent("Knob2");
                      const var LFOModulator1 = Synth.getModulator("LFO Modulator1");
                      
                      Globals.funky = {
                        "Type": "Keyboard",
                        "KeyWidth": 14,
                        "DisplayOctaveNumber": false,
                        "LowKey": 34,
                        "HiKey": 127,
                        "CustomGraphics": false,
                        "DefaultAppearance": true,
                        "BlackKeyRatio": 0.69999999,
                        "ToggleMode": true,
                        "MidiChannel": 1,
                        "UseVectorGraphics": false,
                        "UseFlatStyle": true,
                        "MPEKeyboard": true,
                        "MPEStartChannel": 2,
                        "MPEEndChannel": 16
                      };
                      
                      inline function onKnob1Control(component, value)
                      {
                          Globals.funky["LowKey"] = value;
                          FloatingTile1.setContentData(Globals.funky);
                      };
                      Content.getComponent("Knob1").setControlCallback(onKnob1Control);
                      
                      inline function onKnob2Control(component, value)
                      {
                          Globals.funky["BlackKeyRatio"] = value;
                          FloatingTile1.setContentData(Globals.funky);
                          LFOModulator1.setIntensity(value);
                      };
                      Content.getComponent("Knob2").setControlCallback(onKnob2Control);
                      
                      
                      HiseSnippet 1841.3oc4YrsaabbcVJstQzUtQIFoIuTLfnEfpwUgjVVtw4hoDkjihkrHLUbhiQfwvcGRNP6NylcGJYZCC3W5ePA5q8SQu2eh7Ij+.2yYmk6EIJIpHmBGz8ACNmay41btH2NT4vihTgDq41aT.mX86s6LRpGzZ.SHIasNw5Z16vhz7PpAzZiBXQQbWhk0L2CAXM2rj3ue9tqw7XRGdFHB4QJgCeaguPmAscy6K771j4x2S3mi5katkiR1R4oFB5yL10HALm8Y84OfgjUxlXckMbEZUXGMSyiHVytlxcTmApCkF5ejHRz0iiGpS5.Bx.dSkmKpwHTRqABO21is6HBwxtclWXFiW3516HbEovy7FuaLBZFG48GVkNK0qdd0q1DUuZSR8rxodyZTuEr63DJBzYXPc6p1aIg.UOFDBxqVFZIk9WWwtkBnPpWxmsOeyP3PJGUWoVsaPuUsZK9YyWd9xPfHRSOfER2zSwzBY+8Dd75zufNVD845VJ+.kDNTsRAppfxHSB2Wp513T4LF6w3X6M2cGk6POF3Lw6LNkD4KEZ0J.MzLhpXT64KeOOUWlWzR8FJ2eDv5KluLkVAcaUtCsx84i5pXgtUtQLX332Jb0C.T0W1.ZcQTfGaztNZ1A7GLzuKODv1CDI2Pv1pCA1.X2LgiuRXNWuwsM.ZMLRq7uWHKXfvIpH2qy6wF5oWMHfyBwGK.Zc3vDrq4AI7fzdH3KU.lZKsxmZ9L32S0uuGGr5hrgojPJpTx8P8v.7ah3Oh6.9lIqH.5MAWWG8HuiIr1aj5kNFbHuNTmcQMRQrgzM28ux7keYRzPH8DRNEBFNfEIoJIFtqiYBgJupNiSCtAD18FxWb9xwwKJsPX7Iic5+.DPiIDD+bER4VJBSphyuVmoYUKvOlafZzom.B4Oik.nWsXddcgHQ0hp6hmoQ03BaTEi1WBaatBuWPxwm0xHgdTUiJbtNfFmkCnwwb.4r7Gnz7ckUWr7KJOW4WdBL85MITIhyiGNIrXSgvyfspx3Wkmv6FcnP6LHA6hzO4SnleRi3dvCgHpd.mlFbnLoaBK7HZWt9PNWhj3SERZEGVDuBdbDkExoCgRoKYtljaC+PhneG5gtSFvb3wu1L3UQbLoZkmUIQoo+UZcSk1wj8xiI0Ge1REKRNBpS4vgrFSLl94P4hasH8tzZz6PucsOC8.PwcIKbDUEvCwjC5SpJ5E+nFHrpqZQvDEQz6TUEh+jo+ApVk3VRcJwhO5zMqQfYYTl7VD90Mjy1exVo4WXR4Kg1ZE6aZe58My2V2wjMmiPkbKoPua.WdZM6IIOAf9pkRxm.R0wcUuVRW0NdBWdHQ.MO+c1wE.HwtfrIUVuIYpYtwwYF99lsvGxXu8D0ATQHBoEn0asN+.XnISm94rWmGsuVE.WT5SVXJMcxXJlKMe4h3q9OXWnBB4YYW+ZMGkc3Kaln.laqr83R+jt8GOH1bWw0080H0BM2OC5qe8q+nhPaj.NlXM+Y5Lh+OGYfFa2kdrk8Kt7MfWt1u9Mf+sVeWxgn6LM.ejeyAbQ+AYSe+puGycSSjt54l5mk57p7oNu5wMiPa.2X3qTghmC4QLuic8+6Sb8jUa5yxD4QOsouv00i2VAcqfx7YxeWP97fNhmyyuhwwR1VXgELXxYRW4bePlyj957ljaSLoEGjdbdPD4TTOxOcWxImKG1NXba37qLf6Ikf.kQ9YySaTm2Huz6QLwJeSo5tfcar5+j02RSPewRo+JquIakMu8F85AusxT1Ys276dytB14oJWynJW0tCLCX7dIwJxGDel9sPMK583RS215m11xGMT9Om1skCl5skMkL2CppEEnhJH3Nbewdv6in7.wRQg7eLtVWd3sfZPSD0Oe2MAibh7zgoGFFmtrpuZnTWH8XloNlTe5WKd12Z1Z+x7Z6xWbXloScmfGrT6S7W+4cgzX+.O9FxC3dvHIw536YmzzbLzh406njpfAJovIeP+gbcnneedXdcehFzpZMTrMCx0a9PXfcV9D3+bysgDOVH1A9Wnun9Y6Krlx30GZaTWJ9Xj9VUQ84MpssMrMXRtUw+FImmNRH3S6gboyXf+zyu9BMwROaMtxUyx+wa2Dqx0SE5mLhZpItMuObQ4grGGZKCUIKjZzwWof0NvYSSKncze5e7AM2VoB1Px.ufadgXFma7kRr9K1MVdoheGrK7O89X7meZq3yjNvzCwSaZ8D6UhoOG9at6alyj2bYfklxLv2ONplF9v36a4STXz3zbqeCnwm4LPy7+my.8P0PbexcXPccX.ZaX0rNvnGN7jMPv81sJgiOXNWCOal8P5Fe.2LLAYc7rUBx5iQ9+j6vm4DpdpiY8c7g26DCAraY7+MCyYuCdlltzO5afs.DO0wAc1+Mv6LYNZbg43lWXNV9BywstvbrxEliaeg43ueFbfyps5Pnju4oG.n8FlJ4VocGrlg7eAvAt6vJ
                      
                      1 Reply Last reply Reply Quote 0
                      • First post
                        Last post

                      16

                      Online

                      1.7k

                      Users

                      11.9k

                      Topics

                      103.7k

                      Posts