maximalexanian/guitarix-vst

Linux port

Closed this issue · 11 comments

Hi @maximalexanian

I'm the maintainer and founder of the guitarix project. I just get a notice about your port. I must admit, I like it!
I get a lot of requests to do exactly that, but as well for linux. As far I know, juce is cross platform, so maybe you could add a build environment for linux as well, that will be very welcome.
regards
hermann

Hi Hermann, nice to meet you! I adore work you and other maintainers have done with guitarix!
What do you mean by “exactly that”? Do you mean vst implementation of guitarix (are there vst hosts on linux?) or other plug-in implementation supported by juce? Yes, juce is cross platform and supports variety of apis.
I’m actually have zero experience developing for linux and I have chopped off linux native gui for this port, but will do my best.
regards,
max

Hi Max
I mean adding the build scripts to allow building a linux version of your port with the juce UI. I've no experience with juce, so I didn't know if that would be possible. If so, I could try to build it for linux and do some error checking if needed.
Yes, most linux DAW's support VST.

Hi @maximalexanian
Maybe you could add the producer file so that I could open it in producer?

So far I've some success. But I fail at least above this one in GuitarixProcessor.cpp

extern gx_jack::GxJack* gx_start(int argc, char *argv[], gx_engine::GxMachine*& machine);
extern void gx_inited();
extern void gx_stop(gx_engine::GxMachine* machine);
extern void gx_load_preset(gx_engine::GxMachine* machine, const char* bank, const char* name);

were been those defined?
I end up with

undefined reference to `gx_start(int, char**, gx_engine::GxMachine*&)'
undefined reference to `gx_stop(gx_engine::GxMachine*)'
undefined reference to `gx_inited()'

Okay, I got it to build and run on Linux (add gx_main.cpp). Not bad, not bad.

Sorry, had no time to look into it last week. Projucer file is of little help - it just configures JUCE modules to be built - and I've deleted it a while ago.
Wow, I'm surprised you've build it so fast. I was under impression there are lot Mac/Windows defines I've added and they should be reviewed to run proper Linux code.
What toolchain you've used to build it?

I used Producer to setup the project and a linux makefile, then I review the changes you've made to the guitarix source.
You'll find attached a diff for what I need to change to make it work on linux. It's just a quick and dirty edit, but it shows that there is not much different for the needs of MAC/windows and linux. I guess I could include the needed defines into the guitarix main suite so that future releases of guitarix will be suitable to build a vst3 plugin for all platforms.
mactolin.diff.zip

Hi @maximalexanian

I've seen now that you are employed by musiklab.
I wonder if it would be possible that you contribute the presets (or some of them) you've made for guitarix-vst used by musiklab to the guitarix project. As far I could see in the vids I visited they are really good.
I would love to convert them to the original preset format and include them in the main project.
regards
hermann

Hi @brummer10
Sure, we will happy to share some of the presets with the community.

That would be very nice!
In the mean time I've implemented the needed defines in the guitarix master branch (not pushed yet) to allow building a cross platform plugin from there when used as submodule in a other project.

Hi @maximalexanian
I've finished the linux version of the vst3 port.
https://github.com/brummer10/guitarix.vst
It use guitarix as a submodule, allow preset loading from the guitarix main application and could load additional LV2 plugs. I guess that you are not so interested in those features for your Mac/PC port.
However, I've implemented the start up sequence as it's own class and implement additional guards to secure multiple instances. Also there was a race condition in the start sequence for the vst plug which I guarded by check the SF_INITIALIZING flag before commit any rack change message from the module sequencer.

So when ever you'll base your port on a more recent version you'll find the latest guitarix development branch prepared, so far, maybe I've forgotten the one or the other guard needed for Mac/Pc. If so, just prod me a note and I'll implement them.
Will close this issue as completed now
regards
hermann