[ANN] yabridge 5.1.0, a long-awaited maintenance release

Discuss running non-Linux applications and plugins on Linux, for example via wine

Moderators: MattKingUSA, khz

robbert-vdh
Established Member
Posts: 219
Joined: Mon Mar 01, 2021 10:56 pm
Has thanked: 51 times
Been thanked: 92 times
Contact:

Re: [ANN] yabridge 3.3.1

Post by robbert-vdh »

GMaq wrote: Fri Jun 25, 2021 12:03 am OK sorry I had misunderstood, yes it is a 64bit Ardour so that makes sense... I have band rehearsal for the rest of the night so will have to let it go until tomorrow... An annoyance is that EnergyXT's file browser doesn't have a hidden files option I just discovered... not insurmountable but I'll have to reorganize..
Yeah the regular yabridge builds will let you use 32-bit and 64-bit Windows VST2 and VST3 plugins in regular 64-bit Linux VST2 and VST3 hosts, while this build (let's call it the special EnergyXT build :D) does the same thing for 32-bit hosts. I showed this off in Bitwig because BItwig can load both 32-bit and 64-bit VST2 plugins and that was the easiest way to this this for me.

And thanks for reminding me about that WINEARCH=win32 stuff! With this commit yabridgectl uses now yabridge-host-32.exe instead of yabridge-host.exe to verify that Wine's working correctly when the default Wine prefix is set to 32-bit only.
User avatar
GMaq
Established Member
Posts: 2774
Joined: Fri Sep 25, 2009 1:42 pm
Has thanked: 520 times
Been thanked: 555 times

Re: [ANN] yabridge 3.3.1

Post by GMaq »

Hmmm

OK well unfortunately things in EnergyXT are a no go and it doesn't tell you anything when you run it a terminal, it just says 'Failed to load Plugin' when you click on the plugin on a track... EnergyXT is a cagey little spud and can be stubborn. Perhaps we're just DOA with this idea but I also have to do some hackery with LinVST to make it work and this is what I do with LinVST in case that gives us an idea of where to look..

When I run EnergyXT on a 64bit system I install the usual 32bit/64bit package meaning it will run 32 and 64bit Win VST's on a 64bit machine just like yabridge does BUT... If I use the supplied 32/64bit 'linvst.so' file with LinVST then EnergyXT fails to load Windows plugins on a 64bit system but if I copy over a 'linvst.so' file compiled on a 32bit machine and select it and re-run LinVST then it does work, so these LinVST 'hackages' have both a 64/32bit linvst.so file AND a second linvst.so file compiled on a 32bit machine and for some reason this is the magic glue that works.. perhaps I just got lucky with some quirk in LinVST...*shrugs

So... is it possible there is something different about how the .so file is defined or written? If you'd like to step off this bus now I certainly wouldn't blame you ... :wink:
robbert-vdh
Established Member
Posts: 219
Joined: Mon Mar 01, 2021 10:56 pm
Has thanked: 51 times
Been thanked: 92 times
Contact:

Re: [ANN] yabridge 3.3.1

Post by robbert-vdh »

GMaq wrote: Fri Jun 25, 2021 3:43 am Hmmm

OK well unfortunately things in EnergyXT are a no go and it doesn't tell you anything when you run it a terminal, it just says 'Failed to load Plugin' when you click on the plugin on a track... EnergyXT is a cagey little spud and can be stubborn. Perhaps we're just DOA with this idea but I also have to do some hackery with LinVST to make it work and this is what I do with LinVST in case that gives us an idea of where to look..

When I run EnergyXT on a 64bit system I install the usual 32bit/64bit package meaning it will run 32 and 64bit Win VST's on a 64bit machine just like yabridge does BUT... If I use the supplied 32/64bit 'linvst.so' file with LinVST then EnergyXT fails to load Windows plugins on a 64bit system but if I copy over a 'linvst.so' file compiled on a 32bit machine and select it and re-run LinVST then it does work, so these LinVST 'hackages' have both a 64/32bit linvst.so file AND a second linvst.so file compiled on a 32bit machine and for some reason this is the magic glue that works.. perhaps I just got lucky with some quirk in LinVST...*shrugs

So... is it possible there is something different about how the .so file is defined or written? If you'd like to step off this bus now I certainly wouldn't blame you ... :wink:
I did an oopsie and accidentally copied the 32-bit libraries that I built as well as the regular yabridge host applications from the build directory on my Manjaro install, and those won't run on Debian Bullseye. Can you try again with these files? I've also included an up to date version of yabridgectl in there. Those should work just fine in a 32-bit host on Debian Buster and up! As an extra sanity check after replacing yabridge's files with the ones from that new archive, you can check whether these ldd commands don't show any warnings or missing libraries:

Code: Select all

ldd ~/.local/share/yabridge/libyabridge-vst2.so
ldd ~/.local/share/yabridge/yabridge-host.exe.so
ldd ~/.local/share/yabridge/yabridge-host-32.exe.so
And that `~/.local/share/yabridge/yabridgectl status` points to these files. If the library situation is in order and it still doesn't work, then you can try launching EnergyXT with `env YABRIDGE_DEBUG_FILE=/tmp/yabridge.log energy-xt` (or whatever EnergyXT's binary is called), and yabridge should print its initialization output and any errors to /tmp/yabridge.log after it gets loaded.
User avatar
GMaq
Established Member
Posts: 2774
Joined: Fri Sep 25, 2009 1:42 pm
Has thanked: 520 times
Been thanked: 555 times

