-
-
Notifications
You must be signed in to change notification settings - Fork 68
Description
When running pluginval with --vst3validator on Linux it fails to load the plugin in to the validator. The following command im running
./pluginval --strictness-level 10 --skip-gui-tests --validate-in-process --vst3validator ~/development/audio/build/bin/Release/validator ~/.vst3/MyPlugin.vst3
Which will add this section when --vst3validator has been added as an option
Starting tests in: pluginval / vst3 validator...
/home/erikgr/.vst3/MyPlugin.vst3/Contents/x86_64-linux/MyPlugin.so
/home/erikgr/.vst3/MyPlugin.vst3/Contents/x86_64-linux/MyPlugin.so
!!! Test 2 failed
vst3 validator exited with code: 255
* Loading module...
/home/erikgr/.vst3/MyPlugin.vst3/Contents/x86_64-linux/MyPlugin.so
Invalid Module!
/home/erikgr/.vst3/MyPlugin.vst3/Contents/x86_64-linux/MyPlugin.so is not a module directory.
FAILED!! 1 test failed, out of a total of 2
If I run my plugin manually with validator like this it works
$ ./validator ~/.vst3/MyPlugin.vst3
* Loading module...
/home/erikgr/.vst3/MyPlugin.vst3
* Check valid bundle structure...
* Scanning classes...
Factory Info:
vendor = Test Plugins
url =
email =
Class Info 0:
name = MyPlugin
category = Audio Module Class
subCategories = Fx
version = 0.0.1
sdkVersion = VST 3.7.12
cid = ABCDEF019182FAEB4162797344656D30
Class Info 1:
name = MyPlugin
category = Component Controller Class
subCategories = Fx
version = 0.0.1
sdkVersion = VST 3.7.12
cid = ABCDEF011234ABCD4162797344656D30
Class Info 2:
name = MyPlugin
category = Plugin Compatibility Class
subCategories =
version = 0.0.1
sdkVersion = VST 3.7.12
cid = ABCDEF01C0DEF00D4162797344656D30
* Checking snapshots...
Info: No snapshots in Bundle.
* Creating tests...
* Running tests...
-------------------------------------------------------------
TestSuite : MyPlugin
-------------------------------------------------------------
-------------------------------------------------------------
TestSuite : General Tests
-------------------------------------------------------------
[Scan Editor Classes]
Info: ===Scan Editor Classes ====================================
Info: This component has an edit controller class
Info: Controller CID: {ABCDEF01-1234-ABCD-4162-797344656D30}
[Succeeded]
[Scan Buses]
Info: ===Scan Buses ====================================
Info: => Audio Buses: [1 In(s) => 1 Out(s)]
Info: In [0]: "Input" (Main-Default Active)
Info: Out[0]: "Output" (Main-Default Active)
Info: => Event Buses: [0 In(s) => 0 Out(s)]
[Succeeded]
[Scan Parameters]
Info: ===Scan Parameters ====================================
Info: This component exports 5 parameter(s)
Info: Parameter 000 (id=3165055): [title="Gain"] [unit=""] [type = F, default = 1.000000, unit = 0]
Info: Parameter 001 (id=3327652): [title="Loop"] [unit=""] [type = T, default = 0.000000, unit = 0]
Info: Parameter 002 (id=3443508): [title="Play"] [unit=""] [type = T, default = 0.000000, unit = 0]
Info: Parameter 003 (id=3540994): [title="Stop"] [unit=""] [type = T, default = 0.000000, unit = 0]
Info: Parameter 004 (id=1652125811): [title="Bypass"] [unit=""] [type = T, default = 0.000000, unit = 0]
[Succeeded]
[MIDI Mapping]
Info: ===MIDI Mapping ====================================
[Succeeded]
[MIDI Learn]
Info: ===MIDI Learn ====================================
Info: No MIDI Learn interface supplied!
[Succeeded]
[Scan Units]
Info: ===Scan Units ====================================
Info: This component has 1 unit(s).
Info: Unit000 (ID = 0): "Root Unit" (parent ID = -1, programlist ID = 1886548852)
[Succeeded]
[Scan Programs]
Info: ===Scan Programs ====================================
Info: Programlist 000 (id=1886548852): "Factory Presets" (1 programs).
Info: Programlist 000->Program 000: "default"
[Succeeded]
[Terminate/Initialize]
Info: ===Terminate/Initialize ====================================
[Succeeded]
[Check Unit Structure]
Info: ===Check Unit Structure ====================================
Info: All units have valid parent IDs.
[Succeeded]
[Valid State Transition 32bits]
Info: ===Valid State Transition 32bits ====================================
[Succeeded]
[Valid State Transition 64bits]
Info: ===Valid State Transition 64bits ====================================
Info: 64bit Audio Processing not supported.
[Succeeded]
[Bus Consistency]
Info: ===Bus Consistency ====================================
[Succeeded]
[Bus Activation]
Info: ===Bus Activation ====================================
Info: Bus Activation: Input Audio Bus (0) (kMain)
Info: Bus Activation: Output Audio Bus (0) (kMain)
[Succeeded]
[Check Audio Bus Arrangement]
Info: ===Check Audio Bus Arrangement ====================================
Info: Check Input Audio Bus Arrangement (0)
Info: Check Output Audio Bus Arrangement (0)
[Succeeded]
[SideChain Arrangement]
Info: ===SideChain Arrangement ====================================
[Succeeded]
[Suspend/Resume]
Info: ===Suspend/Resume ====================================
[Succeeded]
[Note Expression]
Info: ===Note Expression ====================================
Info: No Note Expression interface supplied!
[Succeeded]
[Keyswitch]
Info: ===Keyswitch ====================================
Info: No Keyswitch interface supplied!
[Succeeded]
[ProcessContext Requirements]
Info: ===ProcessContext Requirements ====================================
Info: ProcessContextRequirements:
Info: - SystemTime
Info: - ContinousTimeSamples
Info: - ProjectTimeMusic
Info: - BarPosititionMusic
Info: - CycleMusic
Info: - SamplesToNextClock
Info: - Tempo
Info: - TimeSignature
Info: - Chord
Info: - FrameRate
Info: - TransportState
[Succeeded]
-------------------------------------------------------------
TestSuite : Single Precision (32 bit) Tests
-------------------------------------------------------------
[Process Test]
[Succeeded]
[Process function running in another thread]
Info: ===Process function running in another thread ====================================
[Succeeded]
[Silence Flags]
Info: ===Silence Flags ====================================
[Succeeded]
[Silence Processing]
Info: ===Silence Processing ====================================
[Succeeded]
[Parameters Flush (no Buffer)]
Info: ===Parameters Flush (no Buffer) ====================================
[Succeeded]
[Parameters Flush 2 (only numChannel==0)]
Info: ===Parameters Flush 2 (only numChannel==0) ====================================
[Succeeded]
[Parameters Flush 2 (no Buffer, no parameter change)]
Info: ===Parameters Flush 2 (no Buffer, no parameter change) ====================================
[Succeeded]
[Variable Block Size]
Info: ===Variable Block Size ====================================
[Succeeded]
[Process Format]
Info: ===Process Format ====================================
Info: ***Tested Sample Rates***
Info: 22050 Hz - processed successfully!
Info: 32000 Hz - processed successfully!
Info: 44100 Hz - processed successfully!
Info: 48000 Hz - processed successfully!
Info: 88200 Hz - processed successfully!
Info: 96000 Hz - processed successfully!
Info: 192000 Hz - processed successfully!
Info: 384000 Hz - processed successfully!
Info: 1234.5678 Hz - processed successfully!
Info: 12345.678 Hz - processed successfully!
Info: 123456.78 Hz - processed successfully!
Info: 1234567.8 Hz - processed successfully!
[Succeeded]
[Parameter Bypass persistence]
Info: ===Parameter Bypass persistence ====================================
[Succeeded]
[In: Stereo: 2 Channels, Out: Stereo: 2 Channels]
Info: ===In: Stereo: 2 Channels, Out: Stereo: 2 Channels ====================================
[Succeeded]
[In: Mono: 1 Channels, Out: Mono: 1 Channels]
Info: ===In: Mono: 1 Channels, Out: Mono: 1 Channels ====================================
[Succeeded]
[Accuracy: Block, 1 Parameters, Change every100 Samples]
Info: ===Accuracy: Block, 1 Parameters, Change every100 Samples ====================================
[Succeeded]
[Accuracy: Sample, 1 Parameters, Change every100 Samples]
Info: ===Accuracy: Sample, 1 Parameters, Change every100 Samples ====================================
Info: Not all points have been read via IParameterChanges
[Succeeded]
-------------------------------------------------------------
TestSuite : Double Precision (64 bit) Tests
-------------------------------------------------------------
[Process Test]
Info: 64bit Audio Processing not supported.
[Succeeded]
[Process function running in another thread]
Info: 64bit Audio Processing not supported.
[Succeeded]
[Silence Flags]
Info: 64bit Audio Processing not supported.
[Succeeded]
[Silence Processing]
Info: 64bit Audio Processing not supported.
[Succeeded]
[Parameters Flush (no Buffer)]
Info: 64bit Audio Processing not supported.
[Succeeded]
[Parameters Flush 2 (only numChannel==0)]
Info: 64bit Audio Processing not supported.
[Succeeded]
[Parameters Flush 2 (no Buffer, no parameter change)]
Info: 64bit Audio Processing not supported.
[Succeeded]
[Variable Block Size]
Info: 64bit Audio Processing not supported.
[Succeeded]
[Process Format]
Info: 64bit Audio Processing not supported.
[Succeeded]
[Parameter Bypass persistence]
Info: 64bit Audio Processing not supported.
[Succeeded]
[In: Stereo: 2 Channels, Out: Stereo: 2 Channels]
Info: ===In: Stereo: 2 Channels, Out: Stereo: 2 Channels ====================================
Info: 64bit Audio Processing not supported.
[Succeeded]
[In: Mono: 1 Channels, Out: Mono: 1 Channels]
Info: ===In: Mono: 1 Channels, Out: Mono: 1 Channels ====================================
Info: 64bit Audio Processing not supported.
[Succeeded]
[Accuracy: Block, 1 Parameters, Change every100 Samples]
Info: ===Accuracy: Block, 1 Parameters, Change every100 Samples ====================================
Info: 64bit Audio Processing not supported.
[Succeeded]
[Accuracy: Sample, 1 Parameters, Change every100 Samples]
Info: ===Accuracy: Sample, 1 Parameters, Change every100 Samples ====================================
Info: 64bit Audio Processing not supported.
[Succeeded]
Warning: The module contains a moduleinfo.json file and the module factory exports a IPluginCompatibility class. The moduleinfo.json one is preferred.
-------------------------------------------------------------
Result: 47 tests passed, 0 tests failed
-------------------------------------------------------------
So it seems the validator expects the bundle dir (.vst3) as the argument to the validator binary itself. This error seems to happen internally in Juce due to calling this function when setting up the audio host.
static File getDLLFileFromBundle (const String& bundlePath)
{
#if JUCE_LINUX || JUCE_BSD
const auto machineName = []() -> String
{
struct utsname unameData;
const auto res = uname (&unameData);
if (res != 0)
return {};
return unameData.machine;
}();
const File file { bundlePath };
return file.getChildFile ("Contents")
.getChildFile (machineName + "-linux")
.getChildFile (file.getFileNameWithoutExtension() + ".so");
#else
return File { bundlePath };
#endif
}
which in the end will populate the desc.fileOrIdentifier in VST3Validator class in Pluginval to use the .so file as the file to load in to the validator instead of the plugin bundle dir (MyPlugin.vst3). Using --vst3validator on Windows or Mac does not cause this issue and works fine there.
Using desc.fileOrIdentifier when running Linux does not seems to be a feasible solution in pluginval when using --vst3validator option since it will return the .so instead of the .vst3 bundle.