[LAD] JACK Synthesizer Manager Proposal

2008-01-26 Thread Thorsten Wilms
Hi!

Audun Halland and I have been thinking about a set of related problems.
The first result is the following proposal, meant to gather feedback
from the community.

I'm posting about this to both LAD and LAU, but separately. Hopefully we
can keep it technical here and have the user POV on LAU :)

Please feel encouraged to come up with additional use cases and
implementation ideas.

You can read the following with a little bit of markup on
http://thorwil.wordpress.com/2008/01/26/jack-synthesizer-manager-proposal/
or the same text right here:


JSM, the JACK Synthesizer Manager

We propose a programm that acts as a proxy between sequencing software
and both software and hardware sythesizers. Among the goals are unified
patch selection and making projects more portable.
   If we get the impression that the JSM is something that both
developers and users will find handy and use, then development might
start real soon.
   In this text, we avoid going into technical details to foster free
thought and discussion.


Use Cases

1. Patch selection
Goal: Choose patches from all available hardware and software
synthesizers.
   Giorgio uses a single means to select a patch among all patches of
all of his software and hardware synthesizers. He uses meta-data to find
the right patch. The right connections are made automatically.

2. Computer as syntheszier
Goal: Use the computer as a compound synthesizer in a live performance.
   Hiromi has her keyboard connected to her laptop live on stage. She
uses several soft-synths via keyboard-split and layering. A few selected
parameters are bound to the wheels of the keyboard. After each song, she
switches from one setup to the next with least effort.

3. Collaboration
Goal: Exchange projects without having to change settings back and
forth.
   Alice and Bob take turns on working on a project. They use different
hardware but don't have to manually change connections and choose
patches on each turn because of an abstraction layer.


MIDI Interface Ports

The problem with MIDI interface ports is that the hardware on the other
side and its setup might change. Or be entirely different if people
exchange projects. An abstraction layer can make this more comfortable
to handle.
   The JSM takes care of the mapping between software ports and MIDI
interface ports. It can work on a per MIDI channel level.


Patches and Instrument Definitions

Patches and controllers are chosen by name; the user doesn't have to
deal with cryptic numbers. For kit-programms, name mappings are given
(e.g. bass drum on C1).
   Patch selection happens by a single means, offering all available
patches (JACK apps, plugins, hardware). Making the required MIDI and
audio connections is automated as far as possible.


Categorization

Categories help to find the right patch among many. When exchanging
projects, they help to replace unavailable patches with similar ones.


Virtual/Compound Synthesizers

From the outside, the computer can be dealt with like a single compound
synthesizer. Different synthesizers can be triggered from ranges on a
single keyboard (key splits). Synthesizers can be layered. The whole
setup can be switched with programm changes.


JACK to ALSA Bridge

JSM could be the de facto JACK MIDI to ALSA MIDI bridge. No Jack
SYSTEM midi ports, the jack world only sees the devices offered by
JSM.


--
Audun Halland and Thorsten Wilms


___
Linux-audio-dev mailing list
Linux-audio-dev@lists.linuxaudio.org
http://lists.linuxaudio.org/mailman/listinfo/linux-audio-dev


Re: [LAD] JACK Synthesizer Manager Proposal

2008-01-26 Thread Thorsten Wilms
On Sat, 2008-01-26 at 19:16 +0100, Dennis Schulmeister wrote:

 Just a litte question to better understand your idea. How would a
 sequencer request a certain patch on a certain channel on a certain
 port?

