HISE Logo Forum
    • Categories
    • Register
    • Login

    Little trouble with nested includes

    Scheduled Pinned Locked Moved C++ Development
    31 Posts 4 Posters 1.8k 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 @A Former User
      last edited by

      @iamlamprey Not 100% if it helps, but try adding the ThirdParty/src folder to the HeaderSearch Paths in the projucer project (check the DspNetwork/Binaries/AutogeneratedProject.jucer first).

      This way it will be able to resolve all those #include <xxx> statements.

      ? 1 Reply Last reply Reply Quote 0
      • ?
        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
                                            • First post
                                              Last post

                                            35

                                            Online

                                            1.7k

                                            Users

                                            11.7k

                                            Topics

                                            101.9k

                                            Posts