i-rinat/apulse logo

i-rinat/apulse

Free

PulseAudio emulation for ALSA

FreeFree tier
Type
Open Source

About i-rinat/apulse

Apulse is a lightweight compatibility layer that provides a partial implementation of the PulseAudio API, enabling PulseAudio-dependent applications to run on systems that only have ALSA. It consists of a loader script and shared libraries that mimic PulseAudio's interface, intercepting audio calls and routing them through ALSA's built-in dmix, dsnoop, and plug plugins. Unlike a full PulseAudio stack, apulse does not use a separate sound mixing daemon; instead it leverages ALSA's native capabilities for multi-stream playback and capture. The project is designed as a drop-in alternative only for essential API functions, making it particularly useful for running applications like Skype on ALSA-only environments without the overhead of PulseAudio.

Key Features

Partial implementation of PulseAudio API using shared libraries
Loader script (apulse) updates LD_LIBRARY_PATH for dynamic loading
No separate sound mixing daemon; relies on ALSA's dmix, dsnoop, and plug plugins
Compatibility layer for PulseAudio applications on ALSA-only systems
Open source (MIT license) and easy to build with CMake

Pros & Cons

Pros
  • No separate audio daemon required; uses existing ALSA plugins
  • Lightweight and focused—only implements essential PulseAudio API parts
  • Works with standard ALSA configurations (dmix, dsnoop, plug enabled by default)
  • Easy to build and install using CMake
  • Free and open source (MIT license)
Cons
  • Not a complete PulseAudio drop-in replacement; some applications may not work
  • Requires ALSA development libraries and GLib to build
  • Applications must be launched via the apulse wrapper script to use the libraries
  • Limited to audio features that ALSA's dmix/dsnoop/plug can provide

Best For

Running PulseAudio-dependent applications (e.g., Skype) on systems without PulseAudioProviding audio support in minimal or embedded Linux environments that use ALSAAvoiding the complexity and resource usage of a full PulseAudio daemonTesting or isolating audio functionality without altering system audio architecture

FAQ

What is apulse?
Apulse is a compatibility layer that provides a partial implementation of the PulseAudio API, allowing PulseAudio-dependent applications to run on systems that have only ALSA. It uses ALSA's built-in plugins (dmix, dsnoop, plug) instead of a separate audio daemon.
How does apulse work?
It consists of a loader script and shared libraries. The script updates the LD_LIBRARY_PATH environment variable so that applications load apulse's libraries instead of the real PulseAudio ones. The libraries then redirect audio calls to ALSA.
Does apulse require PulseAudio to be installed?
No. Apulse is designed for systems without PulseAudio. It only requires ALSA libraries (libasound2-dev) and GLib (libglib2.0-dev) to build and run.
How do I use apulse with an application?
Run the application via the apulse wrapper: `apulse program-name [program-parameters]`. The wrapper sets the environment so that the application loads apulse's libraries.
How do I install apulse?
Clone the repository, create a build directory, run CMake with `-DCMAKE_INSTALL_PREFIX=/usr -DCMAKE_BUILD_TYPE=Release`, then make and install (recommended to use checkinstall for easy removal).