I have refined my conceptual design for a universal software synthesizer for
Java. It is still not really finished. I am soliciting comments.
There is now a SynthesizerKernel all-abstract class. Concrete
implementations of this can use native methods, but don't need to.
SynthesizerKernel just basically plugs into a middle-level JavaSynthesizer.
JavaSynthesizer in turn plugs into the higher-level JavaSound API. I have
simplified the design so that JavaSynthesizer does not itself implement any
inputs and outputs; instead, it creates threads that connect to inputs and
outputs that already exist in the JavaSound system.
Ultimately there would be a highest-level Java Bean with a snazzy user
interface for creating and editing scores and instrument definitions, and
operating the thing.
I have created SynthesizerKernel so that it could be implemented using a
SAOL compiler, using a new Csound synthesizer kernel, or writing a new
software synthesizer kernel in pure Java. I know that doing it in Java would
be easier to get working, but doing it in C++ would make it easier to
implement other interfaces (VST 2, Buzz, DirectShow, etc.).
I plan to test this design by modifying AXCsound, which already has a Java
interface to the Csound kernel, to implement all of the functions of
SynthesizerKernel and see how well it works with Javasound.
SAOL people, if you see interfaces that SAOL needs that are missing from
SynthesizerKernel, please let me know. One thing that springs to mind is
some less abstract real-time programmatic control mechanism than
sendCommand() (I just added sendCommand to AXCsound and it's fun to play
with!).
Of course any concrete kernel could implement other interfaces in addition
to this one. Perhaps sfront could be modified to generate implementations of
SynthesizerKernel, and the JavaSynthesizer loader for SynthesizerKernel
could pick different ones ("patches") from a directory browser.
This archive was generated by hypermail 2b29 : Wed May 10 2000 - 12:15:24 EDT