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.
Posts
-
RE: Mono2Stereo behavior on stereo signalposted in ScriptNode
-
RE: Midi Seq and Track to Display in Uiposted in Scripting
@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 -
RE: Midi Seq and Track to Display in Uiposted in Scripting
@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 -
RE: Custom browser - custom preset file format???posted in General Questions
@Orvillain It's definitley a big task. Out of curiousity have you considered just "hijacking" HISE's preset system using the
UserPresetHandlerAPI? 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.
-
RE: I need 1 second of silence when plugin loads...posted in General Questions
@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.
-
RE: Dynamic reassignment of effect slotsposted in General Questions
@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
saveInPresetto false temporarily to update the JSON effect list, then reenable it again! -
RE: plugin exports on windows but does not openposted in General Questions
@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.

-
RE: Third party node modulation output slotposted in C++ Development
@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#a21b7f750657b54b09066bcbf3264506dUnfortunately 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!
-
RE: Third party node modulation output slotposted in C++ Development
@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
). -
RE: Third party node modulation output slotposted in C++ Development
@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) { } }; } -
RE: Third party node modulation output slotposted in C++ Development
@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.).

It's a bit less time consuming than setting up the global cable-> C++ system.
All you really need to do:
- If you want the display, inherit from:
public data::display_buffer_base<true>- Meta-definitions:
static constexpr bool isModNode() { return true; }; static constexpr bool isNormalisedModulation() { return true; }; // optional- Prepare the display buffer:
void prepare(PrepareSpecs specs) override { display_buffer_base<true>::prepare(specs); }- 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! } -
RE: Is there a way to pickup host transport messages directly within a custom node??posted in C++ Development
@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.
-
RE: Is there a way to pickup host transport messages directly within a custom node??posted in C++ Development
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.
-
RE: MusicDSP.org importing?posted in Newbie League
@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.
-
RE: Display slider value with custom font, size, and positionposted in Newbie League
@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=PykrsXv8aqgThis is probably worth looking into as well:
https://www.audiodevschool.com/courses/hise-bootcamp/ -
RE: I think I've figured out a better way to create parameters for a nodeposted in C++ Development
@Orvillain Nice find this looks like a big time saver (in certain scenarios). Thanks for sharing!
-
RE: Panel Callback with fxposted in General Questions
@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".
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 -
RE: Panel Callback with fxposted in General Questions
@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.
-
RE: Reference External C++ Node as Audio Sample script - is it possible?posted in Feature Requests
@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.
-
RE: Panel Callback with fxposted in General Questions
@elemen8t Sorry I had a typo in my script (I wrote
Chorusinstead ofChorus1) 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