I think the patch selection would be more part of the JSM than the
sequencer, but the details must be figured out in collaboration with
sequencer authors. So it wouldn't be the sequencer requesting a patch,
but rather patch selection throughy the JSM, the JSM providing all
necessary info to the sequencer and changing connections.

 With plain MIDI the sequencer would just send the appropriate control
 change / program change values on the given channel and midi port.
 Without knowing which device would interpret the values in which way.
 
 How would that be different with an abstraction layer? How could an
 abstraction layer assure that a given PC/CC value pair would always
 refer to a certain kind of patch? Regardless of the system and
 synthesizer setup employed.

 Obviously there would be some kind of translation. But who would define
 the translation rules? Who would define what kind of patches JSM can
 handle and which not. The JSM developers might come up with a snappy
 synth bass. All a user would have to do was to tell JSM how to select a
 snappy synth bass patch on a given synthesizer.

 But they might not come up with a blurry sound from space which sounds
 like a cat screaming when its tail gets clamped by the door. The user
 wouldn't be able to reliably select such a patch. Simply because it
 wouldn't be offered to him. On the other hand he could extend the
 translation rules to offer such a patch. But than again it wouldn't work
 on a foreign setup.

The minimum the abstraction layer would do, is automatic switching
between profiles. One per environment. This way you would not have to
adapt everything on each iteration of working on a project in turns.

Patch selections could be stacked. One selection for each environment.

The next thing could be virtual ports to represent roles in the project.
Roles like drum-module or lead-synth.

Then replacing unavailable patches with patches that are similar as far
as that can be discerned from meta-data.


-- 
Thorsten Wilms

thorwil's design for free software:
http://thorwil.wordpress.com/

___
Linux-audio-dev mailing list
Linux-audio-dev@lists.linuxaudio.org
http://lists.linuxaudio.org/mailman/listinfo/linux-audio-dev


Re: [LAD] JACK Synthesizer Manager Proposal

2008-01-26 Thread Dennis Schulmeister
 The minimum the abstraction layer would do, is automatic switching
 between profiles. One per environment. This way you would not have to
 adapt everything on each iteration of working on a project in turns.

So the idea is to decouple patch selection from the sequencers. A
sequencer would just send MIDI data to a MIDI port offered to it by JSM.
JSM in turn would provide the necessary means to select a patch from any
synthesizer available.

So if Alice and Bob would work on a common project both would have their
own profile defined for the project. They would need to do so both on
their own. But at least it would be assured that each JSM MIDI port
would have similar patches assigned.

 Then replacing unavailable patches with patches that are similar as far
 as that can be discerned from meta-data.

Of course for such a feature an arbitrary large library of meta-data of
all patches of all MIDI-capable synthesizers ever built and written
would be needed. :)



Yours sincerely,
Dennis Schulmeister

-- 
Dennis Schulmeister - Schifferstr. 1 - 76189 Karlsruhe - Germany
Tel: +49 721/5978883 - Mob: +49 152/01994400 - eMail: [EMAIL PROTECTED]

