[pulseaudio-discuss] PulseAudio project for art installations

Brian Bulkowski brian at bulkowski.org
Tue Sep 24 17:01:52 UTC 2019


Hi, the following open source code is available.

https://github.com/FlamingLotusGirls/Serenity/tree/master/sound/ 
<https://github.com/FlamingLotusGirls/Serenity/tree/master/sound/SerenityAudio>

Note that there are four components of note:

SerenityAudio, which drives multiple speakers with raspberry pis and 
presents a REST endpoint as well as fetching JSON objects for current 
status in case of a restart,

SoundAdmin, which holds state between reboots and give interactive 
elements a single server to interface with ( nodejs ),

SoundButtons, which is a short python script to have different buttons 
which are Raspberry PI gpio pins, as an example of a simple interaction 
with SoundAdmin,

and the Admin app, which allows changing the balance of different 
"effects", volumes for individual speakers and zones of speakers, and 
such. Also written in Node, I think with vue.js. The admin app also 
controls fire and leds, because we had all elements in the sculpture.

As noted in my other mails on the project, the three issues with 
PulseAudio that slowed me down  were:

* My confusion about the "id" system in pulse audio, which has different 
IDs for different things and if you're incautious you will present the 
wrong ID to the wrong API,

* Running an app like this as a service which needs to auto-restart,

* The proper way to think about the async interface - basically when the 
'user' data field of different APIs can be counted on to be accessed for 
the last time. Example code is almost exclusively single-file and 
terminates with the process, this example of multiple loops and multiple 
speakers means you have to do your async "the right way". In this case I 
coded to C11's new atomic libraries.

This project did not require tight time synchronization between 
speakers, although we may evolve to that in newer sculptures.

Otherwise, PulseAudio performed well, the extraordinarily low CPU use 
meant I never worried about that, and by exposing the bus ids of the USB 
ports I could accurately control which speaker was which.

It was recommended to me this project would have been better with 
GStreamer.

Share and enjoy.

-brian

On 9/2/2019 12:26 PM, Arun Raghavan wrote:
> On Tue, 3 Sep 2019, at 12:13 AM, Brian Bulkowski wrote:
>> Thanks for the response, if you don't believe this is a good use, I
>> won't bother further. GStreamer, then.
> If you have something working with PulseAudio, it might make sense to keep it and maybe change incrementally rather than going back to the drawing board.
>
> -- Arun
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.freedesktop.org/archives/pulseaudio-discuss/attachments/20190924/eecb7f77/attachment.html>


More information about the pulseaudio-discuss mailing list