Re: [ANN] yabridge 3.3.1

Post by GMaq »

OK, still no luck... but let's start at the beginning. Lots of term pastes coming... Telling me to 'get lost!' at any point is totally appropriate... :D

1. I updated all of the yabridge libs and then ran the sanity checks:

Code: Select all

$ ldd ~/.local/share/yabridge/libyabridge-vst2.so
	linux-gate.so.1 (0xf7edf000)
	libdl.so.2 => /lib/i386-linux-gnu/libdl.so.2 (0xf7c96000)
	librt.so.1 => /lib/i386-linux-gnu/librt.so.1 (0xf7c8b000)
	libgcc_s.so.1 => /lib/i386-linux-gnu/libgcc_s.so.1 (0xf7c6c000)
	libpthread.so.0 => /lib/i386-linux-gnu/libpthread.so.0 (0xf7c4a000)
	libc.so.6 => /lib/i386-linux-gnu/libc.so.6 (0xf7a61000)
	/lib/ld-linux.so.2 (0xf7ee1000)

Code: Select all

$ ldd ~/.local/share/yabridge/yabridge-host.exe.so
	linux-vdso.so.1 (0x00007ffc559fb000)
	librt.so.1 => /lib/x86_64-linux-gnu/librt.so.1 (0x00007f2fe3ca6000)
	libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007f2fe3c84000)
	libxcb.so.1 => /lib/x86_64-linux-gnu/libxcb.so.1 (0x00007f2fe3c59000)
	libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f2fe3a94000)
	/lib64/ld-linux-x86-64.so.2 (0x00007f2fe4042000)
	libgcc_s.so.1 => /lib/x86_64-linux-gnu/libgcc_s.so.1 (0x00007f2fe3a7a000)
	libXau.so.6 => /lib/x86_64-linux-gnu/libXau.so.6 (0x00007f2fe3a75000)
	libXdmcp.so.6 => /lib/x86_64-linux-gnu/libXdmcp.so.6 (0x00007f2fe386d000)
	libbsd.so.0 => /lib/x86_64-linux-gnu/libbsd.so.0 (0x00007f2fe3856000)
	libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007f2fe3850000)
	libmd.so.0 => /lib/x86_64-linux-gnu/libmd.so.0 (0x00007f2fe3843000)

Code: Select all

$ ldd ~/.local/share/yabridge/yabridge-host-32.exe.so
	linux-gate.so.1 (0xf7ee3000)
	librt.so.1 => /lib/i386-linux-gnu/librt.so.1 (0xf7b38000)
	libpthread.so.0 => /lib/i386-linux-gnu/libpthread.so.0 (0xf7b16000)
	libxcb.so.1 => /lib/i386-linux-gnu/libxcb.so.1 (0xf7ae8000)
	libc.so.6 => /lib/i386-linux-gnu/libc.so.6 (0xf78ff000)
	/lib/ld-linux.so.2 (0xf7ee5000)
	libgcc_s.so.1 => /lib/i386-linux-gnu/libgcc_s.so.1 (0xf78e0000)
	libXau.so.6 => /lib/i386-linux-gnu/libXau.so.6 (0xf78db000)
	libXdmcp.so.6 => /lib/i386-linux-gnu/libXdmcp.so.6 (0xf78d4000)
	libbsd.so.0 => /lib/i386-linux-gnu/libbsd.so.0 (0xf78bc000)
	libdl.so.2 => /lib/i386-linux-gnu/libdl.so.2 (0xf78b6000)
	libmd.so.0 => /lib/i386-linux-gnu/libmd.so.0 (0xf78a7000)
Our status shows this:

Code: Select all

~/.local/share/yabridge/yabridgectl status
yabridge path: <auto>
libyabridge-vst2.so: '/home/isotester/.local/share/yabridge/libyabridge-vst2.so'
libyabridge-vst3.so: '/home/isotester/.local/share/yabridge/libyabridge-vst3.so' (32-bit)

installation method: copy