Now moved to the corridor: Hermes! (http://ncc-1701a.homelinux.net)
(mostly German)

http://www.windows3.de - http://www.denchris.de
http://www.audiominds.com - http://www.motagator.net/bands/65


___
Linux-audio-dev mailing list
Linux-audio-dev@lists.linuxaudio.org
http://lists.linuxaudio.org/mailman/listinfo/linux-audio-dev


Re: [LAD] Summercode 2008: LASH as a D-Bus service

2008-01-26 Thread Juuso Alasuutari
On Friday 25 January 2008 18:27:10 Bob Ham wrote:
 On Fri, 2008-01-25 at 14:04 +0200, Juuso Alasuutari wrote:
  On Wednesday 23 January 2008 23:21:21 Bob Ham wrote:
   There's no reason to add a system-specific API layer to LASH itself.
   The abstraction could be done by a separate library entirely, eg
   libeasyjack.
 
  By system-specific API layer do you mean D-Bus?

 No, I mean JACK or ALSA or raw1394 or whatever.  I'm talking about
 something like

   lash_easy_jack_client_t *
   lash_easy_jack_client(char *client_name,
 char *input_port_names[],
 char *output_port_names[],
 jack_callback_t *cb);

 In this case, there's no reason at all to have lash_ in there.

Why bother with a long-reaching workaround like that? I understood this 
hypothetical libeasyjack to be something that would enable a program to be 
a JACK (libjack) client without actually having to fulfill the requirement of 
running with RT priority. But for our needs (setting connections, getting 
connection info, etc.) it's simply backwards to stubbornly hold on to keeping 
LASH a JACK client. There's a conceptually saner solution around the corner.

The goal of jackdbus has never been to shield applications from JACK's bugs, 
and I regret that this conversation has revolved around that side effect for 
so long. Jackdbus allows more flexible controlling of JACK settings in a 
desktop environment, by desktop applications. Implementing this kind of 
interface makes sense for more than one reason.

It's not about adding a system-specific API layer to LASH, it's about making 
use of an API layer in LASH because it fits the purpose well.

  To me, it seems like overengineering to design the LASH - client
  protocol with networks in mind. The lashd daemon can use D-Bus to
  communicate with clients, but that doesn't mean that several LASH daemons
  running on different computers couldn't communicate session events and
  data between eachother. The idea would be that all LASH - client
  connections would be local, but one session could be composed of several
  local LASH environments.

 The problem here is you then have two communication protocols; one for
 local D-Bus communication, and one for inter-host lashd communication.
 They're going to be communicating much the same information; client
 properties, port names, etc.  To have two protocols would be unwieldy.

For domain separation this makes sense. Why add weight to the the LASH - 
client protocol with things such as encryption which most users will never 
need?

Don't get me wrong; inter-host communication is a great idea (for future 
implementation). But I think a local session protocol should be minimally 
burdened by the needs of a minority. Yet this is not the only reason I'm 
against a lashd - the entire world client protocol. Consider the 
following:

If your session is spread across multiple networked computers, how will you be 
able to auto-launch all the clients if there are no per-host daemons 
involved? In other words, your master lashd can launch all the clients on the 
master host, but if you also want to launch remote clients you will need some 
kind of launcher daemon running on the remote computers.

If there's a lashd running on each computer, the master lashd can tell the 
slave lashds to auto-launch their clients. It seems to me that adding this 
lashd-to-lashd layer between local domains is both friendlier for clients in 
terms of protocol complexity and also enables better control.

  But then again, why should LASH even be concerned with the connections
  between clients in the first place?

 That's pretty much it's raison d'etre :-)  See the following, and note
 the file name:

   http://teasel.6gnip.net/~rah/why-ladcca.png

OK, I see. :)

 There's three different ideas that could be surmised by patch system
 controller (at least that I can think of.)  There's something like
 QJackCtl, which lets users adjust the settings of the patch system like
 the sample rate, period size, etc (and we're talking about something
 which does it on-the-fly, which doesn't exist yet.)  Then there's LASH,
 which monitors port connections and manages their automatic reconnection
 when a session is restored.  Then there's a patch bay, which allows the
 user to adjust the connections while a session is active.

 There are no inter-dependencies.  They all provide distinct sets of
 functionality and hence should be separate programs.

 LASH is actually two separate sets of functionality in one system:
 automatic port reconnection, and non-X11 session management.  So, LASH
 *does* leave the other stuff to a patch system; it leaves it to the
 other functionality in itself :-)

 It could be the case that the two sets of functionality in LASH can be
 separated into different systems but off the top of my head I'm not sure
 how inter-dependant they are.  Specifically, I'm not sure whether
 session management is completely 

[LAD] Summercode 2008: LASH, pt. 2

2008-01-26 Thread Juuso Alasuutari
Here's a list of all LASH suggestions expressed so far, as well as some new 
ones. It's quite a bunch, and it goes without saying that this is NOT A PLAN; 
no sane person would actually try to cram all of these into an application. 
If my application gets chosen for Summercode I'll only be concentrating on a 
few key things (to be announced later, maybe after another brainstorm).

So, please take this as a memo, and please do comment. The internet doesn't 
contain enough ASCII yet.


