** Introduction **
The Name PupsAudio derives from PulseAudio, but "Pups" (to fart) denotes that this a less fancy version. In fact the goal of PupsAudio is a drop in replacement for PulseAudio that does nothing else but audio I/O utilizing ALSA. In other words, PupsAudio is a minimal glue between the PulseAudio API and ALSA.
** Implementation aspects **
Many functions are just stubs. The asynchronous API was implemented mostly synchronously, basically not doing anything. This works surprisingly well for some applications.
The only module which does something in the end is pa_stream. Since callbacks are required for application notifications one pthread is required to poll ALSA events and pass them thru via the registered callbacks. Using ALSA snd_async_add_pcm_handler() unfortunately does not work because threaded applications will get killed by unhandled SIGIO at some unavoidable point in time. I was unable to solve this issue without modifying the application itself, and so this route would not allow to create a drop in replacement. Proprietary application would not work either. Because of that I decided to use the poll() approach.
The headers under pulse and the linker map file are stolen from PulseAudio 6.0. Some code snippets are taken from ALSA examples.
** Why not just install PulseAudio **
I tried, but it does not work for me. The Problem is the large amount of dependencies which would break a lot of things on my laptop. I also do not like the idea to install something that causes such a huge burden and it provides something I do not want. ALSA in terms of sound is good enough. I just need damn audio I/O, basically a pipe that does nothing.
The wiki uses Markdown syntax.