HISE Logo Forum
    • Categories
    • Register
    • Login

    Compiling C++ nodes and Scriptnode Networks

    Scheduled Pinned Locked Moved Solved Bug Reports
    19 Posts 3 Posters 960 Views
    Loading More Posts
    • Oldest to Newest
    • Newest to Oldest
    • Most Votes
    Reply
    • Reply as topic
    Log in to reply
    This topic has been deleted. Only users with topic management privileges can see it.
    • Christoph HartC
      Christoph Hart @HISEnberg
      last edited by

      I generally have polyphony disabled in my nodes

      That is irrelevant, if your C++ nodes are defined like this:

      namespace project {
      
      template <int NV> struct Moog_Filter : public data::base
      {
      
      };
      }
      

      then the node_properties.json file must define the IsPolyphonic flag, otherwise the compilation will fail because the compiler expects a non-templated class, even if you don't care about polyphony at all.

      Now if you want them to be polyphonic, you will have to define the additional flag AllowPolyphonic, then HISE will instantiate a monophonic node MoogFilter<1> and a polyphonic node MoogFilter<NUM_POLYPHONIC_VOICES> for you.

      The new export dialog should include a sanity check if the node_properties.json file doesn't contain the properties for each C++ node so I'm just trying to figure out what went wrong here so that you ran into the problem.

      HISEnbergH 1 Reply Last reply Reply Quote 0
      • HISEnbergH
        HISEnberg @Christoph Hart
        last edited by

        @Christoph-Hart I do recall these warnings popping up, but this is currently what the compilation process will look like for me (both Windows and Mac). It "compiles fine" no warnings or errors.

        example.gif

        I.e. the compiler doesn't seem to care about the IsPolyphonic flag.

        node_properties.json:

        {
          "mynewnode": []
        }
        

        C++ file:

        #pragma once
        #include <JuceHeader.h>
        
        namespace project
        {
        using namespace juce;
        using namespace hise;
        using namespace scriptnode;
        
        template <int NV> struct mynewnode: public data::base
        {
        	SNEX_NODE(mynewnode);
        	
        	struct MetadataClass
        	{
        		SN_NODE_ID("mynewnode");
        	};
        	
        	// 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; };
        
        // etc....
        
        Christoph HartC 1 Reply Last reply Reply Quote 0
        • Christoph HartC
          Christoph Hart @HISEnberg
          last edited by

          @HISEnberg untoggling the isPolyphonic flag is shooting yourself in the foot here. Why?

          HISEnbergH 1 Reply Last reply Reply Quote 0
          • HISEnbergH
            HISEnberg @Christoph Hart
            last edited by

            @Christoph-Hart That was just to show you that there is no warning or that the compiler doesn't fail when toggling the isPolyphonic flag! Just to be clear I don't usually do this, I just uncheck AllowPolyphonic.

            Perhaps some misunderstanding on my part about what you were asking. I recall there used to be a warning that would say you need to have this flag checked if you are working from the autogenerated template.

            So to be clear I believe you've solved my initial inquiry: Delete the Binaries folder, make sure the flags are set correctly!

            Christoph HartC 1 Reply Last reply Reply Quote 0
            • Christoph HartC
              Christoph Hart @HISEnberg
              last edited by

              @HISEnberg ah ok. But if you delete the binary folder, and compile the C++ network without the flags being set then it will fail, right?

              HISEnbergH 1 Reply Last reply Reply Quote 0
              • HISEnbergH
                HISEnberg @Christoph Hart
                last edited by HISEnberg

                @Christoph-Hart Wrong this is what I am trying to show. The isPolyphonic flag, in so far as a single C++ node is concerned, doesn't trigger any warnings or build errors (Though I can certainly remember their were warnings not too long ago).

                Hopefully this shows the process, I cut-out the compilation waiting time in this gif, but I think this is what you are suggesting.

                I create the node, compile it with the flags. I then delete the Binaries folder, disable the flags and compile again.
                This should be producing an error, but it isn't:

                newnew.gif

                Christoph HartC 1 Reply Last reply Reply Quote 0
                • Christoph HartC
                  Christoph Hart @HISEnberg
                  last edited by

                  @HISEnberg are you referencing the c++ nodes in a compiled network?

                  HISEnbergH 1 Reply Last reply Reply Quote 0
                  • HISEnbergH
                    HISEnberg @Christoph Hart
                    last edited by

                    @Christoph-Hart No not in this example though I suppose that would bring us back to the original topic!

                    So if this C++ node is placed in a Scriptnode network and I compile both simultaneously:

                    Without the isPolyphonic flag: FAILS
                    ScreenRecording2025-09-18at1.19.01PM-ezgif.com-video-to-gif-converter.gif

                    With the isPolyphonic flag: SUCCEEDS
                    ScreenRecording2025-09-18at1.19.30PM-ezgif.com-video-to-gif-converter.gif

                    So you identified my issue exactly:

                    1. Delete the Binaries folder
                    2. Set isPolyphonic to enabled (if it's designed on the template).

                    I'll give it a go in a project I have where all the C++ nodes I made are using the template and are embedded in their own Scriptnode Networks. I'm pretty sure it is going to work this time.

                    Christoph HartC 1 Reply Last reply Reply Quote 0
                    • Christoph HartC
                      Christoph Hart @HISEnberg
                      last edited by

                      @HISEnberg ah ok now that's as expected. I think the irritation here is that if there is already a successfully compiled version of the C++ node that is being loaded into the network when you compile the network, it supersedes the isPolyphonic flag (which makes the compilation succeed despite the flag being wrong but as soon as you clean out the Binaries folder the compilation will fail the next time.

                      TLDR: just set the isPolyphonic flag correctly (as it's also described in the help popup of the dialog) and then the compilation should succeed in all cases / series of events.

                      HISEnbergH 1 Reply Last reply Reply Quote 1
                      • HISEnbergH
                        HISEnberg @Christoph Hart
                        last edited by HISEnberg

                        @Christoph-Hart Ya I will admit that was pretty ignorant of me to overlook that, clicking the help popup immediately clarifies what its for. I suppose that the flag being named isPolyphonic made me think I just didn't need it if the effect isn't polyphonic, but I see how it relates to them template of the node (voice count) now!

                        Thanks for your help by the way I really appreciate that!

                        1 Reply Last reply Reply Quote 0
                        • First post
                          Last post

                        12

                        Online

                        1.9k

                        Users

                        12.5k

                        Topics

                        108.9k

                        Posts