We are proud to announce Polypaudio 0.9.0. This is a major step ahead since we decided to freeze the current API. From now on we will maintain API compability (or at least try to). To emphasize this starting with this release the shared library sonames are properly versioned. While Polypaudio 0.9.0 is not API/ABI compatible with 0.8 it is protocol compatible.
Other notable changes beyond bug fixing, bug fixing and bug fixing are: a new Open Sound System /dev/dsp wrapper named padsp and a module module-volume-restore have been added.
padsp works more or less like that ESOUND tool known as esddsp. However, it is much cleaner in design and thus works with many more applications than the original tool. Proper locking is implemented which allows it to work in multithreaded applications. In addition to mere /dev/dsp emulation it wraps /dev/sndstat and /dev/mixer. Proper synchronization primitives are also available, which enables lip-sync movie playback using padsp on mplayer. Other applications that are known to work properly with padsp are aumix, libao, XMMS, sox. There are some things padsp doesn't support (yet): that's most notably recording, and mmap() wrapping. Recording will be added in a later version. mmap() support is available in esddsp but not in padsp. I am reluctant to add support for this, because it cannot work properly when it comes to playback latency handling. However, latency handling this the primary reasoning for using mmap(). In addition the hack that is included in esddsp works only for Quake2 and Quake3, both being Free Software now. It probably makes more sense to fix those two games than implementing a really dirty hack in padsp. Remember that you can always use the original esddsp tools since Polypaudio offers full protocol compatibility with ESOUND.
module-volume-restore is a small module that stores the volume of all playback streams and restores them when the applications which created them creates a new stream. If this module is loaded, Polypaudio will make sure that you Gaim sounds are always played at low volume, while your XMMS music is always played at full volume.
Besides the new release of Polypaudio itself we released a bunch of other packages to work with the new release:
- gst-polyp 0.9.0, a Polypaudio plugin for GStreamer 0.10. The plugin is quite sophisticated. In fact it is probably the only sink/source plugin for GStreamer that reaches the functionality of the ALSA plugin that is shipped with upstream. It implements the GstPropertyProbe and GstImplementsInterface interfaces, which allow gnome-volume-meter and other GStreamer tools to control the volume of a Polypaudio server. The sink element listens for GST_EVENT_TAG events, and can thus use ID3 tags and other meta data to name the playback stream in the Polypaudio server. This is useful to identify the stream in the Polypaudio Volume Control. In short: Polypaudio 0.9.0 now offers first class integration into GStreamer.
- libao-polyp 0.9.0, a simple plugin for libao, which is used for audio playback by tools like ogg123 and Gaim, besides others.
- xmms-polyp 0.9.0, an output plugin for XMMS. As special feature it uses the currently played song name for naming the audio stream in Polypaudio.
- Polypaudio Manager 0.9.0, updated for Polypaudio 0.9.0
- Polypaudio Volume Control 0.9.0, updated for Polypaudio 0.9.0
- Polypaudio Volume Meter 0.9.0, updated for Polypaudio 0.9.0
A screenshot showing most of this in action:
This screenshot shows: the Polypaudio Manager, the Polypaudio Volume Control, the Polypaudio Volume Meter, the XMMS plugin, the GStreamer plugin used by Rhythmbox and gstreamer-properties, pacat playing some noise from /dev/urandom, padsp used on MPlayer. (This screenshot actually shows some post-0.9.0 work, like the icons used by the application windows)