• How to Crop button bounding boxes

    General Questions
    23
    0 Votes
    23 Posts
    175 Views
    J

    @Chazrox said in How to Crop button bounding boxes:

    @Jeetender Try this. You'll have to use two vertical sliders and style them with this laf to get that look with this script. You can figure out how to customize it by reading the comments.

    const var LED_Meter_Rectangle_TempGrade_HardStops = Content.createLocalLookAndFeel(); LED_Meter_Rectangle_TempGrade_HardStops.registerFunction("drawLinearSlider", function(g, obj) { // ---- COLOUR CONTROL ---- // Every colour this LookAndFeel draws with, in one place. Each name is one control in the // designer, so editing a value here changes that control and nothing else. The draw code // below only ever references these by name. var c_fillColourBot = 0xFF03B300; var c_fillGradMidColour = 0xFFFF981A; var c_fillColourTop = 0xFFFF0A0A; var c_fillColourBot_a35 = 0x5903B300; var c_fillGradMidColour_a35 = 0x59FF981A; var c_fillColourTop_a35 = 0x59FF0A0A; var c_fillColourBot_a55 = 0x8C03B300; var c_fillGradMidColour_a55 = 0x8CFF981A; var c_fillColourTop_a55 = 0x8CFF0A0A; // Per-LED colour tables, sampled along the Fill gradient (one entry per LED). var ledColours = [ c_fillColourBot, c_fillColourBot, c_fillColourBot, c_fillColourBot, c_fillColourBot, c_fillColourBot, c_fillColourBot, c_fillColourBot, c_fillColourBot, c_fillColourBot, c_fillColourBot, c_fillColourBot, c_fillColourBot, c_fillColourBot, c_fillColourBot, c_fillGradMidColour, c_fillGradMidColour, c_fillGradMidColour, c_fillGradMidColour, c_fillGradMidColour, c_fillGradMidColour, c_fillColourTop, c_fillColourTop ]; var ledOffColours = [ c_fillColourBot_a35, c_fillColourBot_a35, c_fillColourBot_a35, c_fillColourBot_a35, c_fillColourBot_a35, c_fillColourBot_a35, c_fillColourBot_a35, c_fillColourBot_a35, c_fillColourBot_a35, c_fillColourBot_a35, c_fillColourBot_a35, c_fillColourBot_a35, c_fillColourBot_a35, c_fillColourBot_a35, c_fillColourBot_a35, c_fillGradMidColour_a35, c_fillGradMidColour_a35, c_fillGradMidColour_a35, c_fillGradMidColour_a35, c_fillGradMidColour_a35, c_fillGradMidColour_a35, c_fillColourTop_a35, c_fillColourTop_a35 ]; var ledGlowColours = [ c_fillColourBot_a55, c_fillColourBot_a55, c_fillColourBot_a55, c_fillColourBot_a55, c_fillColourBot_a55, c_fillColourBot_a55, c_fillColourBot_a55, c_fillColourBot_a55, c_fillColourBot_a55, c_fillColourBot_a55, c_fillColourBot_a55, c_fillColourBot_a55, c_fillColourBot_a55, c_fillColourBot_a55, c_fillColourBot_a55, c_fillGradMidColour_a55, c_fillGradMidColour_a55, c_fillGradMidColour_a55, c_fillGradMidColour_a55, c_fillGradMidColour_a55, c_fillGradMidColour_a55, c_fillColourTop_a55, c_fillColourTop_a55 ]; // ---- GEOMETRY ---- var a = obj.area; var isH = false; // exported from current designer orientation var norm = (obj.valueNormalized !== undefined) ? obj.valueNormalized : ((obj.value - obj.min) / (obj.max - obj.min)); norm = Math.max(0.0, Math.min(1.0, norm)); // Axis-aware scale: horizontal skins scale from component width; vertical skins scale from component height. // This keeps slider element proportions stable when exporting either orientation. var scaleBase = isH ? a[2] : a[3]; var sw = scaleBase / 300.0; // Output bounds: master Draw Padding on each edge (px @300 design). var padL = sw * 4.0000; var padR = sw * 4.0000; var padT = sw * 4.0000; var padB = sw * 4.0000; var dW = Math.max(1.0, a[2] - padL - padR); var dH = Math.max(1.0, a[3] - padT - padB); // Position the clamped rect by the pad ratio so a large pad never drifts the slider off-axis. var sumX = padL + padR; var sumY = padT + padB; var dX = a[0] + (sumX > 0.0 ? (a[2] - dW) * (padL / sumX) : (a[2] - dW) * 0.5); var dY = a[1] + (sumY > 0.0 ? (a[3] - dH) * (padT / sumY) : (a[3] - dH) * 0.5); var drawBase = isH ? dW : dH; var trackThick = drawBase * 0.1500; var fillThick = drawBase * 0.1200; var hPad = (isH ? dW : dH) * 0.0200; var tX, tY, tW, tH; if (isH) { tX = dX + hPad; tY = dY + dH * 0.5 - trackThick * 0.5; tW = dW - hPad * 2; tH = trackThick; } else { tX = dX + dW * 0.5 - trackThick * 0.5; tY = dY + hPad; tW = trackThick; tH = dH - hPad * 2; } // Fill has its own cross-axis thickness, anchored to the same centre-line as the track var fbX, fbY, fbW, fbH; if (isH) { fbX = tX; fbY = dY + dH * 0.5 - fillThick * 0.5; fbW = tW; fbH = fillThick; } else { fbX = dX + dW * 0.5 - fillThick * 0.5; fbY = tY; fbW = fillThick; fbH = tH; } // Radius from the rail THICKNESS (cross-axis) so the end caps keep one shape at any length. var tR = (isH ? tH : tW) * 0.1100; var thumbBaseW = drawBase * 0.1314; var thumbBaseH = drawBase * 0.0657; var thumbW, thumbH; if (Math.abs(thumbBaseW - thumbBaseH) < 0.0001) { thumbW = thumbBaseW; thumbH = thumbBaseW; } else { // Rotate width / height with orientation, so a 200x100 vertical handle becomes 100x200 horizontal. thumbW = isH ? thumbBaseH : thumbBaseW; thumbH = isH ? thumbBaseW : thumbBaseH; } var thumbSz = Math.max(thumbW, thumbH); // Thumb travel range: 0 = left / bottom, 1 = right / top var trMin = Math.min(0.0000, 1.0000); var trMax = Math.max(0.0000, 1.0000); var travelNorm = trMin + (trMax - trMin) * norm; // The thumb travels the TRACK RAIL - the same span the fill covers and the ticks sit on - so // all three stay in step. Track Pad insets the rail, and therefore the throw, by design. var railStart = isH ? tX : tY; var railLen = isH ? tW : tH; var thumbCX = isH ? railStart + railLen * travelNorm : dX + dW * 0.5; var thumbCY = isH ? dY + dH * 0.5 : railStart + railLen * (1.0 - travelNorm); // ---- FILL LED SEGMENTS ---- (rectangle shape) // Each LED is a solid segment coloured by its slot position in the Fill gradient. Crisp on/off meter. var ledN = 23; var ledLit = Math.round(norm * ledN); var ledAlong = isH ? fbW : fbH; var ledPitch = ledAlong / ledN; var ledLen = Math.max(0.5, ledPitch * 0.8200); var ledThick = Math.max(0.5, fillThick * 1.0000); var ledCross = isH ? (fbY + fbH * 0.5) : (fbX + fbW * 0.5); // LED Glow - blur the lit segments behind the meter if (ledLit > 0) { g.beginLayer(false); for (var fgi = 0; fgi < ledLit; fgi++) { var fgAlong = isH ? (fbX + (fgi + 0.5) * ledPitch) : ((fbY + fbH) - (fgi + 0.5) * ledPitch); var fglx = isH ? (fgAlong - ledLen * 0.5) : (ledCross - ledThick * 0.5); var fgly = isH ? (ledCross - ledThick * 0.5) : (fgAlong - ledLen * 0.5); var fglw = isH ? ledLen : ledThick; var fglh = isH ? ledThick : ledLen; g.setColour(ledGlowColours[fgi]); g.fillRoundedRectangle([fglx, fgly, fglw, fglh], Math.min(fglw, fglh) * 0.1100); } g.gaussianBlur(Math.round(Math.max(0.0, 5.0 * sw))); g.endLayer(); } for (var li = 0; li < ledN; li++) { var lAlong = isH ? (fbX + (li + 0.5) * ledPitch) : ((fbY + fbH) - (li + 0.5) * ledPitch); var lx = isH ? (lAlong - ledLen * 0.5) : (ledCross - ledThick * 0.5); var ly = isH ? (ledCross - ledThick * 0.5) : (lAlong - ledLen * 0.5); var lw = isH ? ledLen : ledThick; var lh = isH ? ledThick : ledLen; var lr = Math.min(lw, lh) * 0.1100; var ledDrawn = true; if (ledDrawn) { if (li < ledLit) { g.setColour(ledColours[li]); g.fillRoundedRectangle([lx, ly, lw, lh], lr); } else { // Opaque black base first: Off Alpha then blends the dim colour over it, so a // low alpha fades toward BLACK instead of letting the background show through. g.setColour(0xFF000000); g.fillRoundedRectangle([lx, ly, lw, lh], lr); g.setColour(ledOffColours[li]); g.fillRoundedRectangle([lx, ly, lw, lh], lr); } } } });

    LED_Meter_Rectangle_TempGrade_HardStops.png

    Dont mind the yellow dash lines. Thats just the guidelines from the designer app. Those wont come out in the render.

    now this seems to be working fine and much customizable.. thanx a lot brother.

  • Where's Christoph?

    General Questions
    11
    5 Votes
    11 Posts
    276 Views
    resonantR

    @dannytaurus said in Where's Christoph?:

    Whatever happens with HISE now might be too little, too late.

    Why?

  • AI takeover the plugin industry

    AI discussion
    13
    2 Votes
    13 Posts
    79 Views
    soundsyncS

    @lijas90 Time. This the the one & you've hit it on the nose.

  • Update your site's PHP today

    General Questions
    1
    3 Votes
    1 Posts
    36 Views
    No one has replied
  • EMPIRE VST // Create Audio Plugins Without Coding \\

    General Questions
    2
    1 Votes
    2 Posts
    250 Views
    tsempireT

    Capture d’écran 21-10-2026 11.33.44.png

    Empire VST v3.5 is ready! 🚀

    Create your own instrument and effect plugins without writing a single line of code.

    Have any questions? Feel free to DM me!

    TS EMPIRE 🔥

  • HISE Activate

    Newbie League
    3
    0 Votes
    3 Posts
    61 Views
    Dominik MayerD

    Hey @jimbo

    We are currently in a big refactor and refresh of the HISE Activate service.

    It's up and running solidly, but in the future will have much better onboarding, Product creation and smooth embedding in your HISE project.

    If you want i can send you the current unlocker_demo (which is the scripts + UI that connects the plugin to the Activation server) which still works with the current setup. But if you have a few weeks to spare I think i would wait for this update. (can't promise exact ETA, though ;)

    All best
    Dominik

  • 1 Votes
    6 Posts
    257 Views
    S

    Thanks, that’s really useful. 10 hours is a lot. Which part of those steps would you most want to skip? And if someone made the plugin capture and sync part for you, would that be worth paying for, or would you rather keep control of it?

  • Payment providers compared

    General Questions
    20
    6 Votes
    20 Posts
    2k Views
    soundsyncS

    Quick follow-up on the documentation gaps raised earlier: we’ve expanded SoundSync’s public pages so the features, fees, and commercial policies are easier to find.

    Product migration is now supported. You can bring a catalog from another platform using public store/product pages or a supported spreadsheet/JSON export. Imports become drafts for review before publishing. Customer accounts and existing recurring payments are separate from catalog migration. Migration details

    Security and integrations have expanded too. We support authenticator-based two-factor authentication, recovery codes, and team accounts with role and product-specific access. HISE developers have both HISEScript and native C++ integration paths, alongside the JUCE package. The API documentation now covers substantially more of the platform, including licensing, refunds, subscriptions, and partner integrations.
    Account security · Developer documentation

    We’ve also expanded the Website Builder and branding tools, including root-domain support and SoundSync-provided SSL, plus native affiliate and collaborator programs alongside reseller integrations.

    The commercial details are now explicit: Stripe and PayPal checkout, USD-only pricing, and one 10% SoundSync fee covering ordinary payment processing on SoundSync-managed checkout. Developer, affiliate, and collaborator payouts follow the same schedule: the 1st and 15th, after the minimum 14-day hold.

    The updated pages also explain Merchant of Record responsibilities, tax handling, refunds, disputes, and payout eligibility.
    Pricing · Trust Center · Payout policy

    Thanks again for pointing out what was missing. That feedback helped us make the information much clearer.

  • Enable Specific Sampler for Synth.playNote()

    Solved General Questions
    3
    0 Votes
    3 Posts
    171 Views
    O

    Thank you for the help @David-Healey ! This worked perfectly.

    I would like to include a few additional notes. There is a good bit of information that needed to be passed to each sampler. The interface relayed this information to controls in the MIDI Processors via interface control callbacks in the following format:
    scriptProcessor.setAttribute(controlIdx, value);

    In the onNoteOn block, Message.ignoreEvent(true) and Message.makeArtificial() were called. The note IDs produced by the Synth.playNote() command were stored in an array that was referenced when turning off the notes with Synth.noteOffByEventId() in the onNoteOff block.

  • 0 Votes
    1 Posts
    109 Views
    No one has replied
  • 0 Votes
    1 Posts
    67 Views
    No one has replied
  • Overview, intro videos and AI....

    General Questions
    3
    1 Votes
    3 Posts
    196 Views
    David HealeyD

    Not something I've explored for demo videos but might be something Claude Design can help with.

  • 1 Votes
    9 Posts
    1k Views
    J

    @dannytaurus hey thanks for the updated fix! You are right the knob movements weren't being recorded with mine. I haven't got around to integrating your fixed version yet but appreciate you sharing it.
    @AxiomCrux this is my first HISE plugin so not sure when the issue appeared with Ableton, and I would look at that other PR if you want knob movements recorded - my proposed fix indeed broke that.

  • Problems with SAMPLE_DIALOG_SHOW_INSTALL etc.

    General Questions
    5
    0 Votes
    5 Posts
    189 Views
    LindonL

    @David-Healey - well that seems to work so thanks again.

  • Moonbase

    General Questions
    41
    0 Votes
    41 Posts
    9k Views
    D

    Tobias just informed me that their newer C++ module is indeed JUCE 6 compatible: https://github.com/Moonbase-sh/moonbase-cpp

    Just swapped out my self-built solution with the C++ module with the help of Opus 5.5 - works like a charm! Nevertheless looking forward to see a official integration with HISE in the future :)

  • Vibe Coding Custom Nodes

    ScriptNode
    7
    0 Votes
    7 Posts
    667 Views
    griffinboyG

    @scottmire said in Vibe Coding Custom Nodes:

    Now, I'm trying to do as much as I can on my own without bothering too many people

    Feel free to bother me, I could talk about DSP all day. It's already the thing I do day and night.

  • 0 Votes
    17 Posts
    932 Views
    David HealeyD

    @duma That is the only way - compiling HISE and compiling plugins is the same process whether you use a precompiled build of HISE or not.

  • 2 Votes
    28 Posts
    2k Views
    C

    @cartemtune thanks folks! So Australia, New Zealand, and Japan seem to be the countries that I need to take a look at. I actually can easily unblock these countries on my store and set up custom tax rates on my store so I can at least collect the taxes, but I definitely need to do more research on how to remit them correctly. maybe after that then I'll start thinking about moving to an MOR if I need to. I'm just already so cozy here lol migrating platforms is so much work :')

  • macOS Golden Gate! Compatibility Issues?

    General Questions
    17
    0 Votes
    17 Posts
    1k Views
    ILIAMI

    @dannytaurus Thank you so much!

    Started the process and Whish me LUCK :)

  • container.repitch failing to compile DLL

    ScriptNode
    5
    0 Votes
    5 Posts
    358 Views
    MorsM

    @resonant Yes sir im using A1, A2 isn't working for me at all it just crashes everytime when i try to load it, apparently its something to do with the top level architecture of A2 being SlimmableContainer which HISE isn't liking and A1 being top level WaveNet which works fine! Any ideas if im doing something wrong there?