HISE Logo Forum
    • Categories
    • Register
    • Login
    1. HISE
    2. Orvillain
    3. Topics
    • Profile
    • Following 1
    • Followers 0
    • Topics 65
    • Posts 533
    • Groups 0

    Topics

    • OrvillainO

      External Display Buffer & Hardcoded ScriptEnvelope modulator - display is transparent

      Watching Ignoring Scheduled Pinned Locked Moved Bug Reports
      2
      0 Votes
      2 Posts
      32 Views
      Christoph HartC

      @Orvillain yeah that‘s just a glitch of the popup interface of the editor and I never looked at one long enough to bother fixing it.

    • OrvillainO

      Scriptnode clock-sync - is there a preferred solution???

      Watching Ignoring Scheduled Pinned Locked Moved ScriptNode
      17
      0 Votes
      17 Posts
      349 Views
      OrvillainO

      Just to report back, it worked perfectly. It even now picks up the lastest value properly, whereas I'm pretty sure it didn't before. Very nice!

      So here's my take on how to do switchable LFO's:

      You primarily rely on the built in modules monophonic/polyphonic flag for reset/retrigger behaviour. Don't bother even building it for your own network.

      Do your sync this way:
      0bc0eeef-5d7a-4c85-822a-a9b901fc0519-image.png

      A branch container, containing two chains. Each one has its own ramp source in it. Make one of them the regular ramp source, the other one the clock_ramp source.

      You can even write a simple math expression to adjust the phase.

    • OrvillainO

      Crash on MacOS in compiled plugin when working with HardcodedEnvelopeModulator

      Watching Ignoring Scheduled Pinned Locked Moved Solved Bug Reports
      28
      0 Votes
      28 Posts
      860 Views
      OrvillainO

      @Christoph-Hart Yep, that has fixed it, thanks!!

    • OrvillainO

      Crash when creating global mod sources using the Builder

      Watching Ignoring Scheduled Pinned Locked Moved Solved Bug Reports
      4
      0 Votes
      4 Posts
      132 Views
      OrvillainO

      @Christoph-Hart Yep, this is fixed now. Thanks Christoph!

    • OrvillainO

      A very basic 101 phaser network

      Watching Ignoring Scheduled Pinned Locked Moved ScriptNode
      6
      0 Votes
      6 Posts
      147 Views
      OrvillainO

      @DanH I think spread can be achieved by adding a split container after this "mono" phaser... and letting the signal through in the left half of the split (just add a gain there) and in the right... add a delay, and set the delay time to sub 20ms.

      That'd be a nasty way to do it anyway!

      I'm just now learning how to use the clone stuff, so there may be a better way.

    • OrvillainO

      How to modulate a network parameter

      Watching Ignoring Scheduled Pinned Locked Moved ScriptNode
      10
      0 Votes
      10 Posts
      253 Views
      OrvillainO

      @DanH Yesterday! 😂

    • OrvillainO

      Broadcaster attachment design pattern

      Watching Ignoring Scheduled Pinned Locked Moved General Questions
      25
      0 Votes
      25 Posts
      682 Views
      OrvillainO

      @d-healey Yeah, I think I can essentially boil down 11 functions down to 3 functions with this. Pretty cool, cheers!

    • OrvillainO

      Building my own sample content installer

      Watching Ignoring Scheduled Pinned Locked Moved General Questions
      10
      0 Votes
      10 Posts
      320 Views
      OrvillainO

      @Christoph-Hart The more things change, the more things stay the same! 😂

    • OrvillainO

      There's something I don't understand about compiling a plugin

      Watching Ignoring Scheduled Pinned Locked Moved General Questions
      20
      0 Votes
      20 Posts
      394 Views
      OrvillainO

      @d-healey Probably a bug of some kind then. All I can say is, commenting out TreeBuilder.buildModuleLayout() cured my crash. Chased my own tail for a bit over that is all!

    • OrvillainO

      c++ function optimization using vectorization or SIMD???

      Watching Ignoring Scheduled Pinned Locked Moved C++ Development
      6
      0 Votes
      6 Posts
      309 Views
      OrvillainO

      Thank you guys! Lot of stuff to look into here! Appreciate the help. Will report back!

    • OrvillainO

      Options for building a sequencer - midi player modules and/or ??

      Watching Ignoring Scheduled Pinned Locked Moved General Questions
      2
      0 Votes
      2 Posts
      62 Views
      LindonL

      @Orvillain build your own..use the playhead data to define where you are in the seq...

    • OrvillainO

      wet/dry template adds extra "attack" when inside a poly script fx network

      Watching Ignoring Scheduled Pinned Locked Moved Solved ScriptNode
      7
      0 Votes
      7 Posts
      253 Views
      YinxiY

      @Orvillain
      Oh ok, my bad then. Maybe it’s your sample that’s below 0dB, so it goes up and then drops back down. Anyway, glad it’s working for you now! 😊

    • OrvillainO

      custom node compile log on Mac vs Windows

      Watching Ignoring Scheduled Pinned Locked Moved C++ Development
      4
      0 Votes
      4 Posts
      177 Views
      OrvillainO

      @Lurch Cheers dude! I'll check it out!

    • OrvillainO

      Pitch shifting when smoothing a delay

      Watching Ignoring Scheduled Pinned Locked Moved General Questions
      4
      0 Votes
      4 Posts
      418 Views
      Christoph HartC

      @Orvillain ditch the smoothed parameter, you don't need that with the fix_delay node, then it should work (the smoothing is already embedded into the node itself).

    • OrvillainO

      Multiple Global Data Cables - only the first one gets a runtime target

      Watching Ignoring Scheduled Pinned Locked Moved Solved Bug Reports
      10
      1 Votes
      10 Posts
      1k Views
      griffinboyG

      @Orvillain

      Yep that'll be it.

      I actually wish it worked differently, but currently scriptnode c++ synth nodes only call process() per active voice. So if there are no voices it won't call process (or subsequently process frame).

      Additionally say there are 3 voices playing, that will mean your process script gets called 3 times as frequently... Each voice will run it's own process.

      You can check which voice the process() is currently running for, using polydata, which allows you to do different processing per voice

    • OrvillainO

      Global Cables don't work when custom node is inside a midichain - unless you go into the scriptnode view

      Watching Ignoring Scheduled Pinned Locked Moved Bug Reports
      1
      0 Votes
      1 Posts
      126 Views
      No one has replied
    • OrvillainO

      How does a custom c++ interface with one of its display buffers?

      Watching Ignoring Scheduled Pinned Locked Moved C++ Development
      13
      0 Votes
      13 Posts
      939 Views
      OrvillainO

      @Orvillain
      3d59f862-0879-4207-8770-9f6729fd3a8b-image.png

      huh... well I got SOMETHING in there...

      This is just chatGPT chod, but it has given me the above. The issue is... it doesn't update immediately, I have to switch the selected display buffer in the node using the external icon button.

      // ==================================| 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 LoadAudio: public data::base, public data::display_buffer_base<true> { // Metadata Definitions ------------------------------------------------------------------------ SNEX_NODE(LoadAudio); struct MetadataClass { SN_NODE_ID("LoadAudio"); }; // set to true if you want this node to have a modulation dragger static constexpr bool isModNode() { return false; }; 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 = 1; static constexpr int NumFilters = 0; static constexpr int NumDisplayBuffers = 1; AudioBuffer<float> originalBuffer; int originalSampleRate; int originalNumSamples; bool bufferNeedsUpdate = false; // Scriptnode Callbacks ------------------------------------------------------------------------ void prepare(PrepareSpecs specs) override { display_buffer_base<true>::prepare(specs); if (rb != nullptr) { rb->setActive(true); if (bufferNeedsUpdate && originalBuffer.getNumChannels() > 0) { updateBuffer(originalBuffer.getReadPointer(0), originalNumSamples); bufferNeedsUpdate = false; } } } void reset() { } 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) { } int handleModulation(double& value) { return 0; } void setExternalData(const ExternalData& data, int index) override { display_buffer_base<true>::setExternalData(data, index); if (data.isNotEmpty()) { originalBuffer = data.toAudioSampleBuffer(); originalSampleRate = data.sampleRate; originalNumSamples = originalBuffer.getNumSamples(); bufferNeedsUpdate = true; // ✅ delay actual update } } // Parameter Functions ------------------------------------------------------------------------- template <int P> void setParameter(double v) { if (P == 0) { // This will be executed for MyParameter (see below) jassertfalse; } } void createParameters(ParameterDataList& data) { { // Create a parameter like this parameter::data p("MyParameter", { 0.0, 1.0 }); // The template parameter (<0>) will be forwarded to setParameter<P>() registerCallback<0>(p); p.setDefaultValue(0.5); data.add(std::move(p)); } } }; }
    • OrvillainO

      Getting the sample rate for an externalData object?

      Watching Ignoring Scheduled Pinned Locked Moved C++ Development
      6
      0 Votes
      6 Posts
      692 Views
      OrvillainO

      @Christoph-Hart

      🤣

      Cool thanks! I'm still figuring out how all of this interfaces, but getting there and making good progress!

    • OrvillainO

      Is it possible to create a midi note from ScriptNode/c++ node and direct it to a synth in the module tree?

      Watching Ignoring Scheduled Pinned Locked Moved ScriptNode
      14
      0 Votes
      14 Posts
      2k Views
      OrvillainO

      @Orvillain Right no... I get it. Use two cables. Dohhh.