PulseAudio sound serverPulseAudio, previously known as Polypaudio, is a sound server for POSIX and WIN32 systems. It is a drop in replacement for the ESD sound server with much better latency, mixing/re-sampling quality and overall architecture. . These are some of PulseAudio's features: . * High quality software mixing of multiple audio streams with support for more than one sink/source. May be used to combine multiple sound cards into one (with sample rate adjustment). . * Wide range of supported client libraries. ESD, ALSA, oss, libao and GStreamer client applications are supported as-is. Native PulseAudio plug-ins are also available for xmms and mplayer. . * Good low latency behaviour and very accurate latency measurement for playback and recording. Ability to fully synchronize multiple playback streams. . * Network transparency, allowing an application to play back or record audio on a different machine than the one it is running on. . * Extensible plug-in architecture with plug-ins for jackd, multicast-rtp lirc and avahi, just to name a few. . This package contains the daemon and basic module set.
This document describes the client API for the PulseAudio sound server. The API comes in two flavours to accommodate different styles of applications and different needs in complexity:
- The complete but somewhat complicated to use asynchronous API
- The simplified, easy to use, but limited synchronous API
All strings in PulseAudio are in the UTF-8 encoding, regardless of current locale. Some functions will filter invalid sequences from the string, some will simply fail. To ensure reliable behaviour, make sure everything you pass to the API is already in UTF-8.
Use this if you develop your program in synchronous style and just need a way to play or record data on the sound server. See Simple API
for more details.
Use this if you develop your programs in asynchronous, event loop based style or if you want to use the advanced features of the PulseAudio API. A guide can be found in Asynchronous API
By using the built-in threaded main loop, it is possible to acheive a pseudo-synchronous API, which can be useful in synchronous applications where the simple API is insufficient. See the Asynchronous API page for details.
The PulseAudio client libraries are not designed to be directly thread-safe. They are however designed to be reentrant and threads-aware.
To use the libraries in a threaded environment, you must assure that all objects are only used in one thread at a time. Normally, this means that all objects belonging to a single context must be accessed from the same thread.
The included main loop implementation is also not thread safe. Take care to make sure event objects are not manipulated when any other code is using the main loop.
The PulseAudio libraries provide pkg-config snippets for the different modules:
- libpulse - The asynchronous API and the internal main loop implementation.
- libpulse-mainloop-glib - GLIB 2.x main loop bindings.
- libpulse-simple - The simple PulseAudio API.