/home/isotester/.winvst32/
  ANWIDASoft/ANWIDA Soft DX Reverb Light.dll :: VST2, 32-bit, copy
  AuburnSounds/Auburn Sounds Couture.dll :: VST2, 32-bit, copy
  AuburnSounds/Auburn Sounds Graillon 2.dll :: VST2, 32-bit, copy
  AuburnSounds/Auburn Sounds Panagement 2.dll :: VST2, 32-bit, copy
  AudioDamage/Dubstation 2.dll :: VST2, 32-bit, copy
  Camelcrusher/CamelCrusher.dll :: VST2, 32-bit, copy
  Charlatan/Charlatan.dll :: VST2, 32-bit, copy
  Cutthrough/CTR M4 Multiband Compressor.dll :: VST2, 32-bit, copy
  Cutthrough/Cut Through Recordings Entropy II.dll :: VST2, 32-bit, copy
  Cutthrough/Cut Through Recordings EpicPRESS.dll :: VST2, 32-bit, copy
  Cutthrough/Cut Through Recordings Faradelay.dll :: VST2, 32-bit, copy
  Dexed/Dexed.dll :: VST2, 32-bit, copy
  DiscoDSP/Bliss32Demo.dll :: VST2, 32-bit, copy
  ESP/ESP_FreeeQ.dll :: VST2, 32-bit, copy
  ESP/ESP_UniQ.dll :: VST2, 32-bit, copy
  FabFilter/FabFilter Pro-L 2.dll :: VST2, 32-bit, copy
  FabFilter/FabFilter Pro-Q 3.dll :: VST2, 32-bit, copy
  GSI/VB3.dll :: VST2, 32-bit, copy
  GSI/VB3fx.dll :: VST2, 32-bit, copy
  GVst/GBand.dll :: VST2, 32-bit, copy
  GVst/GChorus.dll :: VST2, 32-bit, copy
  GVst/GClip.dll :: VST2, 32-bit, copy
  GVst/GComp.dll :: VST2, 32-bit, copy
  GVst/GComp2.dll :: VST2, 32-bit, copy
  GVst/GDelay.dll :: VST2, 32-bit, copy
  GVst/GDuckDly.dll :: VST2, 32-bit, copy
  GVst/GFader.dll :: VST2, 32-bit, copy
  GVst/GForm.dll :: VST2, 32-bit, copy
  GVst/GGain.dll :: VST2, 32-bit, copy
  GVst/GGate.dll :: VST2, 32-bit, copy
  GVst/GGrain.dll :: VST2, 32-bit, copy
  GVst/GHi.dll :: VST2, 32-bit, copy
  GVst/GLFO.dll :: VST2, 32-bit, copy
  GVst/GLoop.dll :: VST2, 32-bit, copy
  GVst/GLow.dll :: VST2, 32-bit, copy
  GVst/GMax.dll :: VST2, 32-bit, copy
  GVst/GMonoBass.dll :: VST2, 32-bit, copy
  GVst/GMulti.dll :: VST2, 32-bit, copy
  GVst/GNormal.dll :: VST2, 32-bit, copy
  GVst/GPitchGate.dll :: VST2, 32-bit, copy
  GVst/GRect.dll :: VST2, 32-bit, copy
  GVst/GRevDly.dll :: VST2, 32-bit, copy
  GVst/GSatMax.dll :: VST2, 32-bit, copy
  GVst/GSinth.dll :: VST2, 32-bit, copy
  GVst/GSinth2.dll :: VST2, 32-bit, copy
  GVst/GSinthG.dll :: VST2, 32-bit, copy
  GVst/GSnap.dll :: VST2, 32-bit, copy
  GVst/GSpace.dll :: VST2, 32-bit, copy
  GVst/GStereo.dll :: VST2, 32-bit, copy
  GVst/GTriChorus.dll :: VST2, 32-bit, copy
  GVst/GTune.dll :: VST2, 32-bit, copy
  Helm/helm.dll :: VST2, 32-bit, copy
  IgniteAmps/Emissary.dll :: VST2, 32-bit, copy
  IgniteAmps/SHB-1.dll :: VST2, 32-bit, copy
  Kjaerhus/ClassicAuto-Filter.dll :: VST2, 32-bit, copy
  Kjaerhus/ClassicChorus.dll :: VST2, 32-bit, copy
  Kjaerhus/ClassicCompressor.dll :: VST2, 32-bit, copy
  Kjaerhus/ClassicDelay.dll :: VST2, 32-bit, copy
  Kjaerhus/ClassicEQ.dll :: VST2, 32-bit, copy
  Kjaerhus/ClassicFlanger.dll :: VST2, 32-bit, copy
  Kjaerhus/ClassicMasterLimiter.dll :: VST2, 32-bit, copy
  Kjaerhus/ClassicPhaser.dll :: VST2, 32-bit, copy
  Klanghelm/DC1A2.dll :: VST2, 32-bit, copy
  Klanghelm/IVGI2.dll :: VST2, 32-bit, copy
  Klanghelm/MJUCjr.dll :: VST2, 32-bit, copy
  LePou/HyBrit.dll :: VST2, 32-bit, copy
  LePou/Le456.dll :: VST2, 32-bit, copy
  LePou/LeCto.dll :: VST2, 32-bit, copy
  LePou/LeGion.dll :: VST2, 32-bit, copy
  LePou/LeXtac.dll :: VST2, 32-bit, copy
  Loomer/AspectVST.dll :: VST2, 32-bit, copy
  Loomer/StringVST.dll :: VST2, 32-bit, copy
  Loomer/StringVST_FX.dll :: VST2, 32-bit, copy
  Obxd/Obxd.dll :: VST2, 32-bit, copy
  OvertoneDSP/DYN500.dll :: VST2, 32-bit, copy
  OvertoneDSP/EQ500.dll :: VST2, 32-bit, copy
  OvertoneDSP/FC70.dll :: VST2, 32-bit, copy
  OvertoneDSP/PTC-2A.dll :: VST2, 32-bit, copy
  OvertoneDSP/PTM-5A.dll :: VST2, 32-bit, copy
  OvertoneDSP/RVB500.dll :: VST2, 32-bit, copy
  SFZ/sfz.dll :: VST2, 32-bit, copy
  SKnote/Deluxe1.dll :: VST2, 32-bit, copy
  SKnote/Disto.dll :: VST2, 32-bit, copy
  SKnote/DolA.dll :: VST2, 32-bit, copy
  SKnote/TwinR.dll :: VST2, 32-bit, copy
  SmartElectronix/Ambience.dll :: VST2, 32-bit, copy
  SmartElectronix/AnalogDelay.dll :: VST2, 32-bit, copy
  TAL/TAL-Chorus-LX.dll :: VST2, 32-bit, copy
  TAL/TAL-Dub-3.dll :: VST2, 32-bit, copy
  TAL/TAL-Filter.dll :: VST2, 32-bit, copy
  TAL/TAL-NoiseMaker.dll :: VST2, 32-bit, copy
  TAL/TAL-Reverb-2.dll :: VST2, 32-bit, copy
  TAL/TAL-Reverb-3.dll :: VST2, 32-bit, copy
  TAL/TAL-Reverb-4.dll :: VST2, 32-bit, copy
  TAL/TAL-Vocoder.dll :: VST2, 32-bit, copy
  TDR/Proximity.dll :: VST2, 32-bit, copy
  TDR/TDR Kotelnikov.dll :: VST2, 32-bit, copy
  TDR/TDR Nova.dll :: VST2, 32-bit, copy
  TDR/TDR VOS SlickEQ.dll :: VST2, 32-bit, copy
  TSE/TSE_808_2.0.dll :: VST2, 32-bit, copy
  TSE/TSE_BOD_v2.0.dll :: VST2, 32-bit, copy
  ThomasMundt/LoudMax.dll :: VST2, 32-bit, copy
  Uhe/Beatzille.dll :: VST2, 32-bit, copy
  Uhe/Podolski.dll :: VST2, 32-bit, copy
  Uhe/Presswerk.dll :: VST2, 32-bit, copy
  Uhe/Protoverb.dll :: VST2, 32-bit, copy
  Uhe/Satin.dll :: VST2, 32-bit, copy
  Uhe/TyrellN6.dll :: VST2, 32-bit, copy
  Uhe/ZRev.dll :: VST2, 32-bit, copy
  Uhe/Zebra2.dll :: VST2, 32-bit, copy
  Uhe/Zebralette.dll :: VST2, 32-bit, copy
  Uhe/Zebrify.dll :: VST2, 32-bit, copy
  Variety Of Sound/BaxterEQ.dll :: VST2, 32-bit, copy
  Variety Of Sound/BootEQmkII.dll :: VST2, 32-bit, copy
  Variety Of Sound/DensitymkIII.dll :: VST2, 32-bit, copy
  Variety Of Sound/FerricTDS.dll :: VST2, 32-bit, copy
  Variety Of Sound/NastyDLAmkII.dll :: VST2, 32-bit, copy
  Variety Of Sound/NastyVCS.dll :: VST2, 32-bit, copy
  Variety Of Sound/RescueMK2.dll :: VST2, 32-bit, copy
  Variety Of Sound/SlickHDR.dll :: VST2, 32-bit, copy
  Variety Of Sound/TesslaPROmkII.dll :: VST2, 32-bit, copy
  Variety Of Sound/TesslaSE.dll :: VST2, 32-bit, copy
  Variety Of Sound/ThrillseekerLA.dll :: VST2, 32-bit, copy
  Variety Of Sound/ThrillseekerVBL.dll :: VST2, 32-bit, copy
  Variety Of Sound/ThrillseekerXTC black.dll :: VST2, 32-bit, copy
  Variety Of Sound/ThrillseekerXTC blue.dll :: VST2, 32-bit, copy
  Variety Of Sound/epicVerb.dll :: VST2, 32-bit, copy
  Voxengo/Boogex.dll :: VST2, 32-bit, copy
  Voxengo/OldSkoolVerb.dll :: VST2, 32-bit, copy
  Voxengo/Overtone GEQ.dll :: VST2, 32-bit, copy
  Voxengo/Stereo Touch.dll :: VST2, 32-bit, copy
  WaveArts/Dialog.dll :: VST2, 32-bit, copy
  xhip/effects/xhip_clipper_32bit.dll :: VST2, 32-bit, copy
  xhip/effects/xhip_compressor_32bit.dll :: VST2, 32-bit, copy
  xhip/effects/xhip_follower_32bit.dll :: VST2, 32-bit, copy
  xhip/effects/xhip_gate_32bit.dll :: VST2, 32-bit, copy
  xhip/effects/xhip_limiter_32bit.dll :: VST2, 32-bit, copy
  xhip/effects/xhip_mdelay_32bit.dll :: VST2, 32-bit, copy
  xhip/effects/xhip_multiplier_32bit.dll :: VST2, 32-bit, copy
  xhip/effects/xhip_phaser_32bit.dll :: VST2, 32-bit, copy
  xhip/effects/xhip_quantizer_32bit.dll :: VST2, 32-bit, copy
  xhip/effects/xhip_rcfilter_32bit.dll :: VST2, 32-bit, copy
  xhip/effects/xhip_rectifier_32bit.dll :: VST2, 32-bit, copy
  xhip/effects/xhip_reverb_32bit.dll :: VST2, 32-bit, copy
  xhip/effects/xhip_ringmod_32bit.dll :: VST2, 32-bit, copy
  xhip/effects/xhip_tremolo_32bit.dll :: VST2, 32-bit, copy
  xhip/effects/xhip_vocal_32bit.dll :: VST2, 32-bit, copy
  xhip/xhip_8_32bit.dll :: VST2, 32-bit, copy

