Catching Up With JOST
Three months ago I introduced my readers to a new system for hosting VST plugins compiled natively for Linux. That system has continued its development and has become a mainstay in the Studio Dave Linux audio arsenal. Here's an update on the system's recent incarnations, complete with the usual multimedia extravaganza of text, screenshots, and sounds.
Old JOST, New JOST
Lucio Asnaghi's JOST continues its progress towards a first-rate sound creation suite. Recently I've been employing the 0.2.3 stable version in my MIDI production system under the JAD Linux distribution (openSUSE 10.2), and I've been very pleased with its performance.
Cannibal's Trance (OGG 7MB) is a simple trance piece, an original I wrote as a texture study over a bass part reminiscent of the riff from Land Of A Thousand Dances in the version recorded by a group named Cannibal & The Headhunters. My piece is simple enough indeed, but its setup was not: I needed four instances of JOST, three channels in QSynth, some additional processing in JACK-Rack, and MIDI channel routing via midirgui. Figure 1 shows off this happy band at work.
The multiple JOSTs were necessary for the effects I wanted to achieve. One pair ran the mdaJX10 synthesizer modified by Lucio's superb Eqinox paragraphic equalizer, the other pair ran only an unprocessed mdaDX10 instrument. From each pair I needed a totally dry output for some tracks and a modulated output for the rest. The complex audio and MIDI routing was handled by Rui Nuno Capela's QJackCtl and Holborn's midirgui.
Since none of this software is compatible with the LASH session handler I faced the annoying trouble of having to set up everything each time I wanted to work on the piece. Fortunately I know how to write a simple shell script, so I wrote this tiny amenity :
xdosemu -input \r big.bat & qjackctl & midirgui mdaplusqsynth.midir & sleep 10 ;;; necessary on my faster machine qsynth & jack-rack wetplate.rack & /home/dlphilp/jost2 & ;;; note that each instance appears /home/dlphilp/jost2 & ;;; with its own audio I/O ports /home/dlphilp/jost2 & ;;; in QJackCtl's audio connections panel /home/dlphilp/jost2 &
I saved the script as sequencer.scr, gave it executable status (chmod a+x sequencer.scr), and added it to my Fluxbox menu for easy access. Voilà, 1-click setup for nine application instances.
The DOSemu invocation (xdosemu) calls a similar script to launch my sequencer. The big.bat script is located on DOSemu's logical c: drive and includes these commands :
d: ;;; change to drive with Voyetra software cd voyetra ;;; change directory vapimpu ;;; start Voyetra's DOS MIDI driver sleep 3 ;;; wait while the driver initializes spg /nh /nm /dr:128 /RES:1 /casio ;;; start sequencer with options vapimpu /rem ;;; remove driver after closing sequencer c: ;;; return to c: drive bye ;;; quit DOSemu
By the way, this script is a batch file written for the DOS shell (i.e. not bash), hence the slightly different syntax.
These scripts are my invaluable helpmates, and in lieu of LASH compatibility they are wonderful time savers. JACK-Rack, midirgui, and the sequencer can be called with command-line options, and QJackCtl can be configured to for patchbay persistence, further automating the system setup and its connections.
JOST 0.2.3 is cool. It allows sequential chaining of plugins, includes session save/recall, and performs beautifully with JACK. But just as I was getting used to its design, Lucio decided to rework some of JOST's basic features. This new design has resulted in a concurrent beta version of JOST (0.3.0) that adds some great new features to this already neat software.
Figure 2 demonstrates JOST 0.3.0 on the job. You can clearly see the difference in its external design: a canvas has replaced the frames of 0.2.3, plugins are represented as connectable icons (red connector for MIDI, blue for audio), and fixed I/O ports have been added (with up to four separate audio ports). Sessions can be saved and reloaded, but session files created with JOST 0.2.x are not currently accepted by version 0.3.0.
JOST is in relatively early development, and it still shows some rough edges. For my work, the most annoying aspect is its lack of separately addressable MIDI ports. The audio ports appear in QJackCtl as four discrete ports, but only one MIDI port appears. Multiple MIDI ports would lend greater power and flexibility to the system. Lucio is aware of the problem and is already working on a solution.
In my opinion JOST has grown from its original design as a host for natively-compiled Linux VST plugins, and it is becoming a powerful modular environment for complex audio synthesis and processing. A sizeable number of plugins work now with JOST, and Lucio promises more to come. He has already ported a batch of LADSPA plugins as Linux VSTs, which somehow seems very weird, but they do add to the palette. He has also designed some very nice JOST-savvy plugins, including the Eqinox equalizer and a soon-to-be-released synthesizer called Capsaicin. I've worked with an early version of the synth, it includes a nicely designed GUI, and I'm looking forward to its public release.
Earlier versions of JOST included a non-functional Sequencer menu. That menu has been removed in the latest releases, but audio/MIDI sequencing capability would bring JOST closer to being a complete music production environment (especially if the sequencer could sync to the JACK transport controls).
As in any software at this early stage of development, there are downsides. Some plugins are incompletely ported, many have no presets, and most have no Preset Save functions (a serious and severe limitation). I must add here that Lucio himself has ported only some of the available plugins, so he can fix only his own work. Developers who have ported the other plugins will need to add the requested functions as they have the time and energy (though nothing stops anyone else interested in helping out).
As mentioned, performance with JACK is generally excellent. However, I do get xruns when operating plugins with full GUIs, such as the ZR3 organ seen in Figure 2. Parameter control during playback is fine if I use the plain-vanilla GUI (the Parameters tab), but the more colorful VST interfaces may be problematic on lower-powered machines.
Of course, more plugins would be nice too. Nevertheless, a respectable collection of usable (with caveats) plugins exists, thanks primarily to these developers :
- cern.linux.vst a small but unique and useful collection
- JUCEtice home to JOST, Eqinox, SoundCrab, DestroyFX VST ports, et cetera
- Linux-VST Jorgen Aase's links to the mda plugins, Freeverb, his own synths, and more
Please let me know if you know of other developers providing JOST-compatible native Linux VSTs, I'll be happy to expand this list.
I believe that JOST represents a viable solution to the problem of accommodating VST/VSTi plugins on Linux, at least for those developers who are willing to open their source code and reconsider licensing terms where necessary. The system is already a stable performer, and its developer is open to suggestions for improvement. With a few more rounds of fixes and features it could well become a champion. Meanwhile, it's getting a heavy workout here at Studio Dave. If you'd like to help, download JOST (binary or source), knock it around a bit, and let Lucio know how his program held up and what you think might improve it.
Who In The World Makes Music With Linux ?
The LAM site answers that question readily enough, but since LAM has no rating system I thought I'd link a selection at the end of each entry here. This week it's James Shuttleworth's Fling (OGG 7MB), one of my all-time favorites. Enjoy, and be sure to visit dis-dot-dat.net to see/hear what else James is up to.
Okay, so maybe it wasn't exactly an extravaganza, but I do hope you enjoyed the update and the tunes. I'll be back in about two weeks with more news from the world of Linux sound and music software development. Meanwhile, get your groove on, stay tuned, and keep swinging.
Similis sum folio de quo ludunt venti.
- Brent Laster's Professional Git (Wrox)
- Machine Learning Everywhere
- Own Your DNS Data
- Smoothwall Express
- Bash Shell Script: Building a Better March Madness Bracket
- Returning Values from Bash Functions
- Simple Server Hardening
- From vs. to + for Microsoft and Linux
- Understanding OpenStack's Success
- Tech Tip: Really Simple HTTP Server with Python