[LAD] Summercode 2008: LASH, pt. 3

Juuso Alasuutari juuso.alasuutari at gmail.com
Wed Feb 6 13:28:42 UTC 2008


Fons Adriaensen wrote:
> On Mon, Feb 04, 2008 at 06:18:36PM +0200, Juuso Alasuutari wrote:
> 
>> That being said, I still do favor D-Bus over OSC.
> 
> It's local only, no network support.

Sure, and while we're talking about the LASH<->client protocol I still 
don't see this being a problem. Any session that includes clients which 
reside on multiple hosts will still require a local lashd running on 
each host (even Bob agrees with this, which I didn't realize until 
before we talked about it on #lad). The protocol that lashd uses to 
communicate with its clients should IMHO be local.

In practice, the clients would still simply link against liblash and use 
its API regardless of what liblash does internally. The internal 
protocol could be anything, as long as it's not a Swiss army knife that 
tries to do everything imaginable by itself.

When looking at how a multi-host session would work in practice, it's 
obvious that what happens between the LASH daemons is key. This 
communication has, in my opinion, more in common with the current server 
interface than the client interface.

Consider this (monospace font required):


      host                    host                    host
       B                       A                       C
       |                       |                       |
       |                   LASH control app            |
       |                       |                       |
   --------------          ---------------         --------------
   |server iface|<=========|server iface |========>|server iface|
   --------------          ---------------         --------------
   |*LASH slave*|          |*LASH master*|         |*LASH slave*|
   --------------          ---------------         --------------
   |client iface|          |client iface |         |client iface|
   --------------          ---------------         --------------
       |                       |                       |
    client 3                client 1                client 5
    client 4                client 2                client 6


Here the "master" host's LASH is controlled by a user interface 
application, and the "slave" hosts' LASHes are controlled by the master 
LASH, and both use the same protocol. The control interface is built so 
that it can tune in to both local and remote control messages. It may 
well be based on OSC. The client interface protocol has no network 
connectivity requirement.

The type of commands that a LASH server might receive from an UI -- load 
project, save project, etc. -- are identical to those that it might 
receive if it were a slave listening to a network socket. (I wonder, for 
the second time today already, if this isn't what Bob had imagined as 
well. There have been some misunderstandings at least on my part during 
the discussion.)

One more thing about the LASH client and server interfaces. Dave 
Robillard has expressed his opinion that the current situation where a 
liblash client can register as either client or controller is tricky. 
Patchage can't register as a LASH client and store some session-related 
settings because it also needs to register as a LASH controller. This 
calls for a fix, one solution being to completely separate/abstract away 
the LASH server interface from the current API.

>>> For anything like lash to be useful here it would need to support
>>> this layering.
>> Can you give specific examples of what you mean by this layering concept?
> 
> (This is really the same issue that is driving my
> position in the autoconnect discussion that's going
> on in another thread.)
> 
> Any setup in which some of the apps are not considered
> to be under control of the 'end user', but part of the
> 'infrastucture of the studio'. Examples are bi-amped
> systems with software crossovers, room correction, 
> surround decoders matched to and calibrated for a
> particular installation, etc. It's the same when you
> work in a physical studio: you can use any instruments
> you want, make any music you want, use all the effects
> equipment, but you're not allowed to modify the studio
> itself.
> 
> One way I'm investigating to more or less enforce this 
> in an installation I'm designing is to have a second
> JACK instance that is not driven by a sound card but
> by a client of the 'master JACK' of which it becomes
> a subgraph. Then hide the 'master JACK' and all its
> clients. To the user it looks as if he's working with
> a normal installation, and talking to the sound card,
> while his 'system:' ports are in fact just another app.
> All it takes is a JACK backend that presents itself as
> a client to another JACK instance. Or a shared lib that
> allows any app to become a JACK backend. Or a version
> of JACK that has not one but several processing graphs
> and configurable links between them.
> 
> That's one way to do it, another one is to use a 'flat'
> system (only one JACK) and rely on a session management
> system that supports hierarchical control.

Very interesting thoughts. I'm afraid, though, that my circuit's too 
loaded with LASH protocol stuff right now for me to figure out how to 
fit your ideas into the domain of session management. :)

Juuso



More information about the Linux-audio-dev mailing list