Don't know if this is the done thing really, but I wanted to show off:
https://youtu.be/1kMHloRQLcM
Best posts made by Orvillain
-
I wrote a reverbposted in C++ Development
-
I wrote a bbd delayposted in C++ Development
Again, wasn't sure where to put this. But I created my own node.
Modelled analog bucket brigade delay. I'm starting to build up quite a nice collection of delay and reverb utilities now!
-
RE: I wrote a reverbposted in C++ Development
@Chazrox I might do a video or two on everything I've learned!
-
RE: Need filmstrip animationsposted in General Questions
@d-healey I really like that UI. Very simple, accessible, and smooth looking - for lack of a better word!
-
RE: Can We PLEASE Just Get This Feature DONEposted in Feature Requests
Free mankini with every commercial license???
-
RE: I wrote a reverbposted in C++ Development
@Chazrox said in I wrote a reverb:
@Orvillain Please.
I've been waiting for some dsp videos! I've been watching ADC's everyday on baby topics just to familiarize myself with the lingo and what nots. I think im ready to start diving in! There are some pretty wicked dsp guys in here for sure and I'd love to get some tutuorials for writing c++ nodes.There's two guys who got me started in this. One is a dude called Geraint Luff aka SignalSmith. This is probably his most accessible video:
https://youtu.be/6ZK2GoiyotkThen the other guy of course is Sean Costello of ValhallaDSP fame:
https://valhalladsp.com/2021/09/22/getting-started-with-reverb-design-part-2-the-foundations/
https://valhalladsp.com/2021/09/23/getting-started-with-reverb-design-part-3-online-resources/In essence, here's the journey; assuming you know at least a little bit of C++
- Learn how to create a ring buffer (aka my Ring Delay thread)
- Learn how to create an all-pass filter using a ring buffer.
- Understand how fractional delays work, and the various types of interpolation.
- Learn how to manage feedback loops.
Loads of resources out there for sure!
-
RE: Orv's ScriptNode+SNEX Journeyposted in ScriptNode
Lesson 5 - SNEX code in a bit more detail.
So I'm by no means an expert in C or C++ - in fact I only just recently started learning it. But here's what I've sussed out in regards to the HISE template.... and template is exactly the right word, because the first line is:
template <int NV> struct audio_loaderSomewhere under the hood, HISE must be setup to send in an integer into any SNEX node, that integer corresponding to a voice. NV = new voice perhaps, or number of voices ????
The line above declares a template that takes this NV integer in, and creates a struct called audio_loader for each instance of NV. Indeed we can prove this by running the following code:
template <int NV> struct audio_loader { SNEX_NODE(audio_loader); ExternalData data; double note = 0.0; // Initialise the processing specs here void prepare(PrepareSpecs ps) { } // Reset the processing pipeline here void reset() { } // Process the signal here template <typename ProcessDataType> void process(ProcessDataType& data) { } // Process the signal as frame here template <int C> void processFrame(span<float, C>& data) { } // Process the MIDI events here void handleHiseEvent(HiseEvent& e) { double note = e.getNoteNumber(); Console.print(note); } // Use this function to setup the external data void setExternalData(const ExternalData& d, int index) { data = d; } // Set the parameters here template <int P> void setParameter(double v) { } };There are only three things happening here:
- We set the ExternalData as in a previous post.
- We establish a variable with the datatype of double called 'note' and we initialise it as 0.0. But this value will never hold because....
- In the handleHiseEvent() method, we use e.getNoteNumber() and we assign this to the note variable. We then print the note variable out inside of the handleHiseEvent() method.
Now when we run this script, any time we play a midi note, the console will show us the note number that we pressed. This is even true if you play chords, or in a scenario where no note off events occur.
That's a long winded way of saying that a SNEX node is run for each active voice; at least when it is within a ScriptNode Synthesiser dsp network.
The next line in the script after the template is established is:
SNEX_NODE(audio_loader);This is pretty straight forward. The text you pass here has to match the name of the script loaded inside your SNEX node - not the name of the SNEX node itself.

Here you can see my SNEX node is just called: snex_node.
But the script loaded into it is called audio_loader, and so the reference to SNEX_NODE inside the script has to also reference audio_loader.
-
RE: scriptAudioWaveForm and updating contentsposted in General Questions
@d-healey said in scriptAudioWaveForm and updating contents:
@Orvillain Did you try,
AudioWaveform.set("processorId", value);?Yeah I did, and it does update it based on a follow up AudioWaveform.get('processorId') call - but the UI component doesn't seem to update, and still shows data from the previous processorId. When I compile the script, then the UI updates one time... but not on subsequent calls to the set method.
I figured I needed to call some kind of update() function after setting the processorId, but no such luck so far.
-
RE: Third party C++ log to consoleposted in General Questions
Don't forget to add this to HISE's preprocessor definitions too:
JUCE_LOG_ASSERTIONS=1 -
RE: Setting UI values from a combobox - doesn't fall through to linked processorId+parameterId ??posted in General Questions
Oh for n00b sake... I just call .changed() it would seem.
Latest posts made by Orvillain
-
RE: Is there a way to give a custom c++ node parameter modulation support without wrapping in a network??posted in C++ Development
Also, note to self. Don't name your custom c++ node the same name as the network. It won't compile. Dohhhhh.
-
RE: Is there a way to give a custom c++ node parameter modulation support without wrapping in a network??posted in C++ Development
@Oli-Ullmann said in Is there a way to give a custom c++ node parameter modulation support without wrapping in a network??:
Oh, I didn't know that this high number works.
NUM_HARDCODED_FX_MODS=32 NUM_HARDCODED_POLY_FX_MODS=32Have you already compiled your project with these preprocessor definitions and does it work?
Yep it does work!
-
Is there a way to give a custom c++ node parameter modulation support without wrapping in a network??posted in C++ Development
I've written a bunch of c++ effects, and I notice that they appear as options in the HardcodedMasterFX and HardcodedPolyFX modules, even without wraping them in a scriptnode network.
I was wondering if the parameters can be linked to the wider HISE modulation system, without wrapping them in a scriptnode network?
I have these preprocessor definitions specified in my project:
HISE_NUM_SCRIPTNODE_FX_MODS=32 HISE_NUM_POLYPHONIC_SCRIPTNODE_FX_MODS=32 NUM_HARDCODED_FX_MODS=32 NUM_HARDCODED_POLY_FX_MODS=32But I'm not really sure what I would need to do in my c++ for the effects, to make this happen... if it is even possible?
-
RE: Third party C++ log to consoleposted in General Questions
Don't forget to add this to HISE's preprocessor definitions too:
JUCE_LOG_ASSERTIONS=1 -
RE: Dynamic reassignment of effect slotsposted in General Questions
This thread feels like the future.
-
RE: User presets not showing up in exported pluginposted in General Questions
So the plot thickens.... I installed on Windows, and it was all fine. Installed on Mac... de nada.... new presets don't show up, even after wiping the App Support folder for the plugin.
-
RE: Setting ControlCallback w/ Loops ?posted in Scripting
Is that the full script? You don't seem to ever be calling allSampleVolumeKnobs ???
-
RE: User presets not showing up in exported pluginposted in General Questions
@Lindon said in User presets not showing up in exported plugin:
@Orvillain did you changee the name? even slightly?
Tell her to remove the contents of AppData for the plugin and try reinstalling...
Of the plugin? I didn't no.
-
RE: User presets not showing up in exported pluginposted in General Questions
@ulrik said in User presets not showing up in exported plugin:
@Orvillain said in User presets not showing up in exported plugin:
This isn't a fresh install if that matters
I think it matters, because when installing fresh the plugin should extract all presets and put them in the AppData folder.
You could ask your colleague to remove the AppData folder just for testingYeah asked them to do that, and no difference :-/
-
User presets not showing up in exported pluginposted in General Questions
Any ideas on this? I've shipped a plugin and I've got embed user presets turned on. I even see them appearing in the GIT repo I have for the plugin, inside the UserPresets folder. But seemingly they don't get embedded and aren't showing up for my colleague after she's installed the plugin. This isn't a fresh install if that matters. A version of the plugin has been installed on her machine before.