From alsa-devel-owner@alsa.jcu.cz  Thu Jan 14 19:06:10 1999
Received: from post.mail.demon.net (finch-post-10.mail.demon.net [194.217.242.38])
	by marvin.jcu.cz (8.9.1a/8.9.1) with ESMTP id TAA29683
	for <alsa-devel@alsa.jcu.cz>; Thu, 14 Jan 1999 19:05:32 +0100
Received: from [194.222.223.87] (helo=gedamo.demon.co.uk)
	by post.mail.demon.net with esmtp (Exim 2.10 #1)
	id 100r97-0000VF-00; Thu, 14 Jan 1999 18:05:29 +0000
Received: from gedamo.demon.co.uk (gdm@localhost [127.0.0.1])
	by gedamo.demon.co.uk (8.8.7/8.8.7) with ESMTP id SAA02713;
	Thu, 14 Jan 1999 18:05:23 GMT
Message-ID: <369E31E2.BA06DB59@gedamo.demon.co.uk>
Date: Thu, 14 Jan 1999 18:05:22 +0000
From: George David Morrison <gdm@gedamo.demon.co.uk>
MIME-Version: 1.0
To: alsa-devel@alsa.jcu.cz
CC: Jaroslav Kysela <perex@jcu.cz>
Subject: Re: Suggestions
References: <Pine.LNX.3.96.990113211042.19268C-100000@entry.jcu.cz>
Content-Type: text/plain; charset=us-ascii
Content-Transfer-Encoding: 7bit
Reply-To: alsa-devel@alsa.jcu.cz
Sender: alsa-devel-owner@alsa.jcu.cz
Precedence: list

Jaroslav Kysela wrote:
> 
> > Synth specific parameters:
> >   Rather than have a different interface for each type of onboard synth,
> > wouldn't it be possible to present all synths as a MIDI device and pass
> > synth specific parameters via sysex messages?
>
> Looks very much complicated for me. Better is create some private events
> for onboard synthesizers. I'm still thinking about sample/instrument
> download interface (more will come in next mail from me).

It would be hard to implement from the driver side but it would make
applications easier to write as they would only have one kind of
interface to deal with.

> 
> > Jaroslav Kysela wrote:
> > >
> > ...
> > > > Audio + MIDI patchbay:
> > > >   As well as being able to route sources to destinations, the ability to
> > > > register new audio and MIDI ports e.g. a software synth could register a
> > > > MIDI destination and audio source and appear the same as a hardware
> > > > device. This could provide the basis for a plug-in architecture.
> > >
> > > This is already done for sequencer clients (thus all MIDI and synth
> > > devices). I'm not sure if we need digital audio (PCM) user space
> > > drivers.
> >
> > I'm thinking more of a common interface for plug-ins than device
> > drivers.
> 
> Can you more explain your idea? Current ALSA sequencer client in user
> space can receive or send events and control one or more queue.
> You can do in user space many things like:
> 
> 1) device drivers
> 2) sequencer
> 3) timer controller
> 4) recorder
> 5) client watcher
> 
>                                                         Jaroslav
> 
> -----
> Jaroslav Kysela <perex@jcu.cz>
> Academic Computer Centre, University of South Bohemia
> Branisovska 31, C. Budejovice, CZ-370 05 Czech Republic

What I have in mind is plug-ins a la Cubase VST etc. Here's an example:

2 plugins: software synth (synth), software reverb (reverb); and the
sound card (card)

card:
  register_midi_source(midi_in)
  register_audio_destination(audio_out)

synth:
  register_midi_destination(syn_midi_in)
  register_audio_source(syn_audio_out)

reverb:
  register_audio_destination(rev_audio_in)
  register_audio_source(rev_audio_out)

route card.midi_in to synth.syn_midi_in
route synth.syn_audio_out to reverb.rev_audio_in
route reverb.rev_audio_out to card.audio_out

So MIDI messages come in from the card's external input and go to the
synth. The synth generates sound which is routed to the reverb and then
to the card's audio output.

There could be more effects between the synth and output, or the output
could go to a hard disk recorder. Come to that the synth could be made
up of multiple plugins. All this is, of course is going to take a lot of
processing power. I wonder if it might be possible to base plug-ins on
something like csound and move some of the load to DSP chips.


The way I envisioned ALSA was that the drivers would take care of the
card specific details and the libs would provide an abstraction where
everything was a MIDI/Audio source/destination. A MIDI destination could
be an external port, an internal synth or a software synth but the
application wouldn't have to know which, it would just be something you
could send MIDI data to.


-- 
George David Morrison
mailto:gdm@gedamo.demon.co.uk
http://www.gedamo.demon.co.uk

