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

    Topics

    • OrvillainO

      Crash on MacOS in compiled plugin when working with HardcodedEnvelopeModulator

      Watching Ignoring Scheduled Pinned Locked Moved Bug Reports
      2
      0 Votes
      2 Posts
      53 Views
      OrvillainO

      Is anyone else able to reproduce this on MacOS? Just curious if it is a me thing or not. I can't think why it would be mind you.

    • OrvillainO

      Crash when creating global mod sources using the Builder

      Watching Ignoring Scheduled Pinned Locked Moved Solved Bug Reports
      4
      0 Votes
      4 Posts
      57 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
      122 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
      220 Views
      OrvillainO

      @DanH Yesterday! πŸ˜‚

    • OrvillainO

      Broadcaster attachment design pattern

      Watching Ignoring Scheduled Pinned Locked Moved General Questions
      25
      0 Votes
      25 Posts
      628 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
      311 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
      390 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
      276 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
      55 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
      239 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
      150 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
      407 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
      123 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
      877 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
      658 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.

    • OrvillainO

      more advanced wavetable playback?

      Watching Ignoring Scheduled Pinned Locked Moved General Questions
      6
      0 Votes
      6 Posts
      161 Views
      griffinboyG

      @Orvillain

      To avoid aliasing you need to be able to control which harmonics are present in the signal either using FFT or a Filter. You'll need to be able to do upsampling in good quality which is why filter design is important I'm not talking about biquads, rather FIR filters. If you can process a signal with FFT in C++ and back again, and you can use FIR filters to do oversampling then you should be able to do a WT engine.

      Here is a good resource