|
From: Christian S. <sch...@li...> - 2021-12-27 14:40:11
|
On Sonntag, 26. Dezember 2021 21:57:12 CET Andrew C wrote:
> *Diff patch for debugging/illustration purposes:*
>
> Index: LS-DEBUG/src/engines/gig/InstrumentResourceManager.cpp
> ===================================================================
> --- LS-DEBUG/src/engines/gig/InstrumentResourceManager.cpp (revision
> 4010)
> +++ LS-DEBUG/src/engines/gig/InstrumentResourceManager.cpp (working
> copy)
> @@ -216,6 +216,8 @@
> InstrumentEditor*
> InstrumentResourceManager::LaunchInstrumentEditor(LinuxSampler::EngineChanne
> l* pEngineChannel, instrument_id_t ID,
> void* pUserData) throw (InstrumentManagerException) {
> const String sDataType = GetInstrumentDataStructureName(ID);
> const String sDataVersion = GetInstrumentDataStructureVersion(ID);
> + fprintf (stderr, "Data type is %s and data version is %s\n",
> sDataType.c_str(), sDataVersion.c_str());
> + fprintf (stderr, "Instrument plugin is %s\n",
> InstrumentEditorFactory::AvailableEditorsAsString().c_str());
The output of this was an empty string there, which means the sampler did not
load *any* plugin DLL at all.
> // find instrument editors capable to handle given instrument
> std::vector<String> vEditors =
> InstrumentEditorFactory::MatchingEditors(sDataType,
> sDataVersion);
> @@ -224,10 +226,16 @@
> fprintf(stderr,
> "ERROR: There is not any instrument editor registered
> to the sampler!\n"
> "[Cause: Make sure an instrument editor is installed to
> the sampler's plugin dir (%s)]\n",
> - InstrumentEditorFactory::PluginDirsAsString().c_str()
> - );
> +
> InstrumentEditorFactory::PluginDirsAsString().c_str());
> + if (InstrumentEditorFactory::FoundPlugins) {
> + fprintf (stderr,
> + "We found and registered plugins in %s at startup, but
> currently available plugins are:%s \n",
> + InstrumentEditorFactory::PluginDirsAsString().c_str(),
> +
>
> InstrumentEditorFactory::AvailableEditorsAsString().c_str()
>
> + );
> + };
> throw InstrumentManagerException(
> - "There is not any instrument editor installed and
> registered to the sampler"
> + "netcat seems to cause issues."
> );
Has nothing to do with netcat.
> }
> fprintf(stderr,
> Index: LS-DEBUG/src/plugins/InstrumentEditorFactory.cpp
> ===================================================================
> --- LS-DEBUG/src/plugins/InstrumentEditorFactory.cpp (revision 4010)
> +++ LS-DEBUG/src/plugins/InstrumentEditorFactory.cpp (working copy)
> @@ -44,6 +44,7 @@
> std::map<String, InstrumentEditorFactory::InnerFactory*>
> InstrumentEditorFactory::InnerFactories;
>
> bool InstrumentEditorFactory::bPluginsLoaded = false;
> + bool InstrumentEditorFactory::FoundPlugins = false;
>
> std::list<void*> InstrumentEditorFactory::LoadedDLLs;
>
> @@ -287,6 +288,7 @@
> }
> closedir(hDir);
> #endif
> + InstrumentEditorFactory::FoundPlugins = true;
> return true;
> }
Wrong assumption. At this point it just *tried* to load plugins. It does not
mean it was able to actually load any plugin successfully.
You should rather debug what happens in the loop above.
for (dirent* pEntry = readdir(hDir); pEntry; pEntry = readdir(hDir)) {
...
}
That loops iterares over all files found in the plugin dir and then tries to
load every file that is actually a DLL file (i.e. filename ending with ".so").
> Index: LS-DEBUG/src/plugins/InstrumentEditorFactory.h
> ===================================================================
> --- LS-DEBUG/src/plugins/InstrumentEditorFactory.h (revision 4010)
> +++ LS-DEBUG/src/plugins/InstrumentEditorFactory.h (working copy)
> @@ -98,6 +98,7 @@
> static String PluginDirsAsString();
> static std::vector<String> AvailableEditors();
> static String AvailableEditorsAsString();
> + static bool FoundPlugins;
> static std::vector<String> MatchingEditors(String sTypeName, String
> sTypeVersion);
> static void LoadPlugins();
> static void ClosePlugins();
|