A powerful daemon for playing multiple audio tracks simultaneously through different audio channels with independent control.
PAPA (PipeWire Async Polyphonic Audio Player) is designed for scenarios where you need precise control over multiple audio sources. It's ideal for:
- Museum installations
- Interactive exhibits
- Multi-zone audio playback
- Spatial audio experiences
- Any application requiring multiple synchronized or independent audio streams
- Play multiple audio tracks simultaneously with independent control
- Map audio channels to specific outputs
- Control playback through simple socket commands
- Independent volume control for each track
- Loop mode for continuous playback
- Simple command-line interface
- PipeWire (for audio playback)
- libyaml (for configuration parsing)
- libsndfile (for audio file loading)
makesudo make installpapadThis will start the audio player daemon. The server listens for commands on a Unix socket at /var/run/papad.sock.
The client utility can be used to control the running server:
papa --play track1 # Play a specific track
papa --stop track1 # Stop a specific track
papa --stop-all # Stop all playing tracks
papa --list # List all available tracks
papa --status # Show current playback status
papa --reload # Reload configurationThe configuration file is in YAML format and is searched for in the following locations:
./config/default.yml./default.yml/etc/papa/config.yml
logging:
level: INFO
tracks:
- id: track1
file_path: /path/to/track1.wav
loop: true
volume: 0.8
output:
device: default
mapping:
- FL
- FR
- id: track2
file_path: /path/to/track2.wav
loop: false
volume: 1.0
output:
device: default
mapping:
- AUX0
- AUX1You can control PAPA programmatically by sending commands to the Unix socket:
play <track_id>- Play a trackstop <track_id>- Stop a trackstop-all- Stop all trackslist- List available tracksstatus- Get player statusreload- Reload configuration