Changes

Jump to navigation Jump to search
Line 64: Line 64:     
That's how it works for the explicitly defined Engines, but for going forward LV2 offers a much for implicit path, which allows lists to be populated from information derived from the LV2 TTL files.
 
That's how it works for the explicitly defined Engines, but for going forward LV2 offers a much for implicit path, which allows lists to be populated from information derived from the LV2 TTL files.
 +
 +
<br clear=all>
    
== JALV starts to help ==
 
== JALV starts to help ==
    
So we come to the python component that handles the LV2 bundles.
 
So we come to the python component that handles the LV2 bundles.
 +
 +
The list of engines visible came from a call to get_jalv_plugins()
 +
 +
[[File:Zynthian jalv plugins.png|right|300px|zynthian_engine_jalv class]]
 +
 +
<br clear=all>
 +
 +
There is a bit of defensive programmiing to prevent damaged files structures from stopping anything happening but the call is then handed up to
 +
 +
[[File:Zynthian lv2-head.png|right|400px|Zynthian_lv2_world object]]
 +
 +
zynthian_lv2.get_plugins()in zynthian_lv2.py  to do the gory stuff. . .
 +
 +
This is where the lv2 namespace is maintained from and acts as the conduit from the zynthian to the lv2 namespaces.
 +
 +
<br clear=all>
 +
So what is this JALV business then? Why don't we just go straight to thr LV2 componenets that actually does the heavy lifting?
 +
 +
'''JALV is the software container that the LV2 component runs in that presents the LV2 objects defined in TTL files to the zynthian.'''
 +
 +
Well it's time to meet that most Linux based concept Jack.
 +
 +
<br clear=all>
 +
 +
== Jack ==
 +
 +
Jack is the Audio server that runs under the control of the Zynthian.
 +
 +
Jack takes the hardware devices presented by ALSA and allows connections to be established in a highly consistent and connected way. It's jack that takes the data from an input audio port be that a Zynthian input on an Card or a USB connected Mixer, and passes it throu' an Audio Device defined by the Zynthian ( the next section after Synths :-) ) and presents it to the output connectors and also sending it to other places like the Audio Meters on the Zynthian GUI. It also does all this magic for MIDI as well, because MIDI & Audio in the Zynthian World are rather important concepts!.
 +
Jack deals with all this stuff and the zynthian is defining the relationships in the Jack Audio world. So as Engines ain't our concern as far as how they do what they do, the actual audio environment we are running isn't processed by us. But Jack has been around for a while and seems to work pretty well and is also rugged :-D.
 +
 +
The World of MIDI is slower than audio but a little more involved, as we can do some manipulation in this space to really aid the performer. Transpose a keyboard by an octave? Play a chord when one note is pressed ( Bontempi Mode :-) ). By using an LV2 component to do this sort of manipulation and get all the definitions from the declared namespaces means we can make solid assumptions about precisely what effects on the sound environment we are controlling.
 +
 +
But there needs to be an important component in the zynthian world to handle the MIDI as it moves in and out of the zynthian, and this is the zynrouter. This engine is a C component and does magic :-D. This allows the zynth to manage several seperate MIDI environments that might well involve all kinds of complicated shenanigans. Oh there's a sequencer down there as well . . .
 +
 +
 +
And all from the zynthians setting up a few electronic conversations.
 +
 +
Jack does this on our behalf and is probably the single most important component around which the zynth is built. Certainly from following this evolutionary path it's possible to see the advantages of an open source environment at their most visible ! :-D
 +
 +
<br clear=all>
 +
 +
== Where it gets stored ==
 +
So once an engine has been started up what else does it need to know?, given it's MIDI components, parameters and Audio in's and outs have been nicely presented to the user.
 +
How do we store all this state we are generating?
 +
 +
In the Pre LV2 age it was all explicitly defined in the code, but we can now do better. We want to be able to add,enable and disable these lv2 components that we could get hold of from 'sources' or indeed write ourselves and offer to others...
 +
 +
What maintains the LV2 zynthian universe?
 +
 +
Well there are three basic places lv2 bundles live.
 +
 +
* /zynthian/zynthian-plugins/lv2
 +
* /zynthian/zynthian-data/presets/lv2
 +
* /zynthian/zynthian-my-data/presets/lv2
 +
 +
 +
<br clear=all>
 +
 +
== LV2 Webconf configuration ==
584

edits

Navigation menu