• Connecting broadcasters query

    10
    0 Votes
    10 Posts
    44 Views
    O

    @d-healey That's the vid that got me started on broadcasters, and I'm very appreciative of it! So thanks!

  • Easiest Way to Add Shadows?

    Solved
    11
    0 Votes
    11 Posts
    102 Views
    ChazroxC

    @clevername27 No problem! 🙏

  • Store Parametriq eq settings in Combobox.

    Solved
    8
    1 Votes
    8 Posts
    67 Views
    DabDabD

    @Chazrox Excellent. good job bro.

  • Help With SliderPack and CC Control

    26
    0 Votes
    26 Posts
    112 Views
    S

    @d-healey said in Help With SliderPack and CC Control:

    @StephanS said in Help With SliderPack and CC Control:

    how can it work that the slider states stay at the values i selected before and stays in position to each other when i control it via CC.

    This I don't know, because if you are using the current CC value as the starting point, then it's going to be constantly changing.

    I would forget about the sliderpack for now. Just add two knobs to your UI and see if you can get one knob to control the other in the way you want. Once you have that working you can move to the sliderpack version.

    Hi David,

    thank you very much for your help.
    I now have almost everything as it should be. Unfortunately, I can't manage one function. When I move a slider in the pack, the value is passed on to the slider but this must then be saved again. Could you have a look at the snippet?
    And please don't judge me for the horrible code ;)

    HiseSnippet 2650.3oc0Z07baabEGPVHwjsowwMyzdnGPzkRE4Hwkeyp1wThTRkUePVSYm5wiiJHvRwsBDfFXorny3Y7kdN2Zu1Yx8dsG5Eeq+OzSNsoyzdqGZOmtefOVPPBRoXO0hGfDv962a+g26suEXw11wVG55Z6HIm93wCgRxeWkNisv8q2WCYI0rgj7OPoiIx.5zVS+rSpW+jigt3SNGHs83gZttPCIY4arGErbpkkX+922caMSMKcX3kjjdfMRGd.Z.BGd0101GYZtqlA7Xz.AzEp0T21ptso8HhvtgRVogjNW6T3QZTXKoH8y0b6KI+wJ450UOWux4q.pBpVtPU.nXktExlS2nX074Kk2nWtJZkpPH8N6Xfv1NcvZXnqj7xaaaLtSe6mZw6fGfbQcMgzS.RcH8L+x6ZaZPuEoWUpdejoQaeOlqDwJsC8e2f6+9PkCQFnfqG5GuEqA0PFhNP4khJuaDQd.Q4kUPdSQRxBRZYtj9.kN5Nng3vVn546nzzBCc5oQhShRgiUZo8usRcaBBK75CzNCtqC4j.FYJlM6cTKjM6palNMIV4hUOWyQc+i1Fn9yT84cJDW2dvPaKxIYVg13JD7QfmKI34hAOeRvyGCdgjfWHF7hIAuXL3kRBdoXvKmD7xwfWII3UhAuZRvqFCNHahworwIjbfMdjEjXnEDO1BRL3BhGcAIFdAwiufDCvf3QXPhgX.KFqF6WTazgXhGQQeGV9N6Xd1wBriEYGKwNVlcrB6X06viS7+vYC3zAb9.tA.bK.J83HiEoUanR2w1zD5PidrB6zaiCsMFYpQJ2jYEVMIAXQcAGraq.ryxBDLpgfhw+XMRcKQpgylDTOZJFQzI14flM14dyLRval1wzeQBDo2XCU0l8Tw8gp5ZllcI8ppt8.nqZOG6Arqe3VcNlXcaGUKabZZ+gbOrNo25oY5B2jaiNDYQl+QsslEzjX4OYxehx83V2aq81Y15k2tmfoV2SB6eTqs4VNMxxDYAU6MxRGirsTss3X7hTYz8M2cHco4H3po+b1c9FargoM4NU0Qy5TpaO65jDHPtxqmk13gZtjB3pmY0kpt5pOXqCt+NLh9rOrYiljVXmNQFz5tP7VXrCp6HLLyjM1.1SajI9AT03KpMCMM6fmiE6LBxahqUzloS0i3+yfnBdSUj5OkMvYcSn0o39jKr1Zqxv+4AgWNyAHKBEJ1GgdL0MmYExkDGU54MnIfb2NEESjYVkvQ8Sn1HDtuob8A4n9wpGpQxb6YZSRT42WpaPboUHbYsn00MCwHqptZb6n2mFGLxHzD6eddLmhW1lGlmSxMld1COOXkUoRzy+W2KyNyDYIq5k7xJB4CxMnFAj3aP3wBiQ8+2nCSyvljOdFI0ryKezK.aY.uvKPsN6jV8BoPsNO6SUsdeHYDJpmJB+icEGdVea+QnLeVO0LeD0wM8zBLbvvoFwCiBTHOhIkGSPxzbXi9DCxBnnEylIgO5eSkx6Nij1pd2XdzP9Y8bKpq9STWYkMmjLHQxfoPVMjbtDImKYx4Sjb9jIWHQxERlbwDIWLYxkRjbojIWNQxkSlbkDIWIYxUSjb0jICRNECjcNzmSR1bxx.ImlAlSdFH4DMvbxz.ImpAlStFH4jMvzy1R6OZOEqbbZ1TTjhSVr5X9U3Na5EhEJNRJb7buI52Ch4UiG5.cIk93cqaPU0zAkW8qY4lQywQareuQe9BBUxDszmp7w7RRLgoQElG1n0D43We3H29YzDJF5UPiOUjCDOxwxCKSvrG6gnWZQ3ooYMLoGQ3zwJVFJcleJ3wbBmQQcJylveJtjlOIcpzonOmaXOw4DNaE6pagISXQ5TJ1byGKvGa94iMmO1ByGaderEmO1B9XKMerE8wVd9XK4isx7wV1Ga04ishOVP14CtZ.3EHxABBcfEI1ED7.KPzCDD9.KP7CDD.AKPDDDDBAKPLDvChoSkhlTO6m0y+MaldIlHiXXixDFNcjMF1xJCcbCoGRqNYS85M01Beh9o1LcY5bRhXFqQC5BcDF0x.JIubz02RY1quk3xuoycKB.ssZRJ5zZHzZVKJmjmuTRR91dph.EyVIrum2JgwCGRHCI4apveBSIlhCVCxWdRMo.1KyYe6HroEx7r.OR3aAE42mX.CMrlj7iTJUX86c596u1Aic1ubmV+hFOqk8456rlydmUuRc6yexSa8zrZcVqaEqAkQOYusbImipuV4e4V8JONKx3hVeZqhMW627vcOqbGyGd7EsvFGzXs0kjVf6t2QglRF4dqV5e++3tKL2bQ39q6c9Ws3byGg6eXuO5et3bKDgq5u8O+2VbtEip4uv4Rzukhv8Ee3m82Wbtkip4+3e5es3bqDg6qd1+4qWbtUiv8k+2a9WWHtuKK2H6Dh9u7UWBxQyrd0WJ80WBx4tZ2xbx4+1Pdhjq7e4kgbwuMjKMQn5GRRqueyFzZERxxdUtHUyFBcvHZgR4FvyQ5P9B4mRoAz8Lr8PRIofoIHIA7N887Wle5ZTw5yTJdOblzEheJlwhm7TjAtOsnUNxI8gnS6i8OSRnORO+BnB8ApVXe7pQ075C+VeXM+9w+JMqM.YXXBaa6hnSnD1xQ0FncgXUYWLbXGzyfhetIL7BhwVVod8HZ9cWrx1B593ZS22TSVz276HMMzeFmlFzOsSz0uLhJRMqnSZZFQ6sNZmClkDpAmz0gmz08xt05Z6PtutmlAZjqn5QX3.wugV3443WP9VKT.1aNj4lB4eg0mhFcwioytmV4AzDacMSoYEve0cGp4PTjnzBcTQtGRq.JUtb4bjgjSwgO6YzDtS.0R5Novav6jKghyKp3FWGTbAQEez0AEWb9kAdKSwkDU7CuNn3xhJ9ytNn3JBJ9EZWGTbUQerwa4J1+IPEbx8tVHYvrdXm2dkr3zdu3rqERNx7dVWKjr3De0FdsPxhy78hmbsPxhS88Rm++I43a0paoD7V.h67K59iyqAp8E2tUzsTkEoeGK9BMu91NXKInwaw0nB8sU7D1Du2xbE1tNvmLBZoKbQ0ZzMvWyPuVsun1mpcNrmsy.uWa0C4Op1AvSIcjnAOFR7rcFaoKdwNCrsw8QVmFYaARr6A11C2wh90aLDw2tulKcIMcgXwTApYO1lumGpaZSduOANMO0x1AxWlTQR0G4hsG3eCv1rgcHuxYi23Km2kHlCV7XdR4keeV3OHNSSDt7olKuXolIuQJktTJNHI7sDEmNPwQ1SLLEeakI2gUyWv22Ex9BkQRWsNmTrRLsOX8eIF8H1ptGeHTzsUKpl3lzQbQUBsDqi4I6jL+Wa4jKZ.9CTZiv58mdsxklh2RR50VsRo3al22SYmd8f53PAtrxt+p2L6bWo6YOBSp4cnF1AQleSgDT6XOxQGR5cKKnI8ylHuDMtyOOK8bVcNnkA6jug7yqQ.8bYuFA9MJMPS2w9Dcd3lVq3lrqPzjEaqUmR4P54pfI9bHjej4HQmnqG0TwHl6pRL+UkXgqJwhWUhktpDKeUIVY9DokY1ZDYpK9vFIoCauCebrbvLlx2P5+Aomz72A
  • Accessing sampler instance from within midi processor

    Solved
    4
    0 Votes
    4 Posts
    23 Views
    d.healeyD

    @Orvillain said in Accessing midi processor name from within connected script:

    I'm fairly confident this will enable me to have my generic script,

    That's how I do it

  • How to Load Audio File Using Scripting? (External Data)

    Solved
    10
    0 Votes
    10 Posts
    30 Views
    griffinboyG

    @d-healey

    Worked!
    Great, thanks David.

    Answer:

    const var ScriptnodeSynthesiser1 = Synth.getAudioSampleProcessor("Scriptnode Synthesiser1"); inline function onButton1Control(component, value) { if (!value) return; FileSystem.browse(FileSystem.getFolder(FileSystem.Downloads), false, "*.wav", function(file) { if (!isDefined(file) || !file.isFile()) return; ScriptnodeSynthesiser1.setFile(file.toString(file.FullPath)); }); }; Content.getComponent("Button1").setControlCallback(onButton1Control);
  • A snippet to choke off or fade a note

    1
    1 Votes
    1 Posts
    23 Views
    No one has replied
  • Is there a method to rotate a path?

    7
    0 Votes
    7 Posts
    51 Views
    VirtualVirginV

    @d-healey said in Is there a method to rotate a path?:

    @VirtualVirgin Instead of making a function to rotate a path, why not make a function to create a rotated path. You can pass in the data you would have used to create the initial path.

    So based on your suggestion I came up with this and it seems to work:

    inline function createRotatedPath(pathArray, angle, area) { local rad = Math.toRadians(angle); local cosA = Math.cos(rad); local sinA = Math.sin(rad); local path = Content.createPath(); local rotationCenterX = area[0] + (area[2] * 0.5); local rotationCenterY = area[1] + (area[3] * 0.5); for (i = 0; i < pathArray.length; i++) { local x = pathArray[i][0]; local y = pathArray[i][1]; local newX = (x - rotationCenterX) * cosA - (y - rotationCenterY) * sinA + rotationCenterX; local newY = (x - rotationCenterX) * sinA + (y - rotationCenterY) * cosA + rotationCenterY; if (i == 0) path.startNewSubPath(newX, newY); else path.lineTo(newX, newY); } path.closeSubPath(); return path; }

    The pathArray is a 2D array of x,y points
    i.e.
    [[x,y],[x,y] etc..]

  • New Build, All Meters Crashed. How?

    Solved
    32
    0 Votes
    32 Posts
    62 Views
    d.healeyD

    @Chazrox said in New Build, All Meters Crashed. How?:

    this commit works.

    Good, now find the first commit that doesn't work :)

  • Does path.contains() work properly? I am having issues with it.

    3
    0 Votes
    3 Posts
    71 Views
    VirtualVirginV

    @ustk Oh that makes sense! And that method is a lot easier than what I was doing.

  • drawFilterPath itemColour1 and itemColour2 are the wrong way around

    3
    1 Votes
    3 Posts
    103 Views
    d.healeyD

    I also noticed that drawDragHandle's colour properties are all empty. So I've made a modification that passes the filtergraph to the laf function so we can grab its colours. I hope this is the correct way to do this.

    Link Preview Image Pass filtergraph to drawDragHandle laf in order to access colour prop… by davidhealey · Pull Request #705 · christophhart/HISE

    …erties

    favicon

    GitHub (github.com)

  • Dynamically switching processorId of an AudioWaveform Tile.

    9
    0 Votes
    9 Posts
    213 Views
    d.healeyD

    @CyberGen said in Dynamically switching processorId of an AudioWaveform Tile.:

    should I add this to the gitHub issue list?

    Can do

  • HISE CSS Syntax

    Unsolved
    6
    0 Votes
    6 Posts
    76 Views
    clevername27C

    @Christoph-Hart cheers, mate.

  • Button default value should be used in broadcaster

    3
    1 Votes
    3 Posts
    43 Views
    d.healeyD

    @Christoph-Hart said in Button default value should be used in broadcaster:

    It's used for AAX plugins

    Aha that's good to know

  • 1 Votes
    2 Posts
    45 Views
    clevername27C

    @d-healey Sorry, mate - I haven't used Expansions.

  • Programmatically Assign Macro Connections?

    4
    0 Votes
    4 Posts
    44 Views
    iamlampreyI

    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
    30 Views
    No one has replied
  • File.copy locks UI thread - how to show progress?

    5
    0 Votes
    5 Posts
    71 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
    95 Views
    CatABCC

    @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
    40 Views
    S

    @d-healey said in Deleting a preset:

    currentPresetFile.deleteFileOrDirectory();

    Thanks! That worked!

31

Online

1.6k

Users

11.4k

Topics

99.4k

Posts