stefan at space.twc.de
Thu Jan 16 23:34:16 CET 2020
Am 12.01.20 um 18:59 schrieb Benoît Rouits:
> I will update QLiquidSFZ then, to reflect the additions you made.
> Many thanks for this cool library.
Right. The most interesting (difficult) addition from the UI point of
view is probably
>> - provide list of CCs supported by .sfz file (Synth::list_ccs)
The thing is that CCs can be used to control aspects of the sound, such
as panning or the number of layers used for the sound (i.e. some layers
will be turned on/off by the cc). From an UI point of view it would be
ideal if each CC was displayed as one slider (or knob), so you would
call list_ccs and create a number of sliders/knobs, one for each CC. The
default value provided by liquidsfz would be the initial position of the
slider/knob. If the user turns the slider/knob, then qliquidsfz would
generate CC events for it.
Its a bit tricky because obviously Synth::add_event_cc() cannot be
executed at the same time Synth::process() is running in the JACK
thread. One way to do this is using some kind of queue for the CC
events, so that the JACK process callback can execute them together with
the other midi events before process().
Also in a perfect world if CC events were be received by MIDI, the UI
would update its state. So using an external midi controller would move
the Qt slider/knob widget. Again, this needs to be implemented carefully
in order to be thread safe.
The CC widgets really cannot be done properly by the text UI, this is
why I only display a list there. If you are looking for a program for
inspiration how a UI could look, I'd recommend sforzando for windows.
This can at least give you an idea of the direction to go. I personally
obtained an old version (win_sforzando_v1.822.exe) which runs in wine.
You'll see in the controls tab what I mean if you load a sfz with CCs.
Stefan Westerfeld, http://space.twc.de/~stefan
More information about the Linux-audio-dev