home *** CD-ROM | disk | FTP | other *** search
- #include "artsflow.idl"
- #include "kmedia2.idl"
- #include "core.idl"
-
- module Arts {
-
- /**
- * One entry of the sample storage - initially, you'll need to fill the entry.
- *
- * To do so, call write repeatedly to fill it with data, and finish() when
- * you are done. After that you can use the filename attribute to get the
- * name of the file on the server that has stored the data. You can use
- * this filename for other things (i.e. SimpleSoundServer::play).
- */
- interface SampleStorageEntry {
- readonly attribute string name;
- readonly attribute string filename;
- readonly attribute boolean completed;
-
- void write(sequence<byte> data);
- void finish();
- };
-
- /**
- * Interface for storing files on the sound server
- */
- interface SampleStorage {
- void constructor(string directory, boolean clearOnInit);
-
- /**
- * creates a new entry which you can use to store a sample - if you just
- * create an entry, it will be private to you, i.e. you can use it, and
- * as soon as you don't need it any longer, it will be freed
- *
- * if you want that the entry stays in the storage, you need to add it,
- * and it will stay then until you remove it
- */
- SampleStorageEntry createEntry(string name);
-
- /**
- * add an entry (which will make it accessible via findEntry) - remember
- * to eventually call removeEntry, or the entry will stay there forever
- */
- void addEntry(SampleStorageEntry entry);
-
- /**
- * removes an entry, that is, the entry will only stay there until
- * nobody needs it any more and then get freed
- */
- void removeEntry(SampleStorageEntry entry);
-
- /**
- * finds an entry by name
- */
- SampleStorageEntry findEntry(string name);
- };
-
- /**
- * Producer of byte sound
- *
- * This is used inside the sound server interface
- */
- interface ByteSoundProducer : SynthModule
- {
- readonly attribute long samplingRate;
- readonly attribute long channels;
- readonly attribute long bits;
-
- async out byte stream outdata;
- };
-
- /**
- * V2 version of the ByteSoundProducer interface that implements the title
- * attribute
- */
- interface ByteSoundProducerV2 : ByteSoundProducer
- {
- readonly attribute string title;
- };
-
- /**
- * Receiver of byte sound
- */
- interface ByteSoundReceiver : SynthModule
- {
- readonly attribute long samplingRate;
- readonly attribute long channels;
- readonly attribute long bits;
- readonly attribute string title;
-
- async in byte stream indata;
- };
-
- /**
- * This is a very simple sound server interface
- *
- * WARNING: This currently inherits a KMedia2 PlayObjectFactory for test
- * purposes, but don't rely on that
- */
-
- interface SimpleSoundServer : PlayObjectFactory
- {
- readonly attribute StereoEffectStack outstack;
-
- /**
- * tries to play the sound in "filename"
- *
- * returns an ID when success 0 when it fails
- */
- long play(string filename);
-
- /**
- * returns true if the sound in ID is still playing
- */
- //boolean isPlaying(long ID);
-
- /**
- * stops a playing sound by ID
- */
- //void stop(long ID);
-
- /**
- * specifies the minimum amount of milliseconds that have to be buffered
- * to allow safe streaming (without interruptions) from/to external apps
- *
- * this depends on the realtime parameters the sound server itself uses
- * to talk to the hardware
- */
- readonly attribute float minStreamBufferTime;
-
- /**
- * specifies the amount of milliseconds the server itself spends with
- * the hardware (buffering latency) - so if you stream into the server,
- * you should have a yourStreamBufferTime >= minStreamBufferTime, and
- * the total latency is
- *
- * totalLatency = yourStreamBufferTime + serverBufferTime
- */
- readonly attribute float serverBufferTime;
-
- /**
- * attaches a byte sound producer (read: a client which produces/mixes
- * an audio stream itself and just wants playback via the soundserver)
- */
- void attach(ByteSoundProducer producer);
-
- /**
- * detaches a previous attached byte sound producer
- */
- void detach(ByteSoundProducer producer);
-
- /**
- * attaches a byte sound receiver (a client that records an
- * audio stream from the soundserver)
- */
- void attachRecorder(ByteSoundReceiver receiver);
-
- /**
- * detaches a previous attached byte sound receiver
- */
- void detachRecorder(ByteSoundReceiver receiver);
-
- object createObject(string name);
- };
-
- enum RealtimeStatus { rtRealtime, rtNoSupport, rtNoWrapper, rtNoRealtime };
-
- /**
- * This is an enhanced sound server interface which can be used to
- * query status information or suspend the soundserver right away
- */
- interface SoundServer : SimpleSoundServer
- {
- readonly attribute RealtimeStatus realtimeStatus;
-
- /**
- * Returns how many seconds you have to wait _now_ for the soundserver
- * to suspend. A value of -1 signals that the sound server is busy and
- * will not suspend automatically at the moment.
- */
- readonly attribute long secondsUntilSuspend;
-
- /**
- * Makes the soundserver suspend now _if_ it is not busy playing, that
- * is, if it is "suspendable". Returns true if successful.
- */
- boolean suspend();
-
- /**
- * Asks the soundserver if it is suspended. Returns true if so.
- */
- boolean suspended();
-
- /**
- * Permanently terminates the sound server - this is not intended to be
- * widely used. However, it provides a way to "kill" the sound server,
- * even if you don't reside on the same host with it, and even if you
- * don't know the process id, and so on. In the future it also offers
- * the possibility for interested apps to be informed before the server
- * goes away, and for important apps to block termination.
- *
- * Returns true if successful.
- */
- boolean terminate();
- };
-
- /**
- * This is an even more enhanced sound server interface that supports changing
- * the autosuspend time, and returning more information about the server
- * settings.
- */
- interface SoundServerV2 : SoundServer, PlayObjectFactoryV2
- {
- /**
- * Time in seconds after which server will suspend if idle.
- */
- attribute long autoSuspendSeconds;
-
- /**
- * Multiplier for size of network buffers. Default is 1,
- * which is fragment size * fragment count. (expressed
- * as milliseconds).
- */
- attribute long bufferSizeMultiplier;
-
- /**
- * Current CPU usage in percent
- */
- readonly attribute float cpuUsage;
-
- /**
- * AudioSubSystem parameters
- */
- readonly attribute string audioMethod;
- readonly attribute long samplingRate;
- readonly attribute long channels;
- readonly attribute long bits;
- readonly attribute boolean fullDuplex;
- readonly attribute string audioDevice;
- readonly attribute long fragments;
- readonly attribute long fragmentSize;
-
- /**
- * version
- */
- readonly attribute string version;
-
- /**
- * global output volume for the sound server
- */
- readonly attribute StereoVolumeControl outVolume;
-
- /**
- * for storing samples on the sound server
- */
- readonly attribute SampleStorage sampleStorage;
-
- /**
- * this method checks for new object implementations (you can call this
- * if you have implemented and installed new components in C++ or with
- * artsbuilder, to make the soundserver use them without restart)
- */
- void checkNewObjects();
- };
-
- /**
- * A KMedia2 Wave PlayObject
- */
- interface WavPlayObject : PlayObject, SynthModule
- {
- out audio stream left,right;
- };
-
- /**
- * An advanced KMedia2 PlayObject based on GSL datahandles
- */
- interface GSLPlayObject : PlayObject, PitchablePlayObject, SynthModule
- {
- attribute boolean done;
-
- out audio stream left,right;
- };
-
- /**
- * Helper interface to ensure that artsd gets initialized properly when
- * multiple artsd processes are started at the same time.
- */
- interface SoundServerStartup
- {
- void lock();
- void unlock();
- };
-
- };
-