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

    Topics

    • OrvillainO

      A very basic 101 phaser network

      Watching Ignoring Scheduled Pinned Locked Moved ScriptNode
      6
      0 Votes
      6 Posts
      60 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
      9
      0 Votes
      9 Posts
      100 Views
      DanHD

      @Lindon @Christoph-Hart today? πŸ˜†

    • OrvillainO

      Broadcaster attachment design pattern

      Watching Ignoring Scheduled Pinned Locked Moved General Questions
      25
      0 Votes
      25 Posts
      272 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
      273 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
      375 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
      227 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
      37 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
      174 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
      121 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
      381 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
      929 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
      113 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
      757 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
      626 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
      1k 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
      136 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

    • OrvillainO

      What is the process for writing my own module (not scriptnode)

      Watching Ignoring Scheduled Pinned Locked Moved C++ Development
      52
      0 Votes
      52 Posts
      12k Views
      griffinboyG

      @Orvillain

      Oh yeah yeah, I found faults with the provided script too. I had to do some casting. I think that's correct.

    • OrvillainO

      Panel painting seems broken in 04bf696

      Watching Ignoring Scheduled Pinned Locked Moved Solved Bug Reports
      14
      0 Votes
      14 Posts
      1k Views
      OrvillainO

      @Christoph-Hart Lovely stuff!! Thanks for letting me know!

      I'm working in HISE right now. Let me pull the latest develop branch and see how I get on. Will report back.

      EDIT: Yep. All good here!!