Running this command launches energyXT properly:

Code: Select all

 `env YABRIDGE_DEBUG_FILE=/tmp/yabridge.log /opt/energyXT27/energyXT`
EnergyXT does 'see' the Plugins and they are listed to select:
eXT-Plugins.png
eXT-Plugins.png (7.84 KiB) Viewed 8315 times
Adding a Plugin to a track throws the dreaded...
eXT-Plugins2.png
eXT-Plugins2.png (3.63 KiB) Viewed 8315 times
Throughout the process no information prints in the Terminal running EnergyXT and no log file is created in /tmp.. To clarify I have pruned out any and all WinVST's that don't work in EnergyXT with LinVST so it isn't a question of trying a Plugin that is not known to work..

Any further suggestions..? Or have you had enough of this trip down the 'ole rabbit hole..? Your time and attention so far are VERY much appreciated..
robbert-vdh
Established Member
Posts: 219
Joined: Mon Mar 01, 2021 10:56 pm
Has thanked: 51 times
Been thanked: 92 times
Contact:

Re: [ANN] yabridge 3.3.1

Post by robbert-vdh »

GMaq wrote: Fri Jun 25, 2021 6:57 pm <snip>
I'll have to check out EnergyXT myself I guess. If the plugins show up in the list there then you'd think it should just work, right? And the terminal output you posted also shows that everything should work fine. But the fact that /tmp/yabridge.log doesn't get created means that EnergyXT doesn't even try to load the plugins, so there must be something strange going on! It's 1:35 a.m. here now, but I'll try to run EnergyXT myself tomorrow to see if I can find a reason why it wouldn't try to load these plugins. I'll get back to you!
robbert-vdh
Established Member
Posts: 219
Joined: Mon Mar 01, 2021 10:56 pm
Has thanked: 51 times
Been thanked: 92 times
Contact:

Re: [ANN] yabridge 3.3.1

Post by robbert-vdh »

(forum's back online, hooray!)

Hey @GMaq! I went on a little debugging adventure for you. These were my notes, in case some of this is useful to someone else in the future:
  • I'm on Manjaro Linux, and I used the exact same yabridge files I linked above. I Downloaded the EnergyXT 2.7 Linux demo from http://energy-xt.com/energyxt.html.
  • The plugin path browser doesn't show dotfiles, and it also doesn't show symlinks, so I copied some plugins from my default Wine prefix to some directory in my home directory and added that directory to EnergyXT's plugin search paths.
  • Dragging in a plugin gets me the same 'Failed to open' message, so, success? Reproducible issues are a form of success, I guess.
  • EnergyXT seems to show all .so files, not just VST2 plugins. That seems like a very important observation here.
  • Since the plugin doesn't seem to be loaded by EnergyXT (because there's no log file being created), the obvious next thing to do was to check what the dynamic linker is doing. I reran EnergyXT with `LD_DEBUG=files ./energyXT`. This is the debug output printed by the dynamic linker when dragging a plugin into the right panel:

    Code: Select all

         40060:
         40060:     file=/home/robbert/vstplugins-removeme/FerricTDS.so [0];  dynamically loaded by ./energyXT [0]
         40060:     file=/home/robbert/vstplugins-removeme/FerricTDS.so [0];  generating link map
         40060:       dynamic: 0xf49c547c  base: 0xf47b4000   size: 0x00215070
         40060:         entry: 0xf4822fe0  phdr: 0xf47b4034  phnum:          8
         40060:
         40060:     activating NODELETE for /home/robbert/vstplugins-removeme/FerricTDS.so [0]
         40060:
         40060:     calling init: /home/robbert/vstplugins-removeme/FerricTDS.so
         40060:
         40060:     opening file=/home/robbert/vstplugins-removeme/FerricTDS.so [0]; direct_opencount=1
         40060:
         40060:     /home/robbert/vstplugins-removeme/FerricTDS.so: error: symbol lookup error: undefined symbol: main (fatal)
      
  • That means that EnergyXT is trying to call the deprecated/removed `main` entry point for the plugin instead of the normal `VSTPluginMain` entry point that's been the only valid VST2 entry point since VST2.4's release in 2006. Now, as noted here, we didn't define `main` because that function name is normally reserved for an executable's main entry point and GCC really doesn't want you to export an arbitrary function with that name. That's probably also why they removed this entry point in VST2.4. And since this entry point wasn't used anywhere else, I had decided to not persue the matter further. But as it turns out now, EnergyXT does use this old deprecated entry point.
  • I added this entry point in e0713c5fe7da9d52268bcabf0ae90e14fd2e2345, and now everything works as expected in EnergyXT!
