• Programmatically Assign Macro Connections?

    4
    0 Votes
    4 Posts
    293 Views
    ?

    Okay for anyone else wanting to do programmatic macro assignment for GUI elements:

    // First you need to setup some stuff: const mh = Engine.createMacroHandler(); Engine.setFrontendMacros(["a", "b", "c", "d", "e", "f", "g", "h"]); reg obj; // this will be what we pass to the function as an object // To see the full JSON object: inline function getObject(component, value) { // This button fetches our existing Macro connections object obj = mh.getMacroDataObject(); Console.print(obj); // Insert a breakpoint here and inspect the ScriptWatchTable "obj" element. }; Content.getComponent("Button1").setControlCallback(getObject);

    The object looks like this:

    { "MacroIndex": 0, // zero-based macro index "Processor": "Interface", // the script processor we're working in (usually "Interface") "Attribute": "Knob1", // the name of the UI control "FullStart": 0.0, // the UI control's "min" value "FullEnd": 127.0, // the UI control's "max" value "Inverted": false, // invert the connection "Interval": 0.0, // no idea "Skew": 1.0, // skew "Start": 0.0, // the macro control's "min" "End": 127.0 // the macro control's "max" }

    Finally to assign your own custom macro stuff:

    inline function assignMacro(componentName, index, fMin, fMax, min, max) { local obj = { "MacroIndex" : index, "Processor" : "Interface", "Attribute" : componentName, "FullStart" : fMin, "FullEnd" : fMax, "Start" : min, "End" : max } mh.setMacroDataFromObject(obj); }

    NOTE: This will likely crash and brick your project if you do it INSIDE HISE. Compile it / export it to Rhapsody before trying to use the actual assignment function.

    If you do brick your project, open the Preset.xml file and delete all the data in the Macro section

    Eg:

    <controlled_parameter id="Interface" parameter="155" parameter_name="knbFilterCutoff" min="20.0" max="20000.0" low="20.0" high="20000.0" skew="0.266319563348789" step="0.01" inverted="0" readonly="0" converter="37.nT6K8CBGgC..VEFa0U1Pu4lckIGckIG.ADPXiQWZ1UF.ADf..."/>
  • Keeping Track of Time for OpenGL - Engine Uptime and iTime

    1
    0 Votes
    1 Posts
    180 Views
    No one has replied
  • File.copy locks UI thread - how to show progress?

    5
    0 Votes
    5 Posts
    350 Views
    A

    @d-healey BackgroundTask is amazing, it unlocks a whole new world with e.g. python access.

  • Generate RSA activation code for machine code on the web page?

    5
    0 Votes
    5 Posts
    434 Views
    Felix WF

    @Christoph-Hart I think I succeeded, thanks

    const d = BigInt('0x' + dHex); const n = BigInt('0x' + nHex); const modulusBits = n.toString(2).length; const modulusBytes = Math.ceil(modulusBits / 8); const requiredHexLength = modulusBytes * 2; const messageBuffer = Buffer.from(machineCode); const reversedBuffer = Buffer.from(messageBuffer).reverse(); let value = BigInt('0x' + reversedBuffer.toString('hex')); let result = 0n; const modulus = n; while (value > 0n) { const remainder = value % modulus; value = value / modulus; const encryptedChunk = modExp(remainder, d, modulus); result = result * modulus + encryptedChunk; } let hexStr = result.toString(16).padStart(requiredHexLength, '0'); const finalBuffer = Buffer.from(hexStr, 'hex'); return { activationCode: finalBuffer.toString('hex') }; function modExp(base, exp, mod) { let result = 1n; base = base % mod; while (exp > 0n) { if (exp & 1n) result = (result * base) % mod; exp = exp >> 1n; base = (base * base) % mod; } return result; }
  • Deleting a preset

    5
    0 Votes
    5 Posts
    306 Views
    S

    @d-healey said in Deleting a preset:

    currentPresetFile.deleteFileOrDirectory();

    Thanks! That worked!

  • Loop Array and Filter by String Prefix.

    17
    0 Votes
    17 Posts
    1k Views
    ChazroxC

    @rglides 100% ! 🙏

  • Anyone got a way to prevent multiple message boxes at the same time?

    10
    0 Votes
    10 Posts
    540 Views
    David HealeyD

    I've just added Engine.showMessageBoxWithCallback() it works exactly the same way as Engine.showMessageBox() but you can pass in a callback as a 4th parameter and it will only allow one message box to be shown at a time.

    https://github.com/christophhart/HISE/pull/700

  • ComboBox Challenge. Oblivious Checkmark.

    Unsolved
    11
    0 Votes
    11 Posts
    1k Views
    C

    @CyberGen I have the same problem on Linux.

  • Help. Project wont open. Instant crash.

    4
    0 Votes
    4 Posts
    759 Views
    ChazroxC

    @rglides yee!

  • Deleting presets

    5
    0 Votes
    5 Posts
    264 Views
    David HealeyD

    @Sampletekk Yes - or at least you need to know the bank/category/preset so that you can build the path.

  • SNEX interpolate table

    Unsolved
    7
    0 Votes
    7 Posts
    628 Views
    ustkU

    @Straticah Yeah no luck you see it working unfortunately. You might be able to get some prototyping but chances are good it just won't work...

  • Keyboard/Midi note triggering button

    17
    0 Votes
    17 Posts
    1k Views
    ulrikU

    @cassettedeath this is an example with 4 buttons, triggering 4 different notes

    HiseSnippet 1371.3oc2X01SabDD9NvWUOm1nlpnp9wUQ8ClJjieGPUowfwjhJFPXGZkPQQquaO6Urd2K2tFhUER8OXk5Ok7Onc18Nyc1wjBVkpjhzgXeYl4YdlYmcVNNR3QjRQjkc9dSBIV1egS2Ib0vVCwTt096ZY63bo3RqclDhkRhuks8puPujsaNKyOu646fYXtGIcJKqSETOxAzQTU5rG27moL1dXeRO5nL6tVy88D7VBlXL.iUcJYEh8NGOfbHVusUbr9Irbnk826TInuWkfMptY4sJu0F01pb45a1uVoJd902pZ0FU8CprItwlfPeVaepRD0UgUDokctcD9S5NTbIO1.mRkz9LhdPYqtfkimdOAyW6h5YsZMjx7OdJ+Hs.l33T1Z0X15wNcn9zqmOk09JyBnTIxRf1qLK7VcF3UNK7JkAdK.R1YfTtXH8HmtdQzPU5JZ77.m84JRT.FhSYgR7dsV4Ox4zR.6fqJNBeNYuHXv0RTnQoRqifes1OjOODqjJzNiUJ3OPOCMUrAD01LVKwnPAGFKK7j387DsPO8otpgTIhQAYuDRCPR7EDjZHAExvSH9HtPQPjK.I22WlOhL35AfMZyGP4jhdQDfvzD6AfdJjUwIZ4bxDYr9UQzACHQFSzOFrFsp2QugXUuj0eF5rZatNpdU3qN7s0qxnUMnRzmTLl6iLpHQ0D+CMKCZngldp.e0fu5ZMP4L.wnfwbOEUvQBdBiooqHAqf2ThZczEX1XxZ4+s7tLgGlgnbexaA0lHQQy3iBREAbb27tz.TgDQccmRVEkD0o5IKLKJOynjWsNxb5tnltzyeS6pQo0zFgvjDP4wxnIiiBB1YR6XaU3ZaN3CZSsltBnj.QDpPev6l5X.t6qwaBkzByX8gS9Elmqzw4LDoV2GwKXHrNPFNTonHc.WDQL.C.APIWyPyEuKBouJ3PprvTQAvq03giG0mDUXs0.TAJdtPw7ZYZH4lTBXd2DmHgExFXhw27avaHlOf3qSqcuJ+U4Qy6yAAwN8GmtU.FRVtq9URDlo0t10laY8EEKdkoGi3Fnk8LjdiPwvYqv5byUXydAfWbsrLaTv2mSUGER32z0BVIE.gpw4RPErUkoV7CSpEGyHVTnjqqS7fxVFHCPy1bK3cPzJKunUWdQqMmnub+cwJr9NnDB.HkPRjhp4a6cIW.c.DeijqytD44JQnggRpgA2QeK3n2l1lvtMmjN3GaRkcDi.8filDGYtj5qFltiyZZcmrUkr1x+90VUyXqe+M2u1pVV+Zxc1Vue+EPmMB+wLrZ11czMElr.bBcldLz8QvkT0jrMM9uVOP2VH9HmioJugKFiqr.LBo12GXLoywuzocP.wSkBvbN68q2OsIl07OL17OvoKzeh4hciw+FyXzun6J6EDNIRSdk+.s8+m2119Cu0s8ejmBLeuHLWFJjyn3tjQzdPNuL6juTB8oRdyI5nY14aIvQKbo2878.mbgxzEqFGYRK1dDzomZlzfU+Puln7R9Zhbez8ZhOANrOyCdbmhwtzQgLRa9EDFbEjAieMbmS.dLSMc1Yyk6H3hvgBN0Kaf9DRRCrYw9BcnsUJnS0zYdbySHLBNaR6207.HYCGA7DYI4hx24G+sv3025DCWj9.H5S2hzq9+6hzmHFqn7AcvPRHbmsCz0cWn1nGArNmCOES250J55awiKMsUrtDtuYveA+jrXY8X6jEKOcw+SrwHrWj30dwcVpyS+byLfeyM+Ccbc5nGittC3zX4HnJ2q87lUUumfUVVAqtrBVaYEr9xJXikUvMVVA27eVP8kPaOVIFEezzxpywsMOBv1tMGCY4lSDV+Mv6OwZ+
  • setMouseCursor consistency

    17
    0 Votes
    17 Posts
    1k Views
  • Enter the serial number every time

    11
    0 Votes
    11 Posts
    865 Views
    bendursoB

    @xsaad You're welcome!
    Oh yeah, you have to remove saveInPreset from all momentary buttons :)

  • How to Play an Audio Loop Player?

    Solved
    28
    0 Votes
    28 Posts
    2k Views
    C

    @d-healey I didn't mean to imply it was your code—it was mine, in that I had assigned an LAF to a Component that no longer existed. And thank you, as always.

  • User deleting factory presets...

    3
    0 Votes
    3 Posts
    238 Views
    ChazroxC

    @d-healey got it. Thank you.

  • Control individual sample volumes?

    24
    0 Votes
    24 Posts
    2k Views
    rglidesR

    @Chazrox no worries! good luck with it

  • Basic Questions on ScriptAudioWaveforms…?

    Solved
    7
    0 Votes
    7 Posts
    406 Views
    C

    @d-healey

    Easy to test. Make a blank project and add a waveform controls and loop player.

    @clevername27 said in Basic Questions on ScriptAudioWaveforms…?:

    Good thought. Yes, it works with a canonical implementation. But not in my plugin. :(

    The loop player is triggered by MIDI note on and off I think, so Synth.playNote maybe - I'm just guessing.

    Thank you, yes — we're exploring that in another thread. I'll post the answer if/when we find it.

  • This topic is deleted!

    1
    0 Votes
    1 Posts
    1 Views
    No one has replied
  • Printing Viewport view positions?

    3
    0 Votes
    3 Posts
    206 Views
    VirtualVirginV

    @d-healey said in Printing Viewport view positions?:

    @VirtualVirgin The viewport's changed callback isn't called when moving the scrollbars. It's called when the viewport is in list mode and you select an item in the list, or when you call .changed()

    I just tried attaching a broadcaster to the the property, but that doesn't work either - smells like a bug there @Christoph-Hart

    The only things I can suggest trying are a mouse broadcaster or using a timer to poll for changes.

    Thanks, I think I'll just leave it alone for now.
    I was hoping to use it somehow as a workaround to get scroll wheel events since the panel mouseCallback does not have this data.
    And that I was hoping to use as a workaround for the fact that the Viewport obscures the scrollbars when the content inside is lager than 2 dimensions.
    So I think for the time being I will have to stick either a panel with scrollbars (and no scroll wheel) or a viewport with scroll wheel and no scroll bars.
    Otherwise I guess I would have to learn how to edit the HISE source code, but that seems like a steep learning curve for me at the moment.

13

Online

2.1k

Users

13.1k

Topics

113.4k

Posts