Suggested changes to internal structure:

* Interact with JACK using the JACK D-Bus interface. Lashd no longer required 
to be a libjack client.
  - Jackdbus needs a port settings interface.
* Interact with LASH clients using D-Bus (change liblash's transport to use 
D-Bus).
  - What if the client has its own D-Bus event loop and wants to manually 
handle the LASH protocol? We need an option to also allow this.
* Replace liblash's server interface with a LASH D-Bus interface. LASH control 
applications no longer required to be liblash clients.
  - Requires API change.
* Certificates and encryption for communication protocol.
  - What the communication protocol refers to is another question...
* OSC (?)
* Server rewrite in C++.
* Client lib rewrite in GObject.

API change suggestions:

* Break it? How? When?
  - Probably unavoidable eventually.
* Remove the server interface from liblash. Controlling LASH will happen 
through a D-Bus interface.
  - Dave Robillard has expressed that the current interface separation makes 
it difficult to write a LASH control application which is at the same time a 
LASH client (Patchage).
* Mandate that LASH clients shall not modify any external port connections.
  - Actually enforce this using JACK ACL? (A partial solution, doesn't help 
with ALSA and others.)
* Make the save directory static to clients unless a change notification is 
sent.
* More generic patch system API.
* Use callbacks instead of current event framework.
* Add test disk operation function; the server can ask the client to test if 
it can actually read from and write to the specified directory.

Feature addition suggestions:

* Lashd should capture clients' stdout and stderr and keep log(s) in the 
project dir.
  - One common log file or per-client ones?
* Preserve/restore JACK settings other than port connections.
  - Make this optional; the user must be able to tell LASH to not touch any 
JACK settings.
  - Should this be the responsibility of a JACK controller app?
* Export/import session; create or unpack a tarball of the session directory.
* Light save functionality; clients can reference files outside the session 
directory.
* Managing of non-LASH apps.
* Preserve clients' X11 properties, such as window position, screen, 
workspace, etc.
* Ability to merge sessions.
* Support for multi-host sessions.
  - Should the LASH-client protocol support this directly (socket-based 
connections), or
  - should LASH daemons on different machines be able to connect with one 
another (master session  slave sessions)?
* Save the client data in $client_dir under a sub-dir to prevent the client 
from overwriting config files.
* Support for dictating client loading order, and which other clients need to 
be loaded before a client can load.
  - Alternative solution/scheme: client priorities.
* Track naming
* Guaranteed save directory availability
* Graded saves. (Different kinds of saves? How many different kinds?)
* Networked audio (audio/MIDI ports over network).
* User interface standard recommendation (documentation).
* Automatic client installation/in-built package manager.

Juuso
___
Linux-audio-dev mailing list
Linux-audio-dev@lists.linuxaudio.org
http://lists.linuxaudio.org/mailman/listinfo/linux-audio-dev


[LAD] [OT] LinuxSampler and GPL - some clarifications

2008-01-26 Thread Mlf Conv
Hi,

I'd like to clarify a few questions regarding GPL and LinuxSampler.

The GPL implicitly prohibits third parties from selling a computer program
licensed under the terms of GPL, by only allowing the following, quoting
GPL:
...if you distribute copies of such a program, whether gratis or for a
fee...
... You may charge a fee for the physical act of transferring a copy...
You must cause any work that you distribute or publish, that in whole or in
part contains or is derived from the Program or any part thereof, to be
licensed as a whole at no charge to all third parties under the terms of
this License.

Basically:
1. selling a computer program licensed under the terms of GPL and
2. charging a fee for distribution of a computer program licensed under the
terms of GPL / charging for a physical act of transferring a copy
are 2 entirely different things.

