This is an approximation what remains todo to get aRts running on MCOP
as it was before on CORBA.

1. KDE2.0

<everything should really be done now>

2. KDE2.1 (or earlier?)

=> optimization, not necessary but pretty
- merge quick float -> integer conversion
- get rid of additional Synth_MULTI_ADD pair in soundserver

- change text in the kcmarts module regarding latency, it's plain confusing

- ensure DynamicCast(<some null object>) == Object::null()
- support multiple artsd instances on one computer (like multiple displays),
  and think of a clever way to register them
- StereoEffectStack should support reordering (and probably listing) effects
- StereoEffectStack should remove effects that are not longer referenced
- put streamwise blocking into MCOP, see artscat.cc to read really ugly
  source which lives without that feature
- port visual objects
- more work on flow graph descriptions (Structure, etc.) -- external interfaces
- port every object
- notifications when attributes change
- recursive scheduling again (with loops & cycles)
- reading/writing IEEE Floats needs proper documentation, testing on
  different architectures and probably different code for some machines
- audio playing support for mono? 8bit? mmap? ... support other architectures
- allow progressive loading for wave files
- write blockwise caching (not requiring whole samples to be held in memory)
- maybe make an explicit call like "suspend now" (esdctl off/esdctl on)
- recording, try to fix autoSuspend in conjunction with full duplex

3. To have more fun

- tune the transfer protocol (although MCOP theoretically could do 30000+
  synchronous invocations per second, it can only do 8000+)

  possible tuning operations are
    * rewrite Buffer not to use vector<char> to store data, but malloc'd
	  blocks
    * try to write "zero allocation" invocations, that means, try not to
	  allocate memory on performing an invocation. For instance Buffers
	  could be kept in pools, and be reused for further invocations, without
	  the need to realloc another memory block
    * try to minimize the amount of copies of data, possibly even using
	  something like sharedmem to share data between the sending and
	  receiving buffer

- implement plugins that transfer non-standard datatypes such as midi events,
  video frames, fft packets, oscilloscope views, ... (which was impossible
  with aRts on CORBA)
- make aRts run inside Brahms, KWave or your-favourite-other-app, to do
  signal processing where it is needed (similar to AudioLogic Environment,
  for instance)
- convince other people to use aRts, so that the usefulness of universal
  plugins written for the API increases
- when being crazy, implement gatewaying from MCOP to DCOP, CORBA, XMLRPC
  or whatever else might be useful

Other suggestions:

  => Config dialog:

- instead of using three radio buttons to select latency, use a slider
with three positions (left, middle, and right) with icons beneath them
depicting latency, or labels beneath these points.  More polished looking.

- instead of saying changes must take place when you logout and login,
just restart artsd after the dialog is accepted. (This may also be done
as an additional MCOP interface to change config stuff on the fly, as
restarting will mean that already connected clients (mp3 player) will
crash/hang).

  => Configuration

- make extension dir runtime configurable (not only compiled in)

  => Documentation & Web

- make kdoc classtree available online

  => aRts C API

- implement an arts_stream_flush for writing half-written data packets
  (useful for implementing SNDCTL_DSP_POST in artsdsp)
- maybe implement atomic setting of fragmentcount and -size
  (useful for implementing SNDCTL_DSP_SETFRAGMENT)
