Forum
    • Categories
    • Register
    • Login
    1. Home
    2. Orvillain
    • Profile
    • Following 1
    • Followers 0
    • Topics 105
    • Posts 817
    • Groups 0

    Orvillain

    @Orvillain

    215
    Reputation
    101
    Profile views
    817
    Posts
    0
    Followers
    1
    Following
    Joined
    Last Online

    Orvillain Unfollow Follow

    Best posts made by Orvillain

    • I wrote a reverb

      Don't know if this is the done thing really, but I wanted to show off:
      https://youtu.be/1kMHloRQLcM

      posted in C++ Development
      OrvillainO
      Orvillain
    • I wrote a bbd delay

      Again, wasn't sure where to put this. But I created my own node.

      https://youtu.be/-siB1UJfrD0

      Modelled analog bucket brigade delay. I'm starting to build up quite a nice collection of delay and reverb utilities now!

      posted in C++ Development
      OrvillainO
      Orvillain
    • RE: I wrote a reverb

      @Chazrox I might do a video or two on everything I've learned!

      posted in C++ Development
      OrvillainO
      Orvillain
    • RE: Third party HISE developers

      I'm actually moving into more JUCE C++ based projects now. But I've spent 18 years in music tech. Used to work for FXpansion, then ROLI, then inMusic until mid last year when I made the transition to developer. I've got a couple of HISE projects on the go right now - more synths and effects than sample libraries at the moment, but I've done sample libraries throughout my career, with a specific focus in drum libraries. I have a few Kontakt ports in the pipeline for this year too.

      Eventually will launch my own plugin company as well. That is the goal.

      posted in General Questions
      OrvillainO
      Orvillain
    • Verb Factory

      More showoff stuff from me. I've built my own standalone JUCE app that allows me to build effects processors on the fly:
      https://youtu.be/ogaE-hkUcsU

      This is primarily a dev tool for my own projects. The eventual plan is to have it export c++ code, and maybe even have it spit out a custom HISE node that I can just drop into projects too!!

      posted in C++ Development
      OrvillainO
      Orvillain
    • RE: Orv's ScriptNode+SNEX Journey

      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_loader
      

      Somewhere 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:

      1. We set the ExternalData as in a previous post.
      2. 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....
      3. 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.

      2aa2dbe0-4ea2-40b8-8a45-49d96ada26ec-image.png

      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.

      posted in ScriptNode
      OrvillainO
      Orvillain
    • RE: Need filmstrip animations

      @d-healey I really like that UI. Very simple, accessible, and smooth looking - for lack of a better word!

      posted in General Questions
      OrvillainO
      Orvillain
    • RE: I made a really good sounding JUNO-6 emulation for free, shared it in the KVR forum - this is what happened

      I've been posting on KvR on and off since I was a teenager. FFS, I'm sooooooo olllldddddd.

      But yes ... it has always been a bit of a Wild West type of place. Not for the feint of heart. I had a guy stalking me around the forum recently, commenting on all my posts, telling me how he was going to make sure everyone knew what a POS I was - for the crime of having and then leaving a job I did my best at for 18 odd years!

      There's not enough asylum's in the world apparently!

      Having said that, there are some easy wins you can do to head it all off at the pass:

      • Just have Claude build you a stupid installer. Use Inno on Windows, and MacOS packages; make sure MacOS performs a postscript process to remove the quarantine flag that Apple helpfully decide to add to almost anything you download through a browser these days.
      • Have a proper list of features, known issues, known omissions, and "keep it simple, stupid" - don't give them any more ammunition!
      • There's a big difference between "I had a crash", "there's a bug" and "I don't like this" - a lot of the time, you can simply ignore the "I don't like this" stuff.
      posted in General Questions
      OrvillainO
      Orvillain
    • RE: Third party HISE developers

      @HISEnberg said in Third party HISE developers:

      A bit abashed posting here with so much talent but here it goes!

      Wouldn't worry about that, you've been very helpful in getting me up and running in various threads! So thanks! (and to everyone else also!)

      posted in General Questions
      OrvillainO
      Orvillain
    • RE: Transient detection within a loaded sampler - SNEX ????

      @HISEnberg
      Yes I wrote a custom transient detector in a c++ node, and made sure it utilised an audio file, which I can load in my UI using the audio waveform floating tile.

      I implemented spectral flux extraction:

      • Take your audio.
      • Perform an FFT on it.
      • Extract the spectral flux envelope from the FFT.
      • Downsample the spectral flux envelope (optional but can help accuracy)
      • Perform peak picking on the spectral flux envelope.

      I used the stock JUCE FFT processor.

      posted in General Questions
      OrvillainO
      Orvillain

    Latest posts made by Orvillain

    • RE: Latest develop won't build in VS2022

      @Christoph-Hart

      MSBuild version 18.5.4+cb4e32d21 for .NET Framework
      
        CopyProtection.cpp
        Plugin.cpp
        PresetData.cpp
        factory.cpp
        RNBO.cpp
        BinaryData.cpp
        include_hi_core.cpp
        include_hi_core_02.cpp
        include_hi_core_03.cpp
        include_hi_core_04.cpp
        include_hi_core_05.cpp
        include_hi_dsp_library_01.cpp
        include_hi_dsp_library_02.cpp
        include_hi_frontend.cpp
        include_hi_lac.cpp
        include_hi_lac_02.cpp
        include_hi_rlottie.cpp
        include_hi_rlottie_1.cpp
        include_hi_rlottie_2.cpp
        include_hi_rlottie_4.cpp
        include_hi_rlottie_5.cpp
        include_hi_rlottie_6.cpp
        include_hi_rlottie_7.cpp
        include_hi_rlottie_8.cpp
        include_hi_rlottie_9.cpp
        include_hi_rlottie_10.cpp
        include_hi_rlottie_11.cpp
        include_hi_rlottie_12.cpp
        include_hi_rlottie_13.cpp
        include_hi_rlottie_14.cpp
        include_hi_rlottie_15.cpp
        include_hi_rlottie_16.cpp
        include_hi_rlottie_17.cpp
        include_hi_rlottie_18.cpp
        include_hi_rlottie_19.cpp
        include_hi_rlottie_20.cpp
        include_hi_rlottie_21.cpp
        include_hi_rlottie_22.cpp
        include_hi_rlottie_23.cpp
        include_hi_rlottie_24.cpp
        include_hi_rlottie_25.cpp
        include_hi_rlottie_26.cpp
        include_hi_rlottie_27.cpp
        include_hi_rlottie_28.cpp
        include_hi_rlottie_29.cpp
        include_hi_rlottie_30.cpp
        include_hi_rlottie_31.cpp
        include_hi_rlottie_32.cpp
        include_hi_rlottie_33.cpp
        include_hi_rlottie_34.cpp
        include_hi_rlottie_35.cpp
        include_hi_scripting_01.cpp
        include_hi_scripting_02.cpp
        include_hi_scripting_03.cpp
        include_hi_scripting_04.cpp
        include_hi_snex.cpp
        include_hi_snex_62.cpp
        include_hi_streaming.cpp
        include_hi_tools_01.cpp
        include_hi_tools_02.cpp
        include_hi_tools_03.cpp
        include_hi_zstd_1.cpp
        include_hi_zstd_2.cpp
        include_hi_zstd_3.cpp
        include_juce_audio_basics.cpp
        include_juce_audio_devices.cpp
        include_juce_audio_formats.cpp
        include_juce_audio_plugin_client_utils.cpp
        include_juce_audio_processors.cpp
        include_juce_audio_processors_headless.cpp
        include_juce_audio_utils.cpp
        include_juce_core.cpp
        include_juce_cryptography.cpp
        include_juce_data_structures.cpp
        include_juce_dsp.cpp
        include_juce_events.cpp
        include_juce_graphics.cpp
        include_juce_gui_extra.cpp
        include_juce_opengl.cpp
        include_juce_osc.cpp
        include_juce_product_unlocking.cpp
        include_melatonin_blur.cpp
      !H:\development\HISE\HISE\hi_tools\simple_css\Renderer.h(333,4): error C2872: 'Rectangle': ambiguous symbol [E:\The Audio Programmer\Repositories\cubeatz-hybrid-synth\cubeatz-hybrid-synth-hise-project\Binaries\Builds\VisualStudio2026\cubeatz-hybrid-synth-hise-project_SharedCode.vcxproj]
        (compiling source file '../../../AdditionalSourceCode/nodes/factory.cpp')
            C:\Program Files (x86)\Windows Kits\10\Include\10.0.26100.0\um\wingdi.h(4639,24):
            could be 'BOOL Rectangle(HDC,int,int,int,int)'
            H:\development\HISE\HISE\JUCE\modules\juce_graphics\geometry\juce_Rectangle.h(66,7):
            or       'juce::Rectangle'
            H:\development\HISE\HISE\hi_tools\simple_css\Renderer.h(333,4):
            the template instantiation context (the oldest one first) is
                H:\development\HISE\HISE\hi_tools\simple_css\Renderer.h(365,95):
                see reference to function template instantiation 'juce::Rectangle<float> hise::simple_css::Positioner::slice<hise::simple_css::Positioner::Direction::Top>(const juce::Array<hise::simple_css::Selector,juce::DummyCriticalSection,0> &,float)' being compiled
        
      !H:\development\HISE\HISE\hi_tools\simple_css\Renderer.h(333,14): error C2062: type 'float' unexpected [E:\The Audio Programmer\Repositories\cubeatz-hybrid-synth\cubeatz-hybrid-synth-hise-project\Binaries\Builds\VisualStudio2026\cubeatz-hybrid-synth-hise-project_SharedCode.vcxproj]
        (compiling source file '../../../AdditionalSourceCode/nodes/factory.cpp')
        
      !H:\development\HISE\HISE\hi_tools\simple_css\Renderer.h(336,33): error C2065: 'copy': undeclared identifier [E:\The Audio Programmer\Repositories\cubeatz-hybrid-synth\cubeatz-hybrid-synth-hise-project\Binaries\Builds\VisualStudio2026\cubeatz-hybrid-synth-hise-project_SharedCode.vcxproj]
        (compiling source file '../../../AdditionalSourceCode/nodes/factory.cpp')
        
      !H:\development\HISE\HISE\hi_tools\simple_css\Renderer.h(336,16): error C2530: 'toUse': references must be initialized [E:\The Audio Programmer\Repositories\cubeatz-hybrid-synth\cubeatz-hybrid-synth-hise-project\Binaries\Builds\VisualStudio2026\cubeatz-hybrid-synth-hise-project_SharedCode.vcxproj]
        (compiling source file '../../../AdditionalSourceCode/nodes/factory.cpp')
        
      !H:\development\HISE\HISE\hi_tools\simple_css\Renderer.h(337,37): error C3536: 'toUse': cannot be used before it is initialized [E:\The Audio Programmer\Repositories\cubeatz-hybrid-synth\cubeatz-hybrid-synth-hise-project\Binaries\Builds\VisualStudio2026\cubeatz-hybrid-synth-hise-project_SharedCode.vcxproj]
        (compiling source file '../../../AdditionalSourceCode/nodes/factory.cpp')
        
      !H:\development\HISE\HISE\hi_tools\simple_css\Renderer.h(346,25): error C2672: 'hise::simple_css::Positioner::RemoveHelpers::slice': no matching overloaded function found [E:\The Audio Programmer\Repositories\cubeatz-hybrid-synth\cubeatz-hybrid-synth-hise-project\Binaries\Builds\VisualStudio2026\cubeatz-hybrid-synth-hise-project_SharedCode.vcxproj]
        (compiling source file '../../../AdditionalSourceCode/nodes/factory.cpp')
            H:\development\HISE\HISE\hi_tools\simple_css\Renderer.h(306,50):
            could be 'juce::Rectangle<float> hise::simple_css::Positioner::RemoveHelpers::slice(juce::Rectangle<float> &,float)'
                H:\development\HISE\HISE\hi_tools\simple_css\Renderer.h(346,25):
                Failed to specialize function template 'juce::Rectangle<float> hise::simple_css::Positioner::RemoveHelpers::slice(juce::Rectangle<float> &,float)'
                    H:\development\HISE\HISE\hi_tools\simple_css\Renderer.h(346,25):
                    With the following template arguments:
                        H:\development\HISE\HISE\hi_tools\simple_css\Renderer.h(346,25):
                        'D=hise::simple_css::Positioner::Direction::Top'
                    H:\development\HISE\HISE\hi_tools\simple_css\Renderer.h(306,33):
                    'Rectangle': ambiguous symbol
                    H:\development\HISE\HISE\hi_tools\simple_css\Renderer.h(306,42):
      !              syntax error: missing ';' before '<'
        
      !Compilation error. Check the compiler output.
      
      

      This, or something similar to it... has come back in the latest develop, sha: 6446c4ab64ba27c189f5d1ad31ecace25d02a292

      I've cleaned my build directory, but still get it.

      posted in Bug Reports
      OrvillainO
      Orvillain
    • RE: [Blog] My Favourite C++ Open Source DSP References

      @ustk said in [Blog] My Favourite C++ Open Source DSP References:

      @Orvillain Yes that was my first attempt at making a nice reverb too and I learned a lot fro Geraint! I did it first with a network so the efficiency was bad but I've added some really fun stuff to it! But next time I'll obviously go C++...

      It's probably a conversational side-quest, but I've stopped using scriptnode tbh, other than for wrapping my custom nodes and attaching parameters so the UI can access them. I don't like the workflow at all really.

      posted in Blog Entries
      OrvillainO
      Orvillain
    • RE: [Blog] My Favourite C++ Open Source DSP References

      Yep! Done a similar thing. The Valhalla links were how I first got into reverb design, as well as the SignalSmith stuff:
      https://signalsmith-audio.co.uk/writing/2021/lets-write-a-reverb/

      posted in Blog Entries
      OrvillainO
      Orvillain
    • RE: Custom filter graph output within a custom node?

      This thread:
      https://forum.hise.audio/topic/9788/hise-filter-display-inconsistencies/20?_=1750768491529

      And Claude, helped quite a bit. Got it working!

      The essential bits I'm calling in my c++ node are:

      void setExternalData(const ExternalData& d, int index) override
         {
             SNEX_INIT_FILTER(d, index);
         }
      
         // HISE calls this (message thread, on repaint) for each frequency point.
         // freqNorm is normalised to the sample rate (1.0 == fs); return linear gain.
         double getPlotValue(int /*getMagnitude*/, double freqNorm) override
         {
             return (double) magnitudeLinear((float)(freqNorm * fs));
         }
      
         // == Parameters ==========================================================
         template <int P>
         void setParameter(double v)
         {
             if      constexpr (P == 0) { pFreq   = (float)v; sendCoefficientUpdateMessage(); }
             else if constexpr (P == 1) { pReso   = (float)v; sendCoefficientUpdateMessage(); }
             else if constexpr (P == 2) { pGain   = (float)v; sendCoefficientUpdateMessage(); }
             else if constexpr (P == 3) { pDrive  = (float)v; sendCoefficientUpdateMessage(); }
             else if constexpr (P == 4) { pType   = (float)v; sendCoefficientUpdateMessage(); }
             else if constexpr (P == 5) { pMode   = (float)v; sendCoefficientUpdateMessage(); }
         }
      
      posted in C++ Development
      OrvillainO
      Orvillain
    • Custom filter graph output within a custom node?

      Does anyone know a good guide or the latest advice on doing a custom filter graph output for a custom node, so that I can have a floating tile or a script panel pick it up and draw it??

      posted in C++ Development
      OrvillainO
      Orvillain
    • RE: I made a really good sounding JUNO-6 emulation for free, shared it in the KVR forum - this is what happened

      @David-Healey said in I made a really good sounding JUNO-6 emulation for free, shared it in the KVR forum - this is what happened:

      @Orvillain said in I made a really good sounding JUNO-6 emulation for free, shared it in the KVR forum - this is what happened:

      make sure MacOS performs a postscript process to remove the quarantine flag that Apple helpfully decide to add to almost anything you download through a browser these days.

      Won't the installer itself have a quarantine flag if it's not codesigned/notarized?

      I've made a few this way now and sent them out as test builds to clients, with no problems. They might end up with it, but if you run it on MacOS and it says "open anyway" then that's probably good enough to start with.

      posted in General Questions
      OrvillainO
      Orvillain
    • RE: I made a really good sounding JUNO-6 emulation for free, shared it in the KVR forum - this is what happened

      I've been posting on KvR on and off since I was a teenager. FFS, I'm sooooooo olllldddddd.

      But yes ... it has always been a bit of a Wild West type of place. Not for the feint of heart. I had a guy stalking me around the forum recently, commenting on all my posts, telling me how he was going to make sure everyone knew what a POS I was - for the crime of having and then leaving a job I did my best at for 18 odd years!

      There's not enough asylum's in the world apparently!

      Having said that, there are some easy wins you can do to head it all off at the pass:

      • Just have Claude build you a stupid installer. Use Inno on Windows, and MacOS packages; make sure MacOS performs a postscript process to remove the quarantine flag that Apple helpfully decide to add to almost anything you download through a browser these days.
      • Have a proper list of features, known issues, known omissions, and "keep it simple, stupid" - don't give them any more ammunition!
      • There's a big difference between "I had a crash", "there's a bug" and "I don't like this" - a lot of the time, you can simply ignore the "I don't like this" stuff.
      posted in General Questions
      OrvillainO
      Orvillain
    • RE: I am making an open source audiovisual modular with in->out->in routing

      Very cool man!

      posted in C++ Development
      OrvillainO
      Orvillain
    • RE: Verb Factory

      Thanks guys! No plans to open-source it at this stage, but at some point in the future I do want to release something back to the community. I just need to wrap up some projects first and get a bit more established 😁

      posted in C++ Development
      OrvillainO
      Orvillain
    • Verb Factory

      More showoff stuff from me. I've built my own standalone JUCE app that allows me to build effects processors on the fly:
      https://youtu.be/ogaE-hkUcsU

      This is primarily a dev tool for my own projects. The eventual plan is to have it export c++ code, and maybe even have it spit out a custom HISE node that I can just drop into projects too!!

      posted in C++ Development
      OrvillainO
      Orvillain