When you sell a computer program you are charging for the costs(human
resources - developers, designers; technical resources - computers etc) you
have put into *developing a computer program* plus you are charging an
adittional fee based on your estimation of value that your product would
have on the market(offer/demand stuff)
When you distribute a computer program or charge a fee for physical act of
transferring a copy you are charging for the costs you have put into
*distribution of a computer program* plus you are charging an additional fee
based on your estimation of value that your *distribution service* would
have on the market.

This means that:
1. usage of a computer program licensed under the terms of GPL in a hardware
product, whether modified or not, is not a distribution of a computer
program licensed under the terms of GPL, and is thus prohibited by GPL.
2. usage of a computer program licensed under the terms of GPL, whether
modified or not, in a software product, the intention of which is not to
distribute a computer program licensed under the terms of GPL, is not a
distribution of a computer program licensed under the terms of GPL, and is
thus prohibited by GPL.

No.1 of course has an exception, you would have to sell a computer that has
a computer program licensed under the terms of GPL installed on it as a part
of distribution, for the purpose of selling the computer(for example with
preinstalled Linux distribution)
No.2 has several scenarios:
a) a distribution is an obvious case where a given computer program licensed
under the terms of GPL is a part of a bigger software product, the sole
purpose of which is to distribute, thus a distribution is fully GPL
compliant whether made available for transfer at no charge, or selled as a
package in stores.
b) a scenario where computer program must not be modified in order to become
part of another comuter program ...thus forming a work based on the
Program... This means that if a computer program as a whole, whether
modified or not, becomes part of another computer program at *source-code*
level, then the terms of GPL apply to such derived work.


You can derive a work from another at source code level(by modifying the
original, by adding code to it while not modifying the original, or both)
but you can also derive a work at binary level. And if fact, the GPL doesn't
differentiate between source-code and binary level derived works:
...any work that you distribute or publish, that in whole or in part
contains or is derived from the Program or any part thereof...

So suppose a software developer goes on developing a cool GUI for a computer
program licensed under the terms of GPL which he intends to sell.
The GUI talks to the GPLed computer program via some kind of IPC.
He can claim that he's charging for his own program and distributing the
GPLed computer program along with it, since the two are in fact 2 separate
applications that communicate through IPC.
This might be true, but consider the following - the GPLed computer program
is capable of functioning as a standalone application, whereas the GUI
application is practically useless without the GPLed computer program, ans
is thus a derived work at *binary-level*.
The GPL states, that ...in whole or in part contains or is derived from the
Program..., which means, whether at source code level or binary level.

This has the following consequences:
A proprietary computer program that is not capable of functioning as a
standalone computer program, and is communicating with a computer program
licensed under the terms of GPL, in order to ensure its purpose and proper
functioning, is a derived work under the terms of GPL, thus the terms of GPL
apply to such work, and a software developer of such proprietary computer
program is *also* violating the terms of GPL by not distributing the
computer program licensed under the terms of GPL for the sole purpose of
distributing it.

So to summarize that with respect to LinuxSampler, the exception
LinuxSampler is licensed under the GNU GPL with the exception that USAGE of
the source code, libraries and applications 

Re: [LAD] [OT] LinuxSampler and GPL - some clarifications

2008-01-26 Thread porl sheean
On 27/01/2008, Mlf Conv [EMAIL PROTECTED] wrote:


 So LinuxSampler is basically a pure GPLed computer program.

 Marek


 i'm not trying to add fuel to the fire or anything, but if this is the
case, and the gpl protects against the sort of thing they are worried about
anyway, why go through all the hassle of adding the clause that has
obviously (whether deserved or not) caused so much controversy? wouldn't it
be better to simply have a faq item stating that the gpl prohibits this
behaviour anyway?

i hope this comes across right without upsetting anyone, as it is obviously
a delicate topic, and i am just trying to understand it better myself, not
cause more issues :)

porl
___
Linux-audio-dev mailing list
Linux-audio-dev@lists.linuxaudio.org
http://lists.linuxaudio.org/mailman/listinfo/linux-audio-dev