HISE Logo Forum
    • Categories
    • Register
    • Login
    1. HISE
    2. Dan Korneff
    3. Topics
    • Profile
    • Following 1
    • Followers 6
    • Topics 194
    • Posts 2,642
    • Groups 1

    Topics

    • Dan KorneffD

      Equivalent to Reaper UI button?

      Watching Ignoring Scheduled Pinned Locked Moved Scripting
      3
      0 Votes
      3 Posts
      179 Views
      A

      David is right.

      If you're creating controls using a helper function, simply create another one. You can then be increasing a counter which you can use to automatically set up the sliders in order for every control created.

      Callbacks could be tricky, because if you simply put the function into the callback for another control, depending on the exact situation, you could end up with the same stuff executing twice, which may or may not be problem, but is something you should be aware of.

      So you'll have to decide whether you'll be assigning a function as a callback for both controls, or do something else. You could use a broadcaster to automatically update the values of the simplified slider whenever the main control changes (attaching controls could be automatized with the helper function). The helper function should also let you automatize the assignment of a control callback for the simplified sliders: this would be an inline function defined outside of the helper function, which would be calling .changed() of the main slider. You could also automate the targeting of the correct pair component via ID by deciding on a naming scheme (e.g. Slider1_main and Slider1_simplified) and using the component argument of the callback function to get the target.

      This not only simplifies your code by letting you only worry about the true functionality of a single callback function per control, but calling changed() for the main slider makes sure that that particular component gets set as "last touched" for the DAW, letting you maintain the mirage of it all being a "single control".

      Another way would be to actually be using only a single set of controls, storing dimensioning and positioning data into JSON, creating a switch in your every LAF and changing all these properties when the simplified GUI button gets clicked. Depending on your GUI setup, you might also have to reparent controls (can you even do this beyond on init?), so this approach doesn't scale super well and would need a bit of tailoring for each individual GUI.

    • Dan KorneffD

      Scriptnode - mono sum

      Watching Ignoring Scheduled Pinned Locked Moved Scripting
      14
      0 Votes
      14 Posts
      436 Views
      DanHD

      @orange the jdsp version was fine actually

    • Dan KorneffD

      Absolute X/Y for mouse?

      Watching Ignoring Scheduled Pinned Locked Moved Scripting
      4
      0 Votes
      4 Posts
      164 Views
      ustkU

      @Dan-Korneff If they are real components then @aaronventure is right, but if they are child panels (from addChildPanel()) then I reckon having an issue not getting the right global position

    • Dan KorneffD

      Floating Tile - scrolling audio?

      Watching Ignoring Scheduled Pinned Locked Moved General Questions
      5
      0 Votes
      5 Posts
      245 Views
      A

      @griffinboy that's the issue with the UI timers, they're not consistent and having them go too fast clogs up the message thread on something like M1 air.

      It should definitely be possible, there have been plugins around since forever that do this, so JUCE must have some sort of native functionality which lets you get away from the timer method.

      @Christoph-Hart since the plotter can already natively pull from a modulator, is it possible to make it pull from an external buffer instead for a smoother performance?

    • Dan KorneffD

      drawDropShadowFromPath error: Point is not an array

      Watching Ignoring Scheduled Pinned Locked Moved Solved Scripting
      3
      0 Votes
      3 Posts
      178 Views
      Dan KorneffD

      @aaronventure Thank you!

    • Dan KorneffD

      'snex::Types::SpanOperators<float *>::assign' is not a valid template type argument for parameter '_Ty2'

      Watching Ignoring Scheduled Pinned Locked Moved Bug Reports
      8
      0 Votes
      8 Posts
      565 Views
      O

      @kameron Not the latest as it turns out :beaming_face_with_smiling_eyes:

    • Dan KorneffD

      Unreal Engine/Unity and HISE

      Watching Ignoring Scheduled Pinned Locked Moved General Questions
      5
      0 Votes
      5 Posts
      453 Views
      HISEnbergH

      @Dan-Korneff Great may take me a few weeks but if I go down this rabbit hole I will post any updates I make!

    • Dan KorneffD

      Markdown Floating Tile - stylize scroll bar

      Watching Ignoring Scheduled Pinned Locked Moved Scripting
      2
      0 Votes
      2 Posts
      191 Views
      d.healeyD

      @Dan-Korneff There is scrollbar look and feel, perhaps that will work

    • Dan KorneffD

      control.timer Channel mismatch. How does this thing work?

      Watching Ignoring Scheduled Pinned Locked Moved Scripting
      1
      0 Votes
      1 Posts
      186 Views
      No one has replied
    • Dan KorneffD

      error C2666: 'snex::hmath::pow': ove rloaded functions have similar conversions

      Watching Ignoring Scheduled Pinned Locked Moved ScriptNode
      4
      0 Votes
      4 Posts
      524 Views
      Dan KorneffD

      @Christoph-Hart said in error C2666: 'snex::hmath::pow': ove rloaded functions have similar conversions:

      The yellow light also indicates that there is a compiler warning and if you click on the debug symbol

      I hadn't noticed this before. Very handy!

    • Dan KorneffD

      Is there a bandpass filter?

      Watching Ignoring Scheduled Pinned Locked Moved ScriptNode
      3
      0 Votes
      3 Posts
      370 Views
      Dan KorneffD

      @DanH Thanks! I just found it in scriptnode. bpf.png

    • Dan KorneffD

      Initialize value at init?

      Watching Ignoring Scheduled Pinned Locked Moved Scripting
      4
      0 Votes
      4 Posts
      295 Views
      Dan KorneffD

      Got a working solution. Just declare the variable as undefined, and then use an if statement in the knob callback to define if == undfined

    • Dan KorneffD

      Exporting for Linux

      Watching Ignoring Scheduled Pinned Locked Moved General Questions
      3
      0 Votes
      3 Posts
      330 Views
      H

      @d-healey JUCE 7 only added official support for LV2. CLAP support is not yet official. They also have yet to add any support for Wayland, which will become a problem soon - Linux DAWs are starting to consider Wayland support, as evidenced by PreSonus' beta release. VST3 GUIs straight up do not show up as of right now.

    • Dan KorneffD

      Change modifier keys?

      Watching Ignoring Scheduled Pinned Locked Moved Scripting
      2
      0 Votes
      2 Posts
      232 Views
      A

      @Dan-Korneff For sliders: https://docs.hise.audio/scripting/scripting-api/scriptslider/index.html#createmodifiers

      My experience so far is that you can disable or remap them here. If you want custom behavior, you can then use a mouse broadcaster to set up your own behavior.

      Buttons always trigger on click so if you want to do something else other than to flip it, you'll have to use a panel, but then you lose out on the snappy 0-1 DAW automation. You could try to use a slider and really slow down the mouse drag, use the broadcaster to switch 0/1 on click but I don't know if the DAW automation is snappy when the slider step size is 1 and the range 0-1.

    • Dan KorneffD

      has something changed in Scripnode compiled nodes?

      Watching Ignoring Scheduled Pinned Locked Moved Scripting
      3
      0 Votes
      3 Posts
      275 Views
      Dan KorneffD

      @Christoph-Hart said in has something changed in Scripnode compiled nodes?:

      Can you elaborate on that?

      This part is not related to Scriptnode (as far as I can tell).
      If I create a variable in my script and hit Compile, sometimes it doesn't show up in the ScriptWatchTable. I have to hit Shift+F5. And even then, sometimes that doesn't fix it. I have to restart. Even then the variable doesn't show up until I hit compile.

      I'm noticing a lot of overall crashes with HISE standalone as well.

      Any my exported plugins are now crashing with:

      Exception thrown at 0x00007FF971D0567C in PluginDoctor64.exe: Microsoft C++ exception: juce::JSONParser::ErrorException at memory location 0x00000035EA8FF4E8. The thread 0x46b8 has exited with code 0 (0x0). The thread 0x2abc has exited with code 0 (0x0). Debug Error! HEAP CORRUPTION DETECTED: after Normal block (#1714932) at 0x000001CCB2C5BF70. CRT detected that the application wrote to memory after end of heap buffer.

      Looks like I have a nice long day of debugging ahead of me :detective:

    • Dan KorneffD

      Mouse scroll + combo ?

      Watching Ignoring Scheduled Pinned Locked Moved Scripting
      6
      0 Votes
      6 Posts
      415 Views
      Dan KorneffD

      @Christoph-Hart Is there some hidden way to attach mouse scroll to the broadcaster?
      I'm only seeing these events:

      "clicked": false, "doubleClick": false, "rightClick": false, "mouseUp": false, "mouseDownX": 80, "mouseDownY": 16, "x": 80, "y": 16, "shiftDown": false, "cmdDown": false, "altDown": false, "ctrlDown": false, "hover": false, "insideDrag": 0, "drag": false, "isDragOnly": false, "dragX": 0, "dragY": 0
    • Dan KorneffD

      How to debug Server.isOnline()

      Watching Ignoring Scheduled Pinned Locked Moved Scripting
      6
      0 Votes
      6 Posts
      538 Views
      d.healeyD

      @Christoph-Hart said in How to debug Server.isOnline():

      I know that sometimes on macOS there is an issue with connecting to non SSL domains.

      That might be why I did this

      Link Preview Image Added custom plist entry to Mac exporter template by davidhealey · Pull Request #328 · christophhart/HISE

      I noticed that the xcodeValidArchs for the plugin template is set to %ARM_ARCH% is that correct? Is it worth removing all of the IPP stuff from the MacOS exporters? Or are people still using it there?

      favicon

      GitHub (github.com)

    • Dan KorneffD

      Scriptnode - External Display Buffer when plugin bypassed

      Watching Ignoring Scheduled Pinned Locked Moved Scripting
      20
      0 Votes
      20 Posts
      1k Views
      Dan KorneffD

      @Christoph-Hart After doing a bunch of testing, I've found that the magic number appears to be 48.
      When I do the math:

      auto numSamples = (double)getMainController()->getOriginalBufferSize(); auto sampleRate = (double)getMainController()->getOriginalSamplerate(); auto blockLengthSeconds = numSamples / sampleRate; auto deltaForBypassDetection = roundToInt(1000.0 * 48.0 * blockLengthSeconds); buffer = 64 sample rate = 48000 1000 * 48 * blockLengthSeconds = 64

      Is it a coincidence that the magic number is equal to the buffer size of my audio card or that the value is a multiple of my sample rate?

      Now the part that is driving me crazy....
      Even with the increased sampling time, I can get the transport handler to trigger false positives when I move an item on my screen. Check out the console:

      false positive.gif

      It appears to not only be affected by the buffer, but also the way getApproximateMillisecondCounter is being calculated.

    • Dan KorneffD

      isMetaParameter + automation help

      Watching Ignoring Scheduled Pinned Locked Moved Scripting
      5
      0 Votes
      5 Posts
      463 Views
      Dan KorneffD

      @Christoph-Hart hero! Confirmed working now.

    • Dan KorneffD

      Help with: Buffer_Not_Writeable_By_vImage

      Watching Ignoring Scheduled Pinned Locked Moved General Questions
      18
      0 Votes
      18 Posts
      776 Views
      Dan KorneffD

      @Christoph-Hart Does this look right? It's throwing a bunch of errors.

      void MessageManager::Lock::exit() const noexcept { if (blockingMessage != nullptr) { { ScopedLock lock(blockingMessage->ownerCriticalSection); blockingMessage->owner.set(nullptr); } blockingMessage->releaseEvent.signal(); blockingMessage = nullptr; } const ScopeGuard scope{ [&] { blockingMessage = nullptr; } }; blockingMessage->stopWaiting(); if (!blockingMessage->wasAcquired()) return; if (auto* mm = MessageManager::instance) { jassert(mm->currentThreadHasLockedMessageManager()); mm->threadWithLock = {}; } }

      EDIT: operator error. This works:

      void MessageManager::Lock::exit() const noexcept { if (lockGained.compareAndSetBool (false, true)) { auto* mm = MessageManager::instance; jassert (mm == nullptr || mm->currentThreadHasLockedMessageManager()); lockGained.set (0); if (mm != nullptr) mm->threadWithLock = {}; if (blockingMessage != nullptr) { { ScopedLock lock(blockingMessage->ownerCriticalSection); blockingMessage->owner.set(nullptr); } blockingMessage->releaseEvent.signal(); blockingMessage = nullptr; } } }

      Testing now