• how to get the areas of a floating tile keyboard into an array

    13
    0 Votes
    13 Posts
    64 Views
    d.healeyD

    @prehm said in how to get the areas of a floating tile keyboard into an array:

    I have my logic in place and working

    So I assume you have an array that contains the low note and high note of your playable range?

    What you need to do is loop over all of the MIDI notes (0 - 127) and set them to your neutral colour.

    Within the same loop you check if the MIDI number is within the range that's in your array, and if it is you set that to your active colour.

    Then inside your look and feel function you can just grab the key colour from obj and draw the key. None of the functional stuff needs to go inside the laf.

  • need some help with artificial note on events

    7
    0 Votes
    7 Posts
    79 Views
    P

    @d-healey
    Thanks, your advice is much appreciated.
    So far everything works just fine and I was surprised to find that all the calculations that my script does for every note on take less than half a millisecond at a buffer size of 128, which is great. My first attempt in pure data was unusable in terms of latency..
    Iโ€™ve started using namespaces and external script files to keep everything nice and tidy, thanks to your video on the topic.
    There is a lot more stuff for me to learn but itโ€™s very exciting to know that I have all the tools I need to make it real.
    Cheers!

  • Play held notes on Modwheel/CC like Omnichord

    7
    0 Votes
    7 Posts
    136 Views
    LindonL

    @Lindon Im avoiding work.....

    HiseSnippet 2524.3oc6Z08aabbD+njOGS5OZyGEoOYrkODPYwPyiTTeXUGSqurUskEgohSKrMROc2Rws5tcYtaorXUDPPKPQ+WHuk+LZeon+ITf9Zenn.EnOlG56syt6cG2i7jDkfSiaaNHKc6r6LyuYlcmc18bq.lCNLjEXjqvNC5gMxcMy1Cn7tq10lPM1bMibW0baeJwoKKv0XkA8rCCwtF4xM8CDCHW9KYHe956shsmM0AOjjgwyXDG7iI9D9PpsZ9Hhm2F1t3cH9Zidtla5vnqx7X8AvLsYUid1N6auG9I1hgMkowCsC6Zj6Vl05rqSsNKTeQqkrVZg4Vxxpwh6NW0ZNtMVpd84q61o1h1yuHvzkW2kvYAs41bbnQtKsBycP6trWQUJ3YjPxtdXQCKi1flUj2f44JLQAUiU6R7baE6kBMLxY1ZnOaZkO68L2h3RRnOz288kcfFxgtCL2TmF7rzgW0IFdFZn6RJzAff412ylmFYh3WTGDFMEx1jxwzPBefd78aU391lsHbmtYi2ox.uPf5aZ7FE7ut45c5fc3CA6kL23mdQizYOQrZVSDyogkqpvxaYtF1ydfDEWQ8tUJjHIIV38XbGsEk2pYRGOkrW2T8rAF6tKrTTiiup2c+a2KltNC+7e2M+626wrW0BT3FA3OKQN+1+byGRFipwZM2hbXrP+xu72eucv98XPBHmTy7lNs6a5Iy8kQz6or9bBcusr4AB8Z9j99sg7MNXH3QoXOP3l4lxPvprcUQaAHZiotxF+K3IpSKQ6bQcZE2o9LjqbBoTul4pLJGZgCrdcjSs2DmScTW42kR76RI9ldJwKFTdeETtp4mXe.Vt9SBjefrcGVfO5AXX8mvmdZqA+Su9WCtsCGfvNA1zvdrPrktjai8I6vn3vTTGgiZYxQJpqg48ooEshTpQIbEa.tBswcklwDqoSrkMMkvf1ojzvz3xm0o1PvqMFrb2sCc.GivOquzoUeuP7mPb4c0j6eUibMcxOzNvM8tBFmQpLqKXprK+MUpromrI3mw97QIDday1NAjd7g8Hvy6FQcHhROyV0qwTO35lHHxDxQcwdtOgwg4xPi6hd9KWtPgntrCaAUDfGsaT.dOIaqx5SEDqFQa0UaCErCatpQyyNjqjhnOLzyGZAcEqht88sojP7yvdLGHUkPEVUpVtZkFMfeMecwav+VRznF7qErDuIPQZAzhAY5fLff.FUlU7vz83ciAdTuiB9Q4599hAHgZAzsuMxI.CQQDuKVnYd.yKD36y5SBvtUfmBh8ywTdEe68waD.MD4eC5.FcoEqVsLpV0pyrbAEpEGmZUwwofT2BeRLu1tfS0eW1JrCKUL4LWhAUrLpQYzbM.QDO3PrH32CGvIXnnJl+Oo81OYL1Np3gEuCpA3SKN.dYN4a91Bh0KW.kGgxW7UhUa.AKqpPuHTwtXQEc.kZyIHTLDRHrIsU.FzYw6XEwGLPBG6GBiqnXNBZ6.WbvKn2ODoB4uf9TapKy+EzhGOtsqEy0r+GQY6VRJt39KV1pd0xBS+5mksmlsitdA.ipmg137BabnEN2hRGBgV7N0i7LHXT0jDcc8RlYAicdg2PWngbbu1jeIVH2JUQfQhF0JkKdjS.OI6T0awx0qprxIwHi44nymEZ0nplMVU7jgY1PPG34zMzjNG0heXzJoz16J84bFUM8L0vJVtwjY3nr38nDydIK4T0zScKxwGJZTLgCwDQw54N8oNB6MTsBuPbajismyNAj81CGDVZFvAqmgrhiG1NnDHCEcsrH4KjGponD4tUWl7isps3xjYmclB4AAjmzojr7iJjvGgGrFrAPIxLPexNSK+d8C6BctbbGREL6rh1GWH+wB8pmlENFS2JAvXbKYUagaWJgkYDPDc7xIlEiJzw1zRyT.z5VvdC16gqP1ixBvqe.30KwC5iEJNsC.HL59.JPFKh8vbQGv4n1ECdFfgiKfFUsc5nz6YK6.rO6.7oHcg2bLt7hVgAQhHedF44AOXZnspJQtmPxBzIksllG1er9EZvB8AePpsMi09Gknb3GHIjsGhBCYy0VNoMuKIDVoAoIzoDmxRDcAHfxFCOy1qONBB0V.84eN5TGVryPMIK68gymseJ+wv4fwR9h.LzgZtVGOFLI+zT7sSleplECtzXg7Q2MK+l.i5JJig.XM+Hx5Gc2QqsPJmiJHkFr.GRhH2s9f3sYXcjs6I4PFYRTr1VQis8jvHiLMo8H.wXIhzFjxbNR7K4aipfTMu0X0c77TAjWpT4wp+D9Jww8PkRU9v3pVoVGaHEr0cTM.GBDnBYd3J8BHvh8h7fAhTHblzgffCUbmhnYimfBuUDQnHAorBYKGIV07avpT42DhRLzR5777HY9xxor8DYrKTY09KqA5ZuF.8Ijg3LA9n7ctAe82D73psEfZufZPKUsbVxaRLn34dx+lZdoZGowydnxQ3ybKkpmxiVl9LxLfCUhxXnpsJjWDI1ckAx8k1zsjxlKmUQU5y9UPZ7LcwIcEcebzFoirSf3.6waBj4dDknxc.JiNPnrjABGGK8Y7Lmrif5npzQafL5lTBe6dX5Id0FQkGAmG7RQnBFJO55gTmrK9zCFD33deOyTmEvPBcsyO2zXTwbiHwz1i.UxKExML0KpdDYz7mMQx3ZlCCXiHge8e3jkfpjQoDdWywR4Np4702y3i2bMats37xQtpgUQBzVCe.wAqN8bdy0vg6yY8j9R+dLpvwl6JmCuo1sc7dMGdGaewFMg5qglWd5H2r7LRF4to4vyHUH4HRETmPpfgrL1gR44MUExNTIKJbTIHsvjFvD2wcteEv+.wKeH7R5580+rbwU4q6T8kWE1kuYjwDYaGF0LMpMbGC0OLEpuwjMEQh4x4zvbHefXQzkMEGa5jrfew+3zrf+hYJK3q9Mxa02HremNhatZJSiNDO+PN.rM8ghaLx8NleLjP2E2wtuGGEtOHGOBcer6NL43OmF+actlcK8A+Scef3nLPf2LYHo0+e7YYMk4MgK99b7AslRCu4iwaaheOO75TQkb.EAdeGX8qLrDSM80bsEix50kAKW0utvmh4pidnaGYZb2mysc1WeA9SwvA+BGNu5K1p4iIT3rfxbAmhe4B+kpx5R+xL18CMUvEI1DC8F0GuH5qeUvLIcj5B3Sp+MwbrNazBKF2wVBG8n2AP9cAS52xsCYWrW5.igQrNkxPtOgXM7qsv0qkuYyz+e+2r4zSRsE4Pz+0704deysCcpgjgaz29w6+S7gu+eEc3a6Dv9z364GhHWQRA7sT4+UjxatknMxZrZpE0lP9TGmzhZLFqcQYr9Ekw4tnL13hx37WTFW3hx3hmMihOW286yY9p0hFFa0Zc0lA4TewR4xRi+MZn3w+.

    Now with playback mode, note velocity setting , note length setting and humanising...

  • a button to save or store Base64String from a table as a json file

    5
    0 Votes
    5 Posts
    43 Views
    rglidesR

    @Chazrox Getting there!

  • Arpeggiator SliderPack || Slider Amount

    Solved
    1
    0 Votes
    1 Posts
    23 Views
    No one has replied
  • Show something when shift is down

    2
  • Save/Load JSON

    2
    0 Votes
    2 Posts
    45 Views
    rglidesR

    @rglides Solved!

    const var SAVE = Content.getComponent("SAVE"); const var LOAD = Content.getComponent("LOAD"); inline function onSAVEControl(component, value) { if (value) { local reverbData = { "OSC1_Reverb_Width": knb_OSC1_Reverb_Width.getValue() }; Engine.dumpAsJSON(reverbData, "reverb_settings.json"); } }; Content.getComponent("SAVE").setControlCallback(onSAVEControl); inline function onLOADControl(component, value) { if (value) { local loadReverb = Engine.loadFromJSON("reverb_settings.json"); if (loadedData != undefined) { if (loadReverb.OSC1_Reverb_Width != undefined) { knb_OSC1_Reverb_Width.setValue(loadReverb.OSC1_Reverb_Width); knb_OSC1_Reverb_Width.changed(); } } } }; Content.getComponent("LOAD").setControlCallback(onLOADControl);
  • Can't reference inline function parameters in nested function body

    15
    0 Votes
    15 Posts
    165 Views
    JulesVJ

    @d-healey Clever! Thank you!

  • Is there a guide for the SVG to path converter?

    7
  • Floating Tile Keyboard - Possible to Rotate?

    Unsolved
    9
    0 Votes
    9 Posts
    93 Views
    d.healeyD

    @HISEnberg Sure

    Ah you found it first :)

  • How I tell an instance of a ScriptSynth to load a particular DSP network?

    25
    0 Votes
    25 Posts
    535 Views
    Dan KorneffD

    @Christoph-Hart yup. But I really just wanna compile my C++ node with 60 parameters and toss it in a hardcoded FX ๐Ÿ˜€

  • Sliders not responding to "Consumed" MIDI CCs

    Solved
    21
    0 Votes
    21 Posts
    360 Views
    CyberGenC

    @d-healey @d-healey said in Sliders not responding to "Consumed" MIDI CCs:

    setCustomAutomation

    Now that I've had a bit more time, there are a number of hurdles with using this method.

    Issues Encountered

    MIDI Learn disappears
    The "MIDI Learn" option no longer appears in the right-click context menu of knobs โ€” unless an automationId has been manually assigned in the Properties panel.

    automationId overrides control callbacks
    Assigning an automationId disables the knob's regular controlCallback, which is where most of my knob logic lives (e.g., updating processors, linked components, states, etc.).

    Workaround via automation callback
    You can attach a callback to a specific automation and call the original controlCallback logic from there โ€” but this adds boilerplate and breaks modularity.

    Avoiding feedback loops crashes HISE
    Trying to assign a knob as the target of its own automation (to bypass issue #2) results in an infinite loop that crashes HISE.

    Controller numbers donโ€™t carry over
    If you switch the automationId to a new target, the MIDI CC assignment doesn't carry over. It must be learned again manually โ€” making it difficult to share CC control across multiple processors or targets.

    ๐Ÿค•

  • Global Variable stuck?

    Solved
    7
    0 Votes
    7 Posts
    65 Views
    ChazroxC

    @d-healey Good to know! I have a bunch of 'consts' in my 'onNoteOn's. Im going to change them now and hope nothing breaks. Thank You! ๐Ÿ™

  • How can I efficiently remove a key from an object?

    7
    0 Votes
    7 Posts
    73 Views
    Christoph HartC

    @d-healey yeah something like JSON.delete(obj, key) is the easiest way, the delete syntax would require a real brain-twister with the current parser.

  • Midi-Out Messages?

    Solved
    12
    0 Votes
    12 Posts
    449 Views
    ChazroxC

    If anyone ever needs to know...

    This was ultimately solved with the help of the following!

    @VirtualVirgin said in Midi-Out Messages?:

    You would need to place the your piano roll script in a container on the next level down from your chord generator. Any MIDI that you generate will not be "seen" on that onNoteOn or onNoteOff callback, so you need a new container level to receive it as MIDI input.

    @ulrik said in Midi-Out Messages?:

    @Chazrox it is as @VirtualVirgin suggested, you need to read the out coming note ons and offs from a script one level below the script that generate the chord

    Thank You! ๐Ÿ™

  • PNG Slider LAF || See Example

    2
    2 Votes
    2 Posts
    62 Views
    ChazroxC

    @pcs800 ๐Ÿ‘

  • Change Variables within function

    5
    0 Votes
    5 Posts
    112 Views
    ChazroxC

    @Ben-Catman

    I think you could just

    reg x = yourKnob.getValue(); // declare x // then just use 'x'...

    I think you can also

    local x = yourKnob.getValue(); // from within your inline function... // then use 'x'...
  • Adding JSON properties to a component via script?

    4
    0 Votes
    4 Posts
    158 Views
    Christoph HartC

    @VirtualVirgin Little unrelated tip of the day:

    mySliders.map(function(element){return element.getId();});

    can also be written as

    mySliders.map(element => element.getId());

    Link Preview Image Arrow function expressions - JavaScript | MDN

    An arrow function expression is a compact alternative to a traditional function expression, with some semantic differences and deliberate limitations in usage:

    favicon

    MDN Web Docs (developer.mozilla.org)

  • How do I send 'noteOff' messages from UI Button?

    Solved
    7
    0 Votes
    7 Posts
    208 Views
    ChazroxC

    @VirtualVirgin This worked best for me! Thank You! I got it working with my chord script perfectly. ๐Ÿ™

    Bingo:
    Screenshot 2025-06-20 at 11.38.07โ€ฏPM.png

    The script:

    for (i = 0; i < chord1.length; i++) { Engine.setKeyColour(i, NoKeyColour); Synth.addNoteOff(1, chord1[i] + 60 + Octave1 + Chord1Choice - 1, 0); } //THANK YOU!
  • Just wondering about how this logic condition evaluates

    6
    0 Votes
    6 Posts
    142 Views
    VirtualVirginV

    @d-healey said in Just wondering about how this logic condition evaluates:

    @VirtualVirgin said in Just wondering about how this logic condition evaluates:

    Yes! That is the solution :)

    You can probably also get rid of the ternary operator at the end - ? true : false because the statement itself should return true or false.

    Yes, that makes sense. It is just evaluating to that anyway, so no need to make it redundant.

22

Online

1.8k

Users

12.0k

Topics

104.5k

Posts