The K Desktop Environment

Next Previous Table of Contents

5. GUI Elements

5.1 The goal

GUI elements should be used to allow synthesis structures to interact with the user. In the simplest case, the user should be able to modify some parameters of a structure directly (such as a gain factor which is used before the final play module).

In more complex settings, one could imagine the user modifying parameters of groups of structures and/or not yet running structures, such as modifying the ADSR envelope of the currently active midi instrument. Another thing would be setting the filename of some sample based instrument.

On the other hand, the user could like to monitor what the synthesizer is doing. There could be oscilloscopes, spectrum analyzers, volume meters and "experiments" that figure out the frequency transfer curve of some given filter module.

Finally, the GUI elements should be able to control the whole structure of what is running inside Arts and how. The user should be able to assign instruments to midi channels, start new effect processors, configure his main mixer pult (which is built of aRts structures itself) to have one channel more and use another strategy for its equalizers.

You see - the GUI elements should bring all possibilities of the virtual studio aRts should simulate to the user. Of course, they should also gracefully interact with midi inputs (such as sliders should move if they get midi inputs which also change just that parameter), and probably even generate events themselves, to allow the user interaction to be recorded via sequencer.

5.2 Introduction to what is there

Still experimental. Most things are described in the module reference and should be more or less self explainatory (look at the examples). So only some more complex things are explained below.

You can create panels, subpanels, sliders, knobs, windows and the famous instrument mapper, that does everything by itself. Well, you can produce nice GUIs with that, subpanels and parent-specification allow you to combine the GUIs of structures very flexible.

As you see, this is somewhat experimental, to encourage you to experiment, and - more important - get your feedback! ;) So don't hesitate to throw your ideas/code into the development process... please also read "the gui challenge" published on the homepage.

5.3 Parents

Arts has a somewhat working fashion of putting widgets into widgets. Every widget that can contain other widgets will have an output port called id. So for instance, since one would expect to be able to put some controls inside a window, it will have an outgoing id port.

On the other hand, every widget that can (need to) be put into some other widget has an incoming port called parent. This will for instance allow you to put a Gui_SUB_PANEL inside a window.

5.4 The GUI_Mixer magic

One of the important components for making music are mixers. Of course, with aRts you can build mixers by simply using houndrets of modules, which take a few Synth_BUS_DOWNLINKs, mix them together (possibly providing a control panel), and send them to an uplink or to the soundcard.

Anyway, this would mean that extending your structure from a ten channel mixer to a sixteen channel mixer would be a lot of work (since you had to build six more channels by hand).

To solve that problem, Gui_MIXER has been created. You give him a window, and a structure that describes how one channel of your mixer should look. You tell him how the busses should be called where it takes the data from, and you tell him where he should put it (another bus).

Then, the important part: you tell him how many channels you want. And when started, your Gui_MIXER will simply create one of your channel structures for each channel you wanted. So you can go up from a ten channel mixer to a sixteen channel mixer by changing one parameter.

Of course you need to know what parameters a channel gets: it's simply a parent widget (so you can put your panel somewhere), and the name of the bus you get the data from, and the name of the bus you put the data to. The parameters need to be called parent, input and output. The Gui_MIXER will simply number the channels from 01 to the maximum channel you specified.

See module reference for some more details.

Next Previous Table of Contents