HISE Logo Forum
    • Categories
    • Register
    • Login
    1. HISE
    2. HISEnberg
    3. Posts
    • Profile
    • Following 0
    • Followers 6
    • Topics 77
    • Posts 895
    • Groups 1

    Posts

    Recent Best Controversial
    • RE: Mono2Stereo behavior on stereo signal

      Ya try it out. Just an assumption, but most likely it is going to take the first channel (usually the left) and just duplicate it. For all intents and purposes you can just use a multi or split container.

      posted in ScriptNode
      HISEnbergH
      HISEnberg
    • RE: Midi Seq and Track to Display in Ui

      @toolife AI isn't going to help you here either (the code your sharing is more confusing than it is helpful). It would be better to start from the documentation and exploring examples.

      You really don't need code for a lot of what you are trying to achieve. Start small and build up from there.

      HiseSnippet 1454.3oc6WszaabCDlqs2zXk9HosG5Qg.D.mV2Uue3VfVoUqjsrdsUR1RIGZ.0tTRzZWx0borrZP.5w7anGKP+SzS8mT9GjRtqjkTpShgQCPOTcQb9FNjyvONCm0jQsP99TFPIR24dHfxGq1YNgOtzXHl.pZ.T9T0FPeNhEMDRetGz2GYCTT19PIfxt6.B98peTG5.IVnUP.voTrEpN1EyWgZVnF1woBzF0E6t1rSWnpEkTh5PmJ7msUiC7fVSfiPMgxoskJ3Hn+XfxWqdP5bYGjyJexznDGDOa9AIfoQYSirRkOm8fCRiRkIdh3wg.k6T1FyorNbHG4CT1QmZOuyX5LR3FbJ1GOvAIER.5H14P3JTGaYHJQAkFicrMWdP4CDqh4pissCO19R0FXa7U3qN9tefhnqrX8CPks1z81dC2Kway8tFWZq0boOZISF3RNv4HVfqbW0EBq6BklxXHBuC57onM4tBKT0kIXg0o45TpWYBT3X1qCKW7Aho1wCsoBks+WJJAx.pB1AIi3sWJHFJiNw0CCHWP4+tZhD4zHcyVKeoKyMogll9o0KOTKyrit3nyyVRWGahm0sbMKL+v4MxZTiTqzQtyZUijqaesyxT7PRwLVZNiqXvNs8gicFerd+1buwMMHsyzdvkYexAUQ8OH+g06glk8IkazaVqQ5MpnUYRM3AI6gKqoqY7KOcDJkoVMX4lEKddiRFGSZ119hN40.R2N7R8OoF6DeDyOFhQP97XFH+IbpWrhSswzncftdhnMV934i1l533GSGxhlLPlIki9sQGHQD+uWpGq4hkbpLqpCdDAxmxDawcZN0UXl+JJYqBMotXgd4skkf2ufAhbcvR5VPcL9540g2A1fl6hb8nRf+D7aOR4WgE.uMF5ODLzAKXH8zwkLTuAkGqkoZQACU6X1vAmMaT2Fo6bblDylcdN5j9lsscv8a8Typ5yKNraqKzsYGmnRpyHPJsZ0ZM5wlLrnkwfiO+jx0q2qWt4zL4aU5n7o6kxZ5LZFt87Teild4yzZZhal2sRWS8C0LMKVztTxR8qepQiy6O3DSqyxMzMSwOLjT5+mj9.QR6+FjTc7.FjMOVIn0XA6bT0NkiwEQ++QN+CA94Bf0JbuSXg6Gn1whg83qzHIl6oVkHdFdHTTjd8B3gyEn7WpknhIP3ZtvInJLgvUFrWp3w2OZx3we72ObJwhiojnTRSJG0hr2ii77H6F4EQh9lpFN7Z0I2F48ZD6ZUKOXYuKC2iL0c.hsezKfNSQWMQQ3u4yD24l8LgUXTu1DojpDLukGZg7690bvhiMwSJJK7PwT4ALw8WvDkntCn5zKAxqN2ScoXBPPHr9alfSpFj9rXwDqqXu7PLNVFRJFnKD8CERy6ptnNhHoSrhdThzKTtGeQCEgacEGJjiIi5JSQka+motNTBvkq19env7UBMKLCayEsKop7Jg3XDdzXtTxdULG5HedPiBst.wDufaBIHGvfQKaCa26Hl9ijKHVj8rB8ku7kudSzjRXCCi.3vZHUUedjnQe3UG2Use32IDC5B4g6KUUkXitT.lHPRvTNzY8nrI9hV+PB7gPGeTjWH83qNgt6MjbtTFsBSAykC9Bw.WX.1Vhgdq7o05LxCxDESDYMRzGn9lMGICVAM9UpKQhlHxUCSFAbMIyh9+n1Scj0KVuoPYqyKTHRN1HgVl0R7w74azC0MuSw3u6dntgt3CTMwbqwWuOt003ixlP+.3iK5u9STKObHxhuxA2QsR+aayzumsuMcpL+pAjyvxKLh2F5HtfagD6NQjd3u7RzB43RY4IPGDwNP30heKTlPJqrPYhkJEWEsXzmYEVvQ1O6cCPD9DI34rcEe1kPN5+rFCP7.F9YVVatT+CCSdaML0s0vz2VCybaML6s0vb2VCy+9MTVLs3TN0MLsQ7UKlkCKGpb0WMorM3uAvTY0vI
      
      posted in Scripting
      HISEnbergH
      HISEnberg
    • RE: Midi Seq and Track to Display in Ui

      @toolife What are you trying to achieve? Just display the MIDI Player on the UI? If so you can use a floatingTile and set the ContentType to MidiOverlayPanel.

      There's also some examples online about displaying it in a Panel:
      https://forum.hise.audio/topic/13081/midi-player-overlay-panel-laf/4
      https://docs.hise.dev/tutorials/midi/index.html

      posted in Scripting
      HISEnbergH
      HISEnberg
    • RE: Custom browser - custom preset file format???

      @Orvillain It's definitley a big task. Out of curiousity have you considered just "hijacking" HISE's preset system using the UserPresetHandler API? This is what I am testing out currently in a project that demands more from the preset browser than is currently available.

      My idea is to let HISE's preset system to handle all the heavy lifting while I just define custom save/load callbacks that embed extra metadata as necessary. So instead of creating a completely separate file format, I'm using UserPresetHandler.setUseCustomUserPresetModel() to replace HISE's default data structure with my own while keeping the standard .preset file format.

      As an example I am trying to define my own Tagging system and adding that information into the .xmls found in the UserPreset folder.

      It might breakdown in your use case given the client requirements here, but may be worth investigating.

      posted in General Questions
      HISEnbergH
      HISEnberg
    • RE: I need 1 second of silence when plugin loads...

      @DanH I've done exactly what David's mentioning before. I think I used the Content.callAfterDelay to set the gain knob from -100dB to 0dB after 500ms or however long is necessary.

      posted in General Questions
      HISEnbergH
      HISEnberg
    • RE: Dynamic reassignment of effect slots

      @Christoph-Hart said in Dynamic reassignment of effect slots:

      Just a small heads up that we have this now:

      https://docs.hise.dev/tutorials/ui/index.html#draggable-fx-chain

      I noticed one small anomaly about this example. If you add more effects to the example script, you need to set the panel's saveInPreset to false temporarily to update the JSON effect list, then reenable it again!

      posted in General Questions
      HISEnbergH
      HISEnberg
    • RE: plugin exports on windows but does not open

      @Oriah-Beats Any errors in the HISE console when you open the project in Windows? Are you using the same version of HISE on both systems? Also, do you have the VST3 Support flag checked in the project settings?

      There is also a useful application called pluginval that can help you determine potential issues with your plugin.

      Screenshot 2025-10-22 at 10.32.30 AM.png

      posted in General Questions
      HISEnbergH
      HISEnberg
    • RE: Third party node modulation output slot

      @ustk nice I basically setup the same system but just using HISE’s version of get/setLatencyInSamples. I’m assuming you are using the JUCE version of this in the C++ node? I believe HISEs API is exactly the same but I could be wrong.
      https://docs.juce.com/master/classjuce_1_1AudioProcessor.html#a21b7f750657b54b09066bcbf3264506d

      Unfortunately I can’t find any information about how to get a fractional latency sample, which kind of makes sense all things considered. There’s not many forum posts about this topic either, much to my surprise. Maybe @griffinboy has some ideas since I know he often sketches out his algorithms in MATLAB or Python, they maybe offer more robust ways of addressing this. I’ve just been eyeballing my results in my DAW and using Plugin Doctor but there must be better ways to dealing with this!

      posted in C++ Development
      HISEnbergH
      HISEnberg
    • RE: Third party node modulation output slot

      @ustk Sending the latency out is a pretty interesting idea. I'm currently trying to figure out how to do this in one of my plugins that needs have 0 latency between the dry and wet. Is the idea to offset the dry signal by an equal amount of latency as is introduced by the wet signal?

      I am really trying to dig into this topic and the best solutions for it. One of the biggest problems I am experiencing lately is fractional sample latency (I think the grown ups call this phase offset 😆 ).

      posted in C++ Development
      HISEnbergH
      HISEnberg
    • RE: Third party node modulation output slot

      @ustk No not all you can build it without the display buffer, that is just an option I included. Here is the most bare bones example I can think of. This should work in Scriptnode:

      // ==================================| Third Party Node Template |==================================
      
      #pragma once
      #include <JuceHeader.h>
      
      namespace project
      {
      using namespace juce;
      using namespace hise;
      using namespace scriptnode;
      
      // ==========================| The node class with all required callbacks |==========================
      
      template <int NV> struct mod_example: public data::base
      {
      	// Metadata Definitions ------------------------------------------------------------------------
      	
      	SNEX_NODE(mod_example);
      	
      	struct MetadataClass
      	{
      		SN_NODE_ID("mod_example");
      	};
      	
      	// set to true if you want this node to have a modulation dragger
      	static constexpr bool isModNode() { return true; }; // SET TO TRUE!
      	static constexpr bool isPolyphonic() { return NV > 1; };
      	// set to true if your node produces a tail
      	static constexpr bool hasTail() { return false; };
      	// set to true if your doesn't generate sound from silence and can be suspended when the input signal is silent
      	static constexpr bool isSuspendedOnSilence() { return false; };
      	// Undefine this method if you want a dynamic channel count
      	static constexpr int getFixChannelAmount() { return 2; };
      	
      	// Define the amount and types of external data slots you want to use
      	static constexpr int NumTables = 0;
      	static constexpr int NumSliderPacks = 0;
      	static constexpr int NumAudioFiles = 0;
      	static constexpr int NumFilters = 0;
      	static constexpr int NumDisplayBuffers = 0;
      	
      	// Scriptnode Callbacks ------------------------------------------------------------------------
      	
          float modValue = 0.0f; // STORE MOD VALUE
      
      	void prepare(PrepareSpecs specs)
      	{
      		
      	}
      	
      	void reset()
      	{
              modValue = 0.0f; // RESET MOD VALUE
      	}
      	
      	void handleHiseEvent(HiseEvent& e)
      	{
      		
      	}
      	
      	template <typename T> void process(T& data)
      	{
      		
      		static constexpr int NumChannels = getFixChannelAmount();
      		// Cast the dynamic channel data to a fixed channel amount
      		auto& fixData = data.template as<ProcessData<NumChannels>>();
      		
      		// Create a FrameProcessor object
      		auto fd = fixData.toFrameData();
      		
      		while(fd.next())
      		{
      			// Forward to frame processing
      			processFrame(fd.toSpan());
      		}
      		
      	}
      	
      	template <typename T> void processFrame(T& data)
      	{
              // EXAMPLE, JUST CLACULATE THE PEAK-STEREO SIGNAL
              float left = std::abs(data[0]);
              float right = std::abs(data[1]);
              float peak = std::max(left, right);
              
              // STORE FOR MOD OUTPUT
              modValue = std::min(peak, 1.0f);
      	}
      	
      	int handleModulation(double& value)
      	{
              value = (double)modValue; // OUTPUT MOD VALUE
      
      		return 1; //SET THIS TO 1 TO SEND THE VALUE OUT TO HISE!!!!!
      		
      	}
      	
      	void setExternalData(const ExternalData& data, int index)
      	{
      		
      	}
      	// Parameter Functions -------------------------------------------------------------------------
      	
      	template <int P> void setParameter(double v)
      	{
      		
      	}
      	
      	void createParameters(ParameterDataList& data)
      	{
      	
      	}
      };
      }
      
      posted in C++ Development
      HISEnbergH
      HISEnberg
    • RE: Third party node modulation output slot

      @ustk I don't think this is exactly what you are asking for, but you can access the same display/modulation system as can be found in the scriptnode-dynamics (Gate, Compressor, Peak, etc.).

      ScreenRecording2025-10-21at1.34.53PM-ezgif.com-video-to-gif-converter.gif

      It's a bit less time consuming than setting up the global cable-> C++ system.

      All you really need to do:

      1. If you want the display, inherit from:
      public data::display_buffer_base<true>
      
      1. Meta-definitions:
          static constexpr bool isModNode() { return true; };
          static constexpr bool isNormalisedModulation() { return true; }; // optional
      
      1. Prepare the display buffer:
      void prepare(PrepareSpecs specs) override
      {
          display_buffer_base<true>::prepare(specs);  
      }
      
      1. Return the mod value in handleModulaiton:
      bool handleModulation(double& v)
      {
          v = 1.0 - (double)getYourFunction();  
          
          // Update display buffer 
          updateBuffer(v, lastNumSamples);
          
          return true;  // Send Modulaiton!
      }
      
      posted in C++ Development
      HISEnbergH
      HISEnberg
    • RE: Is there a way to pickup host transport messages directly within a custom node??

      @Orvillain Nice find.

      Honestly up until now I have just been placing my C++ nodes inside of scriptnode and using that for interacting with transport/tempo information. Not always the most ideal solution but it does work in most scenarios.

      posted in C++ Development
      HISEnbergH
      HISEnberg
    • RE: Is there a way to pickup host transport messages directly within a custom node??

      I'd like to be able to poll transport start/stop and tempo changes from within a node. Is that possible, or do I have to use a data cable to feed messages from the top Hise layer?

      +1 Would really like to know about how to do this.

      Definitley a good place to start experimenting is the tempo_sync node and the tempo_sync_base class it inherits from.

      posted in C++ Development
      HISEnbergH
      HISEnberg
    • RE: MusicDSP.org importing?

      @Orvillain Actually I would argue it's a very good way of learning about DSP theory if you are already familiar with coding. I'd agree that you wouldn't necessarily get great results inside scriptnode but as a pure learning experience it can be very valuable (for envisioning the signal processing structure). I used to do this all the time in Max MSP (take block diagrams and convert them to Max patches).

      But you're other points are totally on the point. You might as well jump straight to hardcoding these in code if you're already there. Personally I've dropped environments like PureData and Max at this point as I prefer working directly in code.

      posted in Newbie League
      HISEnbergH
      HISEnberg
    • RE: Display slider value with custom font, size, and position

      @Yinxi David's videos are the best place to get started, as well as just diving into the documentation and examples found here on the forum:

      https://www.youtube.com/watch?v=3VVknix6-cY
      https://www.youtube.com/watch?v=PykrsXv8aqg

      This is probably worth looking into as well:
      https://www.audiodevschool.com/courses/hise-bootcamp/

      posted in Newbie League
      HISEnbergH
      HISEnberg
    • RE: I think I've figured out a better way to create parameters for a node

      @Orvillain Nice find this looks like a big time saver (in certain scenarios). Thanks for sharing!

      posted in C++ Development
      HISEnbergH
      HISEnberg
    • RE: Panel Callback with fx

      @elemen8t almost the exact same process. Grab a reference to the ScriptFx. Hit compile. When you start typing it out there will be a list of autocomplete features and all of the scriptnode's macros will be listed. So you need to pass the value of the button to the ScriptFx attribute "reverbbandenabled".

      Screenshot 2025-10-16 at 3.03.05 PM.png

      HiseSnippet 1419.3oc0X0saaaCElxILow8msBTfcqPtxcnHvN0MIEEE0wNIaAaI0nJ0q.8hLZI5XBSQJHQkDugBzK2i0dT5ivdC1NjT1RJ1oM0ns.yEHvjm+9NGd9ysarzmljHiQNUOYbDE4bGr2XgZXmgDl.c3dHm6gOhjnnwt1qZONhjjPCPNNK8S5KbVaYj4y+7h1DNQ3SyuBg5IY9zekExT421s0uv37CHAzSXgE3tYqC8khNRtLEvyR35nHh+HxYziIZ1pfQ+LIYHx4GwOs41a0ea+c1rIswSqu0N8aPZR2pI0+w6rcP+m1j93mTuQ85DjyJ6GvTxXOEQQSPNK2VFL1an7Bg0.8XIr9bp9PCjGXY60GH4AZWTeKpyPFOn6j.UBBzR27v1R1v1CvGwBXSuOO788FBt4RTL.5ToL7VpD7ZTDd0K.u4.ImBPZYKjtO1yOlEoxonwyswGJfWyAD3cpHTr7hp77J3NRfCgZiPxH5AwvgoRTaq50ejK7mG9rpUg2pDk64jXWqrG7lFtO20j8rwYT09CFP8U0V2RzEntdYo5RDT9lfHSrGHTGYXjT.GpstkrVlbQZmpTRw0KSFcigXBNSPcGjJ7ULoXhrcZWCzmJVxeDnRdJ8gU+yptvmoNwFIT0tJULqephVK+5X54z39TAAdQBlH7yLxZ9iEvZoqs941Gt0KyVQNxzSANdG.5LPpYoiEkcHbdenLn1T7CrN0ojhikJ5KE0zdwZUeWU2qRZvf4RKS6bZ7bIqKLi+XBVSjF1mFWHFZXDR9JmQiu9L5hEb91myBLJEGJXpWFQEWWYHJKG.x9qjgJfUkI2+dY491fFhAo3qgsGZfLPtXeKzmg3aNGwe8g6QTDcUXFj.XFQiULcDvYO54POPaM4Z38nIiTxHHPMMuE99M.0WN0jumzZb9gdsPEzzJVMc2I095LNihtE178qUO+c+VWvBTCmdQqeu0PJ6rg4Mte+aKYpkuAwpbi0JcwAcQ87gzOePOauQnqrLHkSTkaUqGnkQ.x1K0eT2CTjvTiK9x+Eq+8MEh2G2ko7GNeLVYNXTWb7U.iYS8tK11kOGfKiO3Me6FwUEOo8rw32AmOrYdC2b9KbdqrnXZDIldhrKmLtVBILhSeEfwG41mK8G4w9C5r8+hrPnsliZ9CIBH6LYQZStxMNpz3i+n7JYphIN6HBLvBpRvGmF5A6O4S6jgN3NmJ5tk1y00m04EdTQf4v+BexH1Pe1IiXiIDyazhNlptPFOx7bj8cnJ0F6SLA4SGbYCztbt7BcANKKKEdCL20UxGGMTJX95qrbLAo6FJS0cCrvMOEu8jmiIHG1B7DBiqy38RSfIDAuT3A5wr5oyR8nwIFatJt9Fv+fJfikA.oUOf3Cw7wcI5NF2GqG5.4sz3M7ml+VxMJlBY2AsDYsVmrspEYfCEZ5nA6ppeM6RhAwfkmzyAp3rTg4B17Y8InZsh0zGlzSS0mvQ8rCYfPg1J13swIVQy5cwIxApS6avGpja8CEbqhLMquTVIebm4JPuxMC5WgquC6EJkpgP5pYw+LFwNOPat44m2BaW5prKda7fKy1FaNt0TY9DdTkhdDpvKk1YmbBT2QLQuxS7gjSxk8t5V.dJZjMKMmOuQzKrPuHmZOCVD.53.QBzIzKUmHMpCpy.jaL6swuVDPG.OiAnqXpO7h8nCHob0L2i95i6Uw+lYf6+uP8JXCueU.8LYONE8Gadeoe5.5KuOt+kf0DDdg8BfYi6wRrFrjSflw1l0VETynKs2zVJGERLc4WnUa+lLSJj3GKOM6mxoC62xbCT7JLsAVCej9r6Lq6iPgvOH+Te+xpZFA2bQE7wKpfMWTAexhJ3VKpfaunBtymVP8+eI6lpjg1DYn1n69ljPGm8ypffl8n+CvJbkQs
      
      posted in General Questions
      HISEnbergH
      HISEnberg
    • RE: Panel Callback with fx

      @elemen8t Yea that is essentially it, just wrap your network in a soft_bypass node and disable it with a macro control. So in your example just connect the reverbandenabled macro to one of your buttons.

      posted in General Questions
      HISEnbergH
      HISEnberg
    • RE: Reference External C++ Node as Audio Sample script - is it possible?

      @Christoph-Hart I'll try it again but last time I tried it failed to compile. The recorder node is more or less what I am after though. There's a number of features my node possesses that aren't featured here like playback speed, reversing, etc. But I should study this node and see if I can't replicate it.

      posted in Feature Requests
      HISEnbergH
      HISEnberg
    • RE: Panel Callback with fx

      @elemen8t Sorry I had a typo in my script (I wrote Chorus instead of Chorus1) and didn't remove the processor and parameter ID correctly. Does this work as you intend?

      HiseSnippet 981.3ocuV0raaaDDdoj1TK0lfFf1qEr5DSQfAokhrMBJLijrZEZsiPTpa.5gzUjqLWXxcEHW5Dgh.jK48JuC4XuzGg9FzNKWJQxZ4TGg1vCBZ94alONyrC2IwBOZRhHFYz5oKWPQFeFd5RtLXP.gwQiGhLtC9DRhjFapU0e4BRRB0GYXT+6TJLZ1.k87mG0mDR3dzBUHzYBlG8GYQLYg1It+.KLbDwm9TVTIu65N1SvGHBEo.episQKHdWPNmdJQ4VML56IIAHiuAeX286MaeuC1qK04P6dGLygzk1qK0qyA66O6vtzNOv1w1lfLt0w9LoHdpjHoIHiF8E9KmFHdAWmfyXIrYgTkfCZJjYs5QhPe0qnRKZP.KzexpBUBBhxjhxVccY6Kvmv7Yq0WT997LClEHJW.MpUkd0qPOmxzytD81.kLJQoFZJcW7TuX1BYgEEe9T7XNzMmSf9TYpn8EU6KqgGH.O3xciHWPGECBqQX0y199lvO26gsZA8pDo4kD0jgHNMww7aMylc18bp734yodRq14lZWEvDBmFtG3+pTAHFHhVH3ffUasYElBH8SkRA+5wjaOKQLdHiSMmmx8jLAeE1A8sf3IiEg2GBYXJ8ds9sVMyY3tIT4p5g0WqM+vVlvilMJ6VsuT2PZuJ.W0CJm.N3WxiWALJmAJWFnov.RX3LX71ZM4.WWyXA+Tgj9XtUFEa8pVl+SSymuQa4QOjFuQypCbwuOfV7znYz3xEHkivPU0IU70OoV9fjmtWUxQAeLmIe7BJ+5NdgxavvTcsbVAtJylouS9LstngXvnaSrVvAkQ4x6iPe.v2aCv+owCIRh5zUNk.ZtfFKYpJfwP5kvtM8Ysl3gzjKjhEPgZ8PI7+a.qe45T9Zh6xBgybQkhzszQ51qNSql3xBzN3r+esw4sybeAyWFrVg6u5FPYmGTrP90+RkT03FTqJRla51S5xw4OR+vI8U24AaaE9ogDY0UvpOTka.l1qr2SsaimvjKK24+Oau7Mkh2EOgI8B1LGqsANpNb7+.Gy+Z1sw582EDrAdzy9H7oqOQm+cv5sxYotYtfSk7+DHs4kC2Ncd2Q+bo4k29Uu42OZDk5qVvV1ogzPR0Fc8a7agy6uH9DQpjwO+DhLlAS03SSilB2iwiB0PNLqq1YZTSscSKaqjUjXJk6mI7WvStQGkrQtQmUF+njiHhWr344emT0d1ISC7dyytEVS35ffr4UV2hPQvEcdtmW0PcEf6ss.6rs.6ts.ev1Br21Bb+sE3A+6.U2C8QoRQjdACBcxjiy99lgww5KsnNWg9a.Zg0jO
      
      posted in General Questions
      HISEnbergH
      HISEnberg