• Looking for a VST/Plugin Developer - Midi Generator

    1
    1 Votes
    1 Posts
    79 Views
    No one has replied
  • FFTW3 in C++ node - how to?

    Unsolved
    6
    0 Votes
    6 Posts
    388 Views
    HISEnbergH

    @HISEnberg Still can't seem to figure this out. I have an extra folder in my HISE project named External, which contains the bulk of my C++ code.

    I've changed methods to adding this from FFTW3 directly into my project:

    fftw3.h
    libfftw3-3.lib
    libfftw3-3.dll

    And in my external C++ node I am doing something like this:

    #define HAVE_FFTW 1 #define FFTW_DLL #pragma comment(lib, "../../External/libfftw3-3.lib")

    But every time the compiler is failing to link:

    !LINK : fatal error LNK1104: cannot open file '../../External/libfftw3-3.lib' [C:\Users\mikez\Desktop\HiseProjects\Personal\fftw-test\DspNetworks\Binaries\Builds\VisualStudio2022\fftw-test_DynamicLibrary.vcxproj]
  • Ring Buffer design

    20
    1 Votes
    20 Posts
    597 Views
    OrvillainO

    @griffinboy said in Ring Buffer design:

    @Orvillain

    I've never used sync / fir interpolators in a reverb.
    I'm not sure how high the benefit would be.
    For delays and synthesis it's great though when you need low aliasing and low ripple.

    A typical approach to decorrelating reverbs is to mildly modulate delay times in the FDN. But you can also do it on the input diffuser or the early reflections APF network too. So anything that affects delay time is ultimately going to make some kind of difference.

    It'd be interesting to compare them all. Maybe that's a new thread in a few weeks or so!

  • Looking to hire a C++ dev

    1
    0 Votes
    1 Posts
    159 Views
    No one has replied
  • I wrote a reverb

    15
    9 Votes
    15 Posts
    681 Views
    OrvillainO

    @griffinboy Oh nice!! Some night time reading material right there!

  • [Free dsp] C++ FFT

    33
    11 Votes
    33 Posts
    7k Views
    Adam_GA

    @griffinboy ahhh thanks for clarifying! keep up the hacking i can tell youre on to something! 😀

  • External C++ Node file management

    Unsolved
    7
    0 Votes
    7 Posts
    375 Views
    HISEnbergH

    @Christoph-Hart You move quick! Glad I mentioned it, my HISE-senses were tingling when I heard about this project. :)

    Are you considering integrating the klang toolchain for rapid C++ deployment inside Scriptnode? I've been trying to find faster methods like this.

    On another tangent which I don't think anyone else here cares about except for me, is the introduction of MIDI 2.0 to the JUCE Framework. Obviously this will take a bit of time, as there really aren't any major devices on the market that even support this yet, but it would be good to keep an eye on this development and possible integration into HISE in the future!!!!

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

    13
    0 Votes
    13 Posts
    1k 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)); } } }; }
  • Filter Display in External C++ Node

    1
    4 Votes
    1 Posts
    89 Views
    No one has replied
  • ExternalData SliderPack seems to be limited to 128

    16
    0 Votes
    16 Posts
    2k Views
    ustkU

    @Christoph-Hart I wondered about using an audiofile as well, seems a nice solution especially if I am creating the curve in the script interface.

    But a global cable seems promising too, I need to wrap my head around the data type it can send. Just sending the control points and creating the curve in C++ node is surely a more efficient solution...

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

    6
    0 Votes
    6 Posts
    450 Views
    OrvillainO

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

  • Turning C++ dsp into fx plugin in hise

    3
    0 Votes
    3 Posts
    224 Views
    HISEnbergH

    @njAudio03 There also exists a convolution “reverb” module in HISE already. This probably doesnt address the your design/project objectives directly but studying it’s integration in the HISE source code (along with the FFT it relies on), along with @griffinboy External C++ primer should get you started.

  • custom node compile log on Mac vs Windows

    4
    0 Votes
    4 Posts
    257 Views
    OrvillainO

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

  • C Major another Audio language

    10
    2 Votes
    10 Posts
    1k Views
    whoopsydoodleW

    So until we have native Cmajor support in HISE, how much of a pain would it be to compile a Cmajor patch as C++ and then use it in HISE as a 3rd party C++ node? Is there a web of dependent libraries you'll have to worry about including?

  • C++ Third Party node SliderPack, Span & sfloat

    10
    0 Votes
    10 Posts
    963 Views
    ustkU

    @Christoph-Hart What about the slider pack limitation of 128?

    Could it be extended?
    Or perhaps it would be better to use a cable with complex data to send a more precise curve?

  • Getting debug output to the compiler console..

    18
    0 Votes
    18 Posts
    3k Views
    OrvillainO

    Hey apologies for the bump. But I got this to work by putting:
    JUCE_LOG_ASSERTIONS=1

    into the preprocessor definitions and then rebuilding. I get data from my custom c++ node printing to the visual studio log:
    947b7f47-31e0-48be-ad66-7de6be45afe0-image.png

    It wasn't working until I did that.

  • Getting the sample rate for an externalData object?

    6
    0 Votes
    6 Posts
    786 Views
    OrvillainO

    @Christoph-Hart

    🤣

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

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

    52
    0 Votes
    52 Posts
    13k 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.

  • What's the deal with this assert? isMonophonicOrInsideVoiceRendering()

    3
    0 Votes
    3 Posts
    433 Views
    griffinboyG

    @Christoph-Hart

    Good to know that it wasn't anything bad. It didn't seem to be breaking anything.

    Is it okay for me to use this function then? It says that I shouldn't here unless I'm rendering. But I couldn't really see why, so I've been using it

  • c++ callback for voice stop?

    5
    0 Votes
    5 Posts
    637 Views
    griffinboyG

    @griffinboy

    edit* Rephrased into a more answerable question hopefully!

15

Online

1.9k

Users

12.5k

Topics

108.6k

Posts