Can you try again with these files? Don't forget to rerun `yabridgectl sync` after replacing the files!
User avatar
GMaq
Established Member
Posts: 2774
Joined: Fri Sep 25, 2009 1:42 pm
Has thanked: 520 times
Been thanked: 555 times

Re: [ANN] yabridge 3.3.1

Post by GMaq »

DING DING DING!!!! WE HAVE A WINNNNNNNNNNNNER!!!! :D :D :D
Image

@robbert-vdh THANK YOU!!!

I understand eXT is archaic, it's developer seems to be pretty reviled (especially on KVR...Jeez!) and it's Linux port was never really fully realized or fully baked or promoted (I tried in the early AVL days) but for a MIDI midget like me it is the most intuitive and easy to use software for loop-based editing I've ever used... It is decades behind Ardour's Audio supremacy but if Ardour's MIDI capabilities ever approach being this good it will be a happy day in Audio linuxdom! I can't express how grateful I am to you for giving this topic your time and attention and such a thorough effort, I will be visiting your paypal to offset a fraction of your time but seriously man you went above and beyond on this!

Your findings on VST are interesting, I'm not sure how much of this scales to LinuxVST plugins but EnergyXT is extremely picky about which LinuxVST plugins work... old ones you would expect to 'just work' like falkTX's TAL ports will not run but @Michael Willis Dragonfly Reverbs work perfectly..

Now here's a stupid set of questions:... Can I run 2 versions of yabridge on my system to support both 32bit EnergyXT and 64bit Ardour without an ornate pretzel web of multiple Wine prefixes?? Secondly I have been working on an EnergyXT 'bundle' that comes with the working plugins and synths included as well as a handful of useful SFZ files... kind of an install and use as-is type of thing... Is there any way to make a static yabridge build as simple a one-time part of the bundle itself that won't interfere with someone's existing yabridge? For an example my EnergyXT bundles install to /opt with all the plugins and soundlibs contained in the same folder.. If we know all the contained plugin locations could a script launch yabridge and run EnergyXT all self-contained??
robbert-vdh
Established Member
Posts: 219
Joined: Mon Mar 01, 2021 10:56 pm
Has thanked: 51 times
Been thanked: 92 times
Contact:

Re: [ANN] yabridge 3.3.1

Post by robbert-vdh »

Hooray! Awesome to hear that it's also working for you! When I started working on yabridge I didn't bother with the magic incantations needed to get this other, deprecated VST2 entry point to work because it didn't seem necessary, but I never considered that ancient abandoned propietary DAWs are also a thing on Linux. :D
GMaq wrote: Sat Jun 26, 2021 10:16 pm Your findings on VST are interesting, I'm not sure how much of this scales to LinuxVST plugins but EnergyXT is extremely picky about which LinuxVST plugins work... old ones you would expect to 'just work' like falkTX's TAL ports will not run but @Michael Willis Dragonfly Reverbs work perfectly..
If those plugins also didn't load at all with the exact same error message, then there's a good chance those plugins also don't export this `main` entry point.
GMaq wrote: Sat Jun 26, 2021 10:16 pm Now here's a stupid set of questions:... Can I run 2 versions of yabridge on my system to support both 32bit EnergyXT and 64bit Ardour without an ornate pretzel web of multiple Wine prefixes?? Secondly I have been working on an EnergyXT 'bundle' that comes with the working plugins and synths included as well as a handful of useful SFZ files... kind of an install and use as-is type of thing... Is there any way to make a static yabridge build as simple a one-time part of the bundle itself that won't interfere with someone's existing yabridge? For an example my EnergyXT bundles install to /opt with all the plugins and soundlibs contained in the same folder.. If we know all the contained plugin locations could a script launch yabridge and run EnergyXT all self-contained??
So yabridge consists of two parts: the plugin libraries (in VST2 and VST3 flavours), and a set of plugin host applications that run under Wine (for individually hosted plugins and plugin groups, and for 32-bit and 64-bit plugins). And then there's of course also yabridgectl, which is technically not part of yabridge but it's another part of the equation here. Those host applications obviously don't care whether yabridge's native plugin library was 32-bit or 64-bit, but the plugin libraries and the Wine host applications do need to stay in sync since the message format might change between yabridge updates. And since 64-bit applications won't be able to load the 32-bit yabridge plugin libraries and vice versa, you will need two copies of your plugins (or do some funky stuff with symlinks) if you want to be able to use them in both EnergyXT and in Ardour. And lastly, for such a setup you'd of course want to have a separate set of plugin search paths for yabridgectl. Yabridgectl normally stores it's config in ~/.config/yabridgectl/config.toml, but it does respect the XDG Base Directory specification, so it actually stores the files in $XDG_BASE_DIR/yabridgectl/config.toml. So, my suggestion for having a self contained EnergyXT setup with yabridge would be as follows:

Code: Select all

somewhere-on-the-disk
|- energyXT27
|  └- ... (the regular EnergyXT files are here)
|- yabridge
|  └- ... (the files for this special 32-bit yabridge build)
|- plugins
|  └- ... (Windows VST2 plugins, in a non-self contained setup I'd
|          have this directory inside of normal Wine prefix)
|- configs
|  |- yabridgectl
|  |  └- yabridgectl.toml (the paths stored here are absolute,
|  |                       that's one thing to keep in mind)
|  └- ... ($XDG_CONFIG_HOME will point to this directory)
|- yabridge-env (or a better name)
└- energyxt (runs EnergyXT under this environment)
This contains the regular EnergyXT files, a directory for storing plugins, a
configs directory so you can have a separate yabridgectl configuration for these
plugins, a script that modifies the environment so both yabridge and yabridgectl
end up using the files from these directories, and a script that runs EnergyXT
under this environment.

I haven't tested these scripts, but they should work fine! This is
`yabridge-env`:

Code: Select all

#!/usr/bin/env bash
#
# Every command run under this environment will use this dedicated 32-bit
# yabridge environment.
#
# Usage:
#
# yabridge-env yabridgectl status
# yabridge-env yabridgectl sync
# yabridge-env energyXT27/energyXT

set -euo pipefail

cd "$(dirname "$0")"

# We want to use the yabridge files from this directory, and because we're
# setting up the plugins with 32-bit plugin libraries we'll also want to use a
# separate config for yabridgectl
export PATH="$(realpath yabridge):$PATH"
export XDG_CONFIG_HOME=$(realpath configs)

# TODO: You may also want to `yabridgectl add` the path to ./plugins
yabridgectl set --path="$(realpath yabridge)"

exec "$@"
And then this would be the top level `energyxt` script that launches EnergyXT
under this environment:

Code: Select all

#!/usr/bin/env bash

set -euo pipefail

cd "$(dirname "$0")"
exec ./yabridge-env energyXT27/energyXT "$@"
You can then add plugins to the `plugins` directory, use `./yabridge-env yabridgectl add plugins` to add that directory to this separate yabridgectl configuration, and then run `./yabridge-env yabridgectl sync` to set up the plugins. If these files are located in /opt or something then you may want to `chmod 777` the yabridge.toml file so the `yabridgectl set --path=...` doesn't error out.

There may be an even better solution here, but this was the best 'best of both worlds' kind of solution I could come up with!
User avatar
GMaq
Established Member
Posts: 2774
Joined: Fri Sep 25, 2009 1:42 pm
Has thanked: 520 times
Been thanked: 555 times

Re: [ANN] yabridge 3.3.1

Post by GMaq »

Hi again... :D

OK thanks for all the helpful info! Will implement it and do some testing this week!

If I were to make a 32bit only yabridge version for 32bit AVL (and to have yabridge in both architectures of AVL) is that previous Docker build script up to date to build a 32bit yabridge that would work normally and run hosts (including EnergyXT)..?
robbert-vdh
Established Member
Posts: 219
Joined: Mon Mar 01, 2021 10:56 pm
Has thanked: 51 times
Been thanked: 92 times
Contact:

Re: [ANN] yabridge 3.3.1

Post by robbert-vdh »

GMaq wrote: Sun Jun 27, 2021 3:25 pm Hi again... :D

OK thanks for all the helpful info! Will implement it and do some testing this week!

If I were to make a 32bit only yabridge version for 32bit AVL (and to have yabridge in both architectures of AVL) is that previous Docker build script up to date to build a 32bit yabridge that would work normally and run hosts (including EnergyXT)..?
Yeah I made sure that that build script now works as expected (I had to fix one or two typos). You will of have need to change the --volume part to point to some place on your own computer where you checked out the yabridge repo, and this will also only build on a 64-bit machine without modifications to the build definition (because it tries to build both the 64-bit and the 32-bit Wine plugin host applications). And lastly you'd also need to a 32-bit version of since the 64-bit version of yabridgectl I included of course won't run on a 32-bit distro. You can of course cross-compile that from the 64-bit version of the same distro (so with the same glibc version) if you install a 32-bit toolchain with `rustup toolchain install nightly-i686-unknown-linux-gnu`, and then build yabridgectl with `cargo +nightly-i686 build --release`.
User avatar
GMaq
Established Member
Posts: 2774
Joined: Fri Sep 25, 2009 1:42 pm
Has thanked: 520 times
Been thanked: 555 times

Re: [ANN] yabridge 3.3.1

Post by GMaq »

@robbert-vdh
OK, I have this mostly figured out... one little thing I must have misunderstood..

For reference everything is in /opt/energyXT27/ with 777 permissions..

/opt/energyXT27/config/yabridgectl/config.toml says:
method = 'copy'
plugin_dirs = ['/opt/energyXT27/winvst32']
no_verify = false
blacklist = []

[last_known_config]
wine_version = 'wine-6.2 (Staging)'
yabridge_host_hash = -2486128527987012555
Here is my 'yabridge-env':

Code: Select all

#!/usr/bin/env bash
#
# Every command run under this environment will use this dedicated 32-bit
# yabridge environment.
#
# Usage:
#
# yabridge-env yabridgectl status
# yabridge-env yabridgectl sync
# yabridge-env energyXT27/energyXT

set -euo pipefail

cd "$(dirname "$0")"

# We want to use the yabridge files from this directory, and because we're
# setting up the plugins with 32-bit plugin libraries we'll also want to use a
# separate config for yabridgectl
export PATH="$/opt/energyXT27/yabridge:$PATH"
export XDG_CONFIG_HOME=$/opt/energyXT27/config

# TODO: You may also want to `yabridgectl add` the path to ./plugins
yabridgectl set --path="$/opt/energyXT27/yabridge"

exec "$@"
But running the script in /opt/energyXT27 gives me an error:

Code: Select all

isotester@avlmx:/opt/energyXT27
$ ./yabridge-env
./yabridge-env: line 23: yabridgectl: command not found
isotester@avlmx:/opt/energyXT27
What have I messed up? What is it I'm supposed to be setting with "yabridgectl set"?
robbert-vdh
Established Member
Posts: 219
Joined: Mon Mar 01, 2021 10:56 pm
Has thanked: 51 times
Been thanked: 92 times
Contact:

Re: [ANN] yabridge 3.3.1

Post by robbert-vdh »

GMaq wrote: Mon Jun 28, 2021 6:15 pm @robbert-vdh
OK, I have this mostly figured out... one little thing I must have misunderstood..

For reference everything is in /opt/energyXT27/ with 777 permissions..

/opt/energyXT27/config/yabridgectl/config.toml says:
method = 'copy'
plugin_dirs = ['/opt/energyXT27/winvst32']
no_verify = false
blacklist = []

[last_known_config]
wine_version = 'wine-6.2 (Staging)'
yabridge_host_hash = -2486128527987012555
Here is my 'yabridge-env':

Code: Select all

#!/usr/bin/env bash
#
# Every command run under this environment will use this dedicated 32-bit
# yabridge environment.
#
# Usage:
#
# yabridge-env yabridgectl status
# yabridge-env yabridgectl sync
# yabridge-env energyXT27/energyXT

set -euo pipefail

cd "$(dirname "$0")"

# We want to use the yabridge files from this directory, and because we're
# setting up the plugins with 32-bit plugin libraries we'll also want to use a
# separate config for yabridgectl
export PATH="$/opt/energyXT27/yabridge:$PATH"
export XDG_CONFIG_HOME=$/opt/energyXT27/config

# TODO: You may also want to `yabridgectl add` the path to ./plugins
yabridgectl set --path="$/opt/energyXT27/yabridge"

exec "$@"
But running the script in /opt/energyXT27 gives me an error:

Code: Select all

isotester@avlmx:/opt/energyXT27
$ ./yabridge-env
./yabridge-env: line 23: yabridgectl: command not found
isotester@avlmx:/opt/energyXT27
What have I messed up? What is it I'm supposed to be setting with "yabridgectl set"?
The PATH in yabridge-env is incorrect. The orignal script would add the `yabridge` directory relative to the script file to the PATH and tell yabridgectl to use the libraries from that directory. That way you can run commands (so both your DAW and yabridgectl) under this `yabridge-env` script and they'd use this dedicated yabridge installation. Your script instead uses `$/opt/energyXT27/yabridge`, which would be a nonexistent directory. I would just use the original script as is since that one's portable (i.e. you can move the entire directory to somewhere else on your system and it will remain functional).
User avatar
GMaq
Established Member
Posts: 2774
Joined: Fri Sep 25, 2009 1:42 pm
Has thanked: 520 times
Been thanked: 555 times

Re: [ANN] yabridge 3.3.1

Post by GMaq »

Hmmm

My knowledge of Bash syntax is extremely limited.. :oops: where it says (realpath) am I not supposed to substitute the actual paths?

I thought the script was a template... you're making it too easy for me!
Last edited by GMaq on Mon Jun 28, 2021 6:47 pm, edited 1 time in total.
robbert-vdh
Established Member
Posts: 219
Joined: Mon Mar 01, 2021 10:56 pm
Has thanked: 51 times
Been thanked: 92 times
Contact:

Re: [ANN] yabridge 3.3.1

Post by robbert-vdh »

GMaq wrote: Mon Jun 28, 2021 6:42 pm Hmmm

My knowledge of Bash syntax is extremely limited.. :oops: where it says (realpath) am I not supposed to substitute the actual paths?
No, bash will replace `$(realpath foo)` with the absolute path to `foo`!
User avatar
GMaq
Established Member
Posts: 2774
Joined: Fri Sep 25, 2009 1:42 pm
Has thanked: 520 times
Been thanked: 555 times

Re: [ANN] yabridge 3.3.1

Post by GMaq »

Haha! All working! Just need to roll it up in a Deb and install on a different PC and see what happens...

The possibilities with this are pretty funny! :lol:

As an example there are no Linux 32bit Airwindows plugins (unless you compile them for yourself) but with this yabridge setup I can run 32bit Windows Airwindows all day long. The doorway for supported LinuxVST plugins in EnergyXT remains quite narrow but yabridge gives the Linux native EnergyXT a whole new realm of possibilities for 32 and 64bit Windows VST's!

Having come this far I have to ask... Is there any kind of bridging script that could be run with EnergyXT to translate Plugins using `VSTPluginMain`to`main` or would that involve creating something as complex as yabridge itself all over again. Unfortunately obtaining the EnergyXT source code isn't possible... but man if it was Open Sourced it could sure be a contender again pretty quickly!
Post Reply