Compiling Just an Empty Clone Container Fails
-
@aaronventure @Christoph-Hart @d-healey Please take a look?
macOS Sonoma / Various HISE Dev builds.
HiseSnippet 1111.3oc6V0saaaCElzNLoIKccEn.a2MeY5PQfkiShC1EsINwqFaNwXJKn2EPSQGSDIRAIpj5Mr2s8HrGk8FrcnnrkTpbRlQ61tXx.Fh7bN57wuyebXjhwiiUQH7FmOMjivaRbmJ0S5NgJjn9GivqRNmGqQGMMjFGy8PXb8uyHCu9Jnzm+30GQ8oRFOeKD5Bkfw+AQfPmu6v278Be+dTO94hfBZ29M8YJYWkuJAvQcRSTHkcM8J9oTiZ0Hn2RimfveCo03QrVi2emNNG3bv9sOvwY2NiZ2rEya2C1Ym81wabqNz85.Fs5IdBsJxUS07XDdkiTdScmntUZcvEhXwHetYgCxE7rc6dJeOyQzrKp6Dgu2vYDTLBgICyoq5V55EjABOw78yosuHUPibKJRf3ZkgW8RvyoH7ZV.dU.IbAHshEROm3xhDg5bIF77Yj9RMOZLEhSEghUWD92HcUfBR81Azq48hfEyMXq8Z17UMf+d42NNQxzBkrgRdpRyOSt0K23W1X8M90MZbWQiGWoLiahT997nJEaRMhtOC2RlDLhG8pF2P8S3yUDN9k4Txh4zhgbl8TWPQkruTnOKjKWTh.Jipf29o9GS0TSfHaOPuPdjVXf.9X9MPYfMrrN4Xd70ZUHTH7AwLHaQ4k3S0kSgLEZYB.NnTbyDbjwB8zhEhezxqdrP74jgBMaR0XrVEXDXpOEXLqZ7ojSFOlyz4.bERu28oozqn6exL26J7MISlNnot+YY6zHcKm6oK5u+X6hF9n6hhqeeMAcVxlfq7etlfeLpmp8+0S+KWOU0nrOmLT4O0NhB7qA.eY5VgSTRAqgURiduyoxYZeMop4GEFYPdzX249ot7ABmx02phtN8.k8NBulA4eEILRDGzWxd6zQQBOHHyMiAQG56qtM+Tk4adTrI9iWizba3mUqtpfPQVlAjPXWxgviTx8OLPk.X.Sv0.f.2Y5bpv2nlaRLLMy6LYZyHSKFSb6Tv+vEk5QY.ELcHEZYA4el4gPvlGsMadPegHOmzM7h85ZKTYi+l0dhfQorVPfg0LWwCW2H2Rao.KkyViv7URNZwfLUbU3Xlol3YWyawVh8gfQgA31bRyJnhqlAOaR5GegQJi5itvbAjrTh6.9UMJ+TKBtjYRWPO.OW0Qn7GnHv2jztUm8On09sa2tZZDMjFAeD3FbYk1+8NTPJTwO.t17UvgafPloFg3.olCnueNW.EJZdnq3mmK0d6ySSBxhBkL8X9XZhutzdnE4qlk7EgzBVWk2f4vg9Bsq3JY9Ixp9c8WqR9aYopiTpqCnoU8K2MB+QUhVHuZ.UGIdOfKfsbg.MaVoc7rp5r0Mmk65B00oK9S3ISniYMNSnyLg+i3i.JKRcIy1o0PfOIcGHwPllQuNYfYcCGzMVxKeNV.bSgKYrxepOvvVKqg6rrF1dYMb2k0v8VVC2eYMryCan4hbGlnUA1gOHzfgmjlniwmHovTxzIun+Bk4oc+B
-
@clevername27 Fails for me with this error
/HISE/hi_dsp_library/node_api/nodes/Containers.h:116:49: error: ‘const struct scriptnode::wrap::clone_base<scriptnode::wrap::clone_data<scriptnode::container::chain<scriptnode::parameter::empty, scriptnode::wrap::fix<2, scriptnode::core::empty> >, 0, 1>, scriptnode::CloneProcessType::Copy>’ has no member named ‘isPolyphonic’ > 116 | bool isPolyphonic() const { return get<0>().isPolyphonic(); } >
-
The project builds fine here, windows - latest HISE build:
include_juce_audio_devices.cpp include_juce_audio_formats.cpp include_juce_audio_plugin_client_utils.cpp include_juce_audio_processors.cpp include_juce_audio_utils.cpp include_juce_core.cpp include_juce_cryptography.cpp include_juce_data_structures.cpp include_juce_dsp.cpp include_juce_events.cpp include_juce_graphics.cpp include_juce_gui_extra.cpp include_juce_opengl.cpp include_juce_osc.cpp include_juce_product_unlocking.cpp include_melatonin_blur.cpp C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.38.33130\include\bit(11): warning STL4038: The contents of <bit> are available only with C++20 or later. [D:\Hise_Work\test4TheDoc\Binaries\Builds\VisualStudio2022\t est4TheDoc_SharedCode.vcxproj] include_hi_snex_60.c include_hi_snex_61.c include_juce_gui_basics.cpp test4TheDoc_SharedCode.vcxproj -> D:\Hise_Work\test4TheDoc\Binaries\Compiled\Shared Code\test4TheDoc.lib include_juce_audio_plugin_client_VST2.cpp Creating library .\..\..\Compiled\VST\test4TheDoc.lib and object .\..\..\Compiled\VST\test4TheDoc.exp Generating code Finished generating code test4TheDoc_VST.vcxproj -> D:\Hise_Work\test4TheDoc\Binaries\Compiled\VST\test4TheDoc.dll Press any key to continue . . .
and the DLL build fine too:
-
-
I just tested on MacOS and get the same error.
-
@d-healey Thank you.
-
@clevername27 I also get the error on Windows.
@Lindon What commit are you using? I'm using 04c8d6c3
-
@d-healey I've all tried all of them from the past few months.
-
@clevername27 @Christoph-Hart Well I finally hit the same road block before plugin release...
I have a clone container with linkwitz riley filters
It does compile without complaining, but it makes no soundAs soon as I remove the clone node and just put the filters as is, it works
-
@ustk different issue I think, although possibly related. But here we can't compile a polyphonic clone
-
@d-healey Did I answer your question about which versions well enough? I didn't mean to sound flippant—just that I really have tried them all (including the version you mentioned).
-
@d-healey said in Compiling Just an Empty Clone Container Fails:
/HISE/hi_dsp_library/node_api/nodes/Containers.h:116:49: error: ‘const struct scriptnode::wrap::clone_base<scriptnode::wrap::clone_data<scriptnode::container::chain<scriptnode::parameter::empty, scriptnode::wrap::fix<2, scriptnode::core::empty> >, 0, 1>, scriptnode::CloneProcessType::Copy>’ has no member named ‘isPolyphonic’ > 116 | bool isPolyphonic() const { return get<0>().isPolyphonic(); }
I'm trying to parse this error. Basically, some code tried calling
isPolyphonic()
on aclone_base
struct whenisPolyphonic()
is not defined for that struct. This is probably a runtime error only seen when compiling clone containers. The location of that code seems to be in theContainers.h
file within thecontainer_base
struct.The
container_base
struct has a protected memberstd::tuple<Processors...>
called elements. This is relevant because the error is referring toget<0>().isPolyphonic()
and get<0>() is defined further up in theContainers.h
file
as (i'm not sure which one)template <int arg> constexpr auto& get() noexcept { return std::get<arg>(elements).getObject(); } template <int arg> constexpr const auto& get() const noexcept { return std::get<arg>(elements).getObject(); }
so
get<0>().isPolyphonic()
is kind of equivalent tostd::get<0>(elements).getObject().isPolyphonic()
which breaks down in English to get the first object in the elements tuple and ask if it's polyphonic. The error leads me to believe that there is aclone_base
struct in that elements tuple of Processors andclone_base
doesn't have functionisPolyphonic()
.clone_base
is a struct defined induplicate.h
and does not seem to have a polyphonic anything related, so I'm guessing there shouldn't be aclone_base
struct in thatelements
tuple. So I'm thinking where does it get in there? So I'm looking for whereclone_base
is referenced and I stumble on this alias definition inprocessors.h
template <typename T, int NumDuplicates> using fix_clonecopy = clone_base<clone_data<T, options::no, NumDuplicates>, CloneProcessType::Copy>;
which means I can cut down the size of the error message to this
/HISE/hi_dsp_library/node_api/nodes/Containers.h:116:49: error: ‘const struct fix_clonecopy’ has no member named ‘isPolyphonic’ > 116 | bool isPolyphonic() const { return get<0>().isPolyphonic(); }
I don't know how all this helps anyone. Does anyone else have a different error message related to this problem that I could look at to look for clues?
-
@d-healey
Im usingc808118776c8f41f5f718faa4f9af3ea5313ba72
from 17th feb.
Im also doing this form a completely fresh, new and empty project...
-
@clevername27 said in Compiling Just an Empty Clone Container Fails:
@d-healey Did I answer your question about which versions well enough? I didn't mean to sound flippant—just that I really have tried them all (including the version you mentioned).
I was only asking Lindon because he said it worked for him.
@Lindon said in Compiling Just an Empty Clone Container Fails:
form a completely fresh, new and empty project...
But you're using the snippet Bill posted?
-
@clevername27 I was curious about your issue here so I tinkered around with it, and I managed to get this to compile (based off of your example):
HiseSnippet 1111.3oc6V0saaaCElzNLoIKccEn.a2MeY5PQfkiShC1EsINwqFaNwXJKn2EPSQGSDIRAIpj5Mr2s8HrGk8FrcnnrkTpbRlQ61tXx.Fh7bN57wuyebXjhwiiUQH7FmOMjivaRbmJ0S5NgJjn9GivqRNmGqQGMMjFGy8PXb8uyHCu9Jnzm+30GQ8oRFOeKD5Bkfw+AQfPmu6v278Be+dTO94hfBZ29M8YJYWkuJAvQcRSTHkcM8J9oTiZ0Hn2RimfveCo03QrVi2emNNG3bv9sOvwY2NiZ2rEya2C1Ym81wabqNz85.Fs5IdBsJxUS07XDdkiTdScmntUZcvEhXwHetYgCxE7rc6dJeOyQzrKp6Dgu2vYDTLBgICyoq5V55EjABOw78yosuHUPibKJRf3ZkgW8RvyoH7ZV.dU.IbAHshEROm3xhDg5bIF77Yj9RMOZLEhSEghUWD92HcUfBR81Azq48hfEyMXq8Z17UMf+d42NNQxzBkrgRdpRyOSt0K23W1X8M90MZbWQiGWoLiahT997nJEaRMhtOC2RlDLhG8pF2P8S3yUDN9k4Txh4zhgbl8TWPQkruTnOKjKWTh.Jipf29o9GS0TSfHaOPuPdjVXf.9X9MPYfMrrN4Xd70ZUHTH7AwLHaQ4k3S0kSgLEZYB.NnTbyDbjwB8zhEhezxqdrP74jgBMaR0XrVEXDXpOEXLqZ7ojSFOlyz4.bERu28oozqn6exL26J7MISlNnot+YY6zHcKm6oK5u+X6hF9n6hhqeeMAcVxlfq7etlfeLpmp8+0S+KWOU0nrOmLT4O0NhB7qA.eY5VgSTRAqgURiduyoxYZeMop4GEFYPdzX249ot7ABmx02phtN8.k8NBulA4eEILRDGzWxd6zQQBOHHyMiAQG56qtM+Tk4adTrI9iWizba3mUqtpfPQVlAjPXWxgviTx8OLPk.X.Sv0.f.2Y5bpv2nlaRLLMy6LYZyHSKFSb6Tv+vEk5QY.ELcHEZYA4el4gPvlGsMadPegHOmzM7h85ZKTYi+l0dhfQorVPfg0LWwCW2H2Rao.KkyViv7URNZwfLUbU3Xlol3YWyawVh8gfQgA31bRyJnhqlAOaR5GegQJi5itvbAjrTh6.9UMJ+TKBtjYRWPO.OW0Qn7GnHv2jztUm8On09sa2tZZDMjFAeD3FbYk1+8NTPJTwO.t17UvgafPloFg3.olCnueNW.EJZdnq3mmK0d6ySSBxhBkL8X9XZhutzdnE4qlk7EgzBVWk2f4vg9Bsq3JY9Ixp9c8WqR9aYopiTpqCnoU8K2MB+QUhVHuZ.UGIdOfKfsbg.MaVoc7rp5r0Mmk65B00oK9S3ISniYMNSnyLg+i3i.JKRcIy1o0PfOIcGHwPllQuNYfYcCGzMVxKeNV.bSgKYrxepOvvVKqg6rrF1dYMb2k0v8VVC2eYMryCan4hbGlnUA1gOHzfgmjlniwmHovTxzIun+Bk4oc+B
I couldn't make any sense of the debug console but it seems to me that the clone container is looking for the number of clones to be specified or it will fail to compile. I also had to add some type of processing in the container or else it would fail. I've used the clone container successfully in the past.
General rule of thumb I follow is make sure the NumClones is the first macro control (and the ranges match for each node it controls), and to precompile all of your processing in a separate scriptnode and load that into the clone container (less error prone, plus it keeps the network more organized).
-
@hujackus As @d-healey mentioned, we may be looking at different issues. That said, here are some links to error messages and possibly-useful information I've received in and around this issue. (@d-healey suggested running the compile directly from inside Xcode, which indeed provided more verbosity in error reporting.)
-
@HISEnberg Interesting and thank you - especially about the parameter ordering. I eventually stopped making the number of clones dynamic, and I think my snippets are all such—but maybe if I don't change the number of active clones during execution, the dynamic process is still happening - in which case, maybe it makes sense to always set the number of clones, manually?
I also don't think any of us have stopped to realise the moral and ethical implications of cloning, but I guess one thing at a time.
-
@hujackus I am feeling like a proper lazy slug looking at all the sleuthing you're doing. (I'm taking a look, now.)
And…you may be on to something. I tried compiling my snippet with that function always returning TRUE, and it compiled.
When you say
struct
, do you meanclass
? (Structs don't have methods, although I guess you could use a function pointer.)I'm assuming that the function is returning whether Clone nodes can be used in polyphonic networks. So, I changed the return value from FALSE to TRUE. Seems to work. Cheers for your detective work, @hujackus.
Update: Didn't work for my original snippet.
@d-healey If this works for others, do you want to submit this? -
This post is deleted! -
@d-healey said in Compiling Just an Empty Clone Container Fails:
@Lindon said in Compiling Just an Empty Clone Container Fails:
form a completely fresh, new and empty project...
But you're using the snippet Bill posted?
Yes