Writing the Configuration File
This is the beginning of setBfree's official documentation. What we're going to do is explain and expand. We'll explain the functionality and design of our organ, and expand on topics for technologies used by and with setBfree.
Hopefully, it will be helpful not just for those using setBfree, but as an aid for setBfree's supporting libraries/technologies and cousin applications. We start with the basics of using our new GUI before going over the coolest feature of this plugin, the dynamic configuration. Here's the new LV2 plugin GUI:
And here it is in 3D:
Before describing how to use the new LV2 GUI plugin, one note of caution so you don't have the 'what the hell' that happened to me while using the GUI while typing. The 3D GUI is shown above in two states. The skewed picture is the result of using the keyboard keys that rotate the GUI. Hit the help button on the top right corner with a ? to bring up the page that describes the different keys that rotate the GUI and you won't be surprised when it happens to you accidentally when you hit a key while its window is active. Here's the help page:
Robin Gareus' OpenGL LV2 plugin GUI is a replacement for the first TK GUI that will be removed from future releases. We're preparing a minor release that will include the new GUI, but until then you can compile the current source and the new plugin GUI will build itself.
To compile it yourself, the GUI will be built as long as you have the ttf-bistream-vera font, glu, and ftgl libraries on your system. I had a little trouble with this, but Robin's testers didn't. After the minor release, one of our expanded docs will explain the library packages needed from different Linux distros.
We've gotten the GUI working with Qtractor, and Ardour without difficulty, and any LV2 hosting application should work. For this doc, we'll be using David Robillard's Jalv because it is a stand alone app just for using LV2 pluggins. Note that currently it only works with Jack2. Ardour works with both versions of Jack, but we'll expand in more detail on other apps and the features of LV2 including sessions in later documents. For this example, we'll use Qjackctl to connect MIDI input from an MAudio Oxygen 61 controller, and for our output, we'll just connect the Qjackctl to playback, but any Jack supporting app for MIDI input will work, and of course the audio can be connected to any Jack audio port.
You'll need to run the command line utility adjmidid -e(note that you need the -e flag) for Qjackctl to show the Oxygen MIDI controller. Here are two screen shots of the MIDI input and the audio output in Qjackctl:
To get the Jalv going, we use jalv.gtk. To begin the plugin use the command jalv.gtk with the URI of the setBfree plugin. If you don't know the URI of setBfree's plugin, type the command lv2ls for a list of LV2 URIs on your system. After doing this I typed, jalv.gtk ttp://gareus.org/oss/lv2/b_synth to start the plugin.
After connecting the MIDI you can use the GUI to adjust the sliders, percussion etc, and just use the controller for playing the keyboard. However, we can also adjust and load configuration(.cfg) files from setBfree to match the sliders and knobs on the controller.
I call this the coolest feature because Robin hit one out of the park getting this working in this early era of our development. Using a screen in the plugin, you can save and load configurations that both cover the MIDI mappings to the buttons, knobs and sliders and the configuration of the setBfree sound feeding the MIDI. These are in .cfg files. You can also load and save state program(.pgm) files that include the levels of the sliders, knobs and which buttons are activated.
This is dynamic because in our first release, you had to restart setBfree passing a new configuration file on the command line to change the default configuration. With the new plugin GUI, you can save and load configuration files from the window that comes up pressing the green button next to the help window button.
Here is this screen; the white text are the options that will appear when the mouse is over those areas:
For this doc, we'll just focus on the configuration options that map MIDI events to the buttons,sliders, and knobs on the GUI. It'll be expanded in another document to include everything that can be configured in setBfree. Without loading a .cfg file, the configuration is default.cfg.
When a configuration file is loaded, any options not in the loaded file take on the default values. When you save a cfg file, only the values different from the defaults are saved.
We are going to create a file that maps MIDI instructions from our Oxygen 61 controller for everything on the GUI. For all of the features available on knobs, sliders and buttons, we can do this from the GUI aftet it's connected to the controller.
Pressing CTRL + middle-click on anything movable on the GUI will bring up a green 'move slider' message. We then can move whatever knob,button or slider we want to control the GUI widget. When we have done this for every control, save the .config file. We can do this with the key stroke SHIFT + C.
The other method is to create a file that maps MIDI instructions from our Oxygen 61 controller for everything on the GUI by hand. This is more cumbersome, but may come in handy when we want to add configuration to the organ not controlled by GUI knobs,buttons and sliders. First we need to find all the MIDI numbers sent from our controller. To do this we'll use aseqdump.
We type aseqdump -l on the command line to get the port number of our controller. After seeing it's 20, we type aseqdump -p 20 and in the terminal window we'll see the controller's MIDI info as we adjust knobs/buttons and sliders. Here is a picture of our MAudio controller with all the MIDI numbers it's sending out that we'll be using:
Next we create our .cfg file the GUI will load. As an example of a mapping, Here are all of the MIDI numbers from the controller that are mapped in the configuration file that we saved to a .cfg file and loaded from the plugin. The # signs explain what each does on the GUI:
# setBfree config file
# modificaions on top of default config
#Middle is Leslie off, Right is on
#Slow and Fast Leslie
#Note-MIDI 1 wheel at left of controller is correct by default for volume
All right we're up and running! We can use the GUI, MIDI controller or a combination of the two to adjust the standard features on a real B3 organ.
This controller does not have motorized controls, so adjusting anything on the GUI will not move the sliders or knobs on our controller. The plugin has two way functionality that has been tested and works with the Behringer BCF2000 with Jalv. However, not all hosts of LV2 plugins support two way communication. We will outline these in our docs on hosting applications that will round out our explanation for using the dynamic setBfree tonewheel DSP organ.