Network Sound Server
Last updated at 1:45 pm UTC on 16 January 2006
This pages summarizes the state of network sound servers and how Unix Squeak might tap in.
What and Why
A network sound server allows applications to play sounds across a network, much in the same way XWindows allows applications to present graphical user interfaces across a network. The major advantages of such a scheme are:
- Sound server protocols tend to be portable across all Unices – all it requires are sockets.
- Sound servers allow multiple processes to share the sound device, which on many OS's is not allowed when the device is accessed directly.
- They work across a network; so if you run Squeak across X, you can forward your sound as well as your graphics. (This reason becomes less interesting if someone adds sound support to Nebraska)
Lex Spoon has implemented support for the "Network Audio System" – see Sound support for Unix.
NAS is flexible enough, not too complicated, and very widely available–it even works on some NCD X terminals!
Enlightened Sound Daemon
Probably the most popular network sound server is the Enligtened Sound Daemon (ESD), the daemon that Gnome uses. Unfortunately, ESD doesn't seem to support what Squeak would need. Specifically, ESD doesn't provide any support for monitoring the rate that sound samples are played other than letting the network socket fill up and block. Squeak, on the other hand, wants to keep the buffers as small as possible while still avoiding buffer underruns. Using huge sound buffers, as the authors implicitly suggest doing, will lead to huge delays whenever a sound is generated from Squeak.
ESD seems best suited for playing sound effects and for long but unsynchronized background music.
YIFF is an interesting sound server, but unfortunately it can only play sounds that are stored in files on the server. It doesn't support Squeak's model of a stream of sound at all.
YIFF works well for playing sound effects, but that's about it.
The Advanced Real-Time Synthesizer is an extremely flexible system of sound middleware. However, it seems to have the same big limitation that ESD has: you can't query to see how much sound has been played so far (well, according to the docs there is some way. Lex couldn't figure it out, though.) Furthermore, compiling aRTs requires that you not only have C++ with STL, but that you have CORBA available. In short, it can be a pain to install. (NOTE! This isn't true anymore...aRTs can be compiled using KParts, the KDE2 object model, or solo without it. CORBA is no longer an issue at all.)
Nevertheless, aRTs is a nice audio framework. Furtheromer, KDE seems to be standardizing on aRTs–in fact, aRTs used to be called KSynth.
CAST might do the trick as well cause you can select the sampling rate at startup-time.
OSC for Squeak: An implementation of the OpenSound Control (OSC) Protocol done by Sorrow, OOPAL and Lispy Forth.
One can connect Squeak to PureData, MaxMsp, SuperCollider with that protocol.
OpenAL is an API under development which is geared towards 3D sound. Interesting, although it sounds like it's still under developement as of 00/11/22.