Source: arts/soundserver.idl
|
|
|
|
#include "artsflow.idl"
#include "kmedia2.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;
};
/**
* 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);
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();
/**
* 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;
/**
* 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;
};
};
| Generated by: stefan on stefan on Sat Jun 2 23:13:43 2001, using kdoc 2.0a53. |