Floating tile keyboard lowest key



  • 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.



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



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



  • 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



  • 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);
    


  • @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").



  • 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



  • 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.



  • 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
    

 

3
Online

384
Users

1.2k
Topics

8.8k
Posts