HISE Logo Forum
    • Categories
    • Register
    • Login

    Little trouble with nested includes

    Scheduled Pinned Locked Moved C++ Development
    31 Posts 4 Posters 1.9k 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.
    • ?
      A Former User @Christoph Hart
      last edited by

      Ok got a little bit further by adding the src path as an Additional Include Directory in VS but then ran into about 10000 syntax errors so I think I'll look for a different library...

      d.healeyD 1 Reply Last reply Reply Quote 0
      • d.healeyD
        d.healey @A Former User
        last edited by

        @iamlamprey You may only need to solve one of those errors to fix them all ;)

        Libre Wave - Freedom respecting instruments and effects
        My Patreon - HISE tutorials
        YouTube Channel - Public HISE tutorials

        Christoph HartC 1 Reply Last reply Reply Quote 0
        • Christoph HartC
          Christoph Hart @d.healey
          last edited by

          @d-healey yes but Eigen is a very complex and heavyweight library so it‘s not the easiest task to include it.

          1 Reply Last reply Reply Quote 1
          • ?
            A Former User
            last edited by

            Yeah there doesn't really seem to be an agreed upon convention for getting TF working in C++, some people are using numpy/eigen, some are making their own wrappers like Frugally Deep and cppflow...

            @Christoph-Hart Can third party nodes support prebuilt static libraries? Or does it have to be the source code? I might just have to bite the bullet and remake my autoencoder in pytorch since using TF in C++ is just a mess

            KimiAK 1 Reply Last reply Reply Quote 0
            • KimiAK
              KimiA @A Former User
              last edited by

              @iamlamprey Using Machine Learning models in C++ can be quite tricky but here's an open source project by CHOW-DSP that uses machine learning and juce to model a Klon Centaur pedal.

              I believe it uses RT Neural which is meant for real-time audio, however, the process should be somewhat similar.

              https://github.com/jatinchowdhury18/KlonCentaur
              https://github.com/jatinchowdhury18/RTNeural

              Hopefully, this helps with getting the implementation working.

              All the best!

              ? 1 Reply Last reply Reply Quote 0
              • ?
                A Former User @KimiA
                last edited by

                @KimiA Legend! I'll take a look, thank you :)

                ? 1 Reply Last reply Reply Quote 0
                • ?
                  A Former User @A Former User
                  last edited by

                  Okay think I have Tensorflow and CPPFlow building thanks for your help everyone!

                  Once I figure everything out and make sure it works properly I'll write up a quick post about it, in case anyone else here wants to mess around with Autoencoders (or god forbid try getting a GAN training)

                  Now onto the real endgame... how does one print to the HISE console from inside a Node? 🙂

                  1 Reply Last reply Reply Quote 0
                  • ?
                    A Former User
                    last edited by

                    why are the simplest things so difficult for me 😂

                    // Parameter Functions -------------------------------------------------------
                    	
                    	template <int P> void setParameter(double v)
                    	{
                    		if (P == 0)
                    		{
                    			// This will be executed for MyParameter (see below)
                    			String s;
                                            s = "test";
                    			jassertfalse;
                    			debugToConsole(hise::Processor::getProcessor(), s);
                    		}
                    	}
                    
                    Christoph HartC 1 Reply Last reply Reply Quote 0
                    • Christoph HartC
                      Christoph Hart @A Former User
                      last edited by

                      If you‘re creating a third party node you‘ll most likely end up debugging jn VS / Xcode directly so you can print and breakpoint directly in the IDE.

                      Just open the IDE project in the DSPNetwork/Binaries subfolder, it should have the target set to the HISE Standalone app that will launch when you start debugging the project.

                      ? 1 Reply Last reply Reply Quote 0
                      • ?
                        A Former User @Christoph Hart
                        last edited by

                        @Christoph-Hart do I have to manually target HISE if this happens?

                        or just debug the HISE project instead?

                        fa55241b-e136-41bc-8adf-dcc4c89648d8-image.png

                        Christoph HartC 1 Reply Last reply Reply Quote 0
                        • Christoph HartC
                          Christoph Hart @A Former User
                          last edited by

                          @iamlamprey Yes, go to the Project properties and select the HISE x64 Debug.exe as Command:

                          dc09cb53-1bf7-4b3e-b7d9-f8fe6de94b88-image.png

                          If you then click on the Debug play button in VS it will launch HISE and as soon as you load a node from your DLL it will jump into the code and you can step through it and print stuff. DBG("Funky"); is your friend here.

                          ? 1 Reply Last reply Reply Quote 0
                          • ?
                            A Former User @Christoph Hart
                            last edited by

                            @Christoph-Hart Got it, thank you :)

                            ? 1 Reply Last reply Reply Quote 0
                            • ?
                              A Former User @A Former User
                              last edited by

                              @Christoph-Hart What would be the best way to add JSON-loadability to a node? Is that a realistic ask or would I be better off trying to just make this a base processor instead of a node?

                              Christoph HartC 1 Reply Last reply Reply Quote 0
                              • Christoph HartC
                                Christoph Hart @A Former User
                                last edited by

                                @iamlamprey there is no API for communication with Strings so that will be a bit tricky. What data do you want to communicate?

                                ? 1 Reply Last reply Reply Quote 0
                                • ?
                                  A Former User @Christoph Hart
                                  last edited by

                                  @Christoph-Hart Yeh that would explain the error.

                                  I'm trying to load a tensorflow model, so the data would be both the model itself (layers & their hyperparameters) and the actual weights & bias of the network (the "trained" part). They're mostly doubles I think but there's some strings in there as well for the type of layer & activation functions

                                  The goal is

                                  audio sample -> [network] -> output, where [network] is a big ol bunch of matrix math that does all the blackbox stuff automatically

                                  Not gonna lie I may have bit off more than i can chew here, I've been watching Cherno's C++ series and I'm starting to grasp some of it but man my brain hurts lol.

                                  I think I'll have to just get familiar with the tensorflow C api, all these other libraries and dependencies seem to pile up errors, and I really only need a few pieces of tensorflow (conv1d, leakyrelu, layernorm etc)

                                  Christoph HartC 1 Reply Last reply Reply Quote 0
                                  • Christoph HartC
                                    Christoph Hart @A Former User
                                    last edited by

                                    @iamlamprey Do you need to load different JSON files on runtime or can you include them in the C++ source?

                                    ? 1 Reply Last reply Reply Quote 0
                                    • ?
                                      A Former User @Christoph Hart
                                      last edited by

                                      @Christoph-Hart Ideally different ones at runtime (loading different models), but I could probably get away with including all of the models, then just use a node Parameter to switch between them and hide that parameter from the end user

                                      worst case scenario I can copy the weight values manually into a struct or something and write my own activations (those are pretty simple), then the only part left really is re-creating the convolution layer, which is probably the hardest part

                                      1 Reply Last reply Reply Quote 0
                                      • ?
                                        A Former User
                                        last edited by

                                        Here's an example of a "trained" model (it's not actually trained, the weights just get randomized on initialization) if it helps explain it better

                                        encoder_weights.json

                                        Christoph HartC 1 Reply Last reply Reply Quote 0
                                        • Christoph HartC
                                          Christoph Hart @A Former User
                                          last edited by

                                          @iamlamprey Is the structure of the JSON always the same? Because if it is then I would recommend spending some time writing a batch tool that converts it to C structs, otherwise I would stick to loading and parsing JSON - there are classes available in JUCE that do this for you but embedding Strings as hardcoded values with escaping the special characters is a bit annoying.

                                          And yes I would definitely go the route of embedding all model data and then choosing the one you want with a parameter.

                                          ? 1 Reply Last reply Reply Quote 0
                                          • ?
                                            A Former User @Christoph Hart
                                            last edited by

                                            @Christoph-Hart It is the same "for now" because Tensorflow is Tensorflow and they'll probably change everything in a week for no apparent reason

                                            Embedding sounds good, while I've got you here, can you recommend any great C++ resources? Now that I'm finally getting around to learning it :) anything specifically JUCE-related would be bonus points

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

                                            32

                                            Online

                                            1.7k

                                            Users

                                            11.7k

                                            Topics

                                            102.0k

                                            Posts