Audio Output
Play browser or server-side audio for alarm annunciation and feedback.
Prefer a guided tutorial?
New to this? Follow the Audio Output walkthrough for a step-by-step tour, then come back here for the full reference.
Overview
ControlBird offers two complementary audio systems. Session Audio plays sound directly in the operator's browser, with per-session volume control surfaced through the volume widget in the taskbar. Server-side audio output drives hardware output for dedicated kiosks and industrial HMI panels, sending audio to a sink over the network. The two systems are independent: a single deployment can use either, or both at once for different stations.
Use Session Audio when sound should follow the logged-in user at a web-based operator station, and use server-side audio output when a fixed panel needs to play through attached speakers regardless of who is logged in. In both cases, alarm annunciation is automatic: ControlBird plays the configured sound for the highest-priority unacknowledged alarm to every active session, so you rarely trigger audio by hand once severities are configured in the Alarms Config app.
Key concepts
- Audio files hold the sound that everything else references. Upload WAV, MP3, OGG, or WebM files through the Alarms Config app; WAV is the most compatible format.
- Session playback plays a sound immediately in an operator's browser, with per-session volume and an optional loop.
- Severity-driven alarm sounds attach a sound to each alarm severity. ControlBird plays only the sound for the highest-priority unacknowledged alarm.
- Server-side output is configured with an audio controller, an endpoint (the address of the audio server) and one or more mappers that route audio to a sink.
- Browser autoplay policy blocks sound until the user interacts with the page. The volume widget shows a warning and a "Click to enable audio" option to unblock playback.
How alarm sounds are chosen
ControlBird re-evaluates alarm audio every 10 seconds. It considers all alarms whose state is Active or Latched and that are not acknowledged, ranks them by the priority of their current severity, and broadcasts the configured sound for the highest-priority one to every active session that has a logged-in user.
Configuration reference
Alarm severity audio & presentation
Each alarm severity, configured in the Alarms Config app, can carry a sound and visual styling. These fields are how you control per-severity annunciation and appearance.
| Field | Type | Purpose |
|---|---|---|
SoundFile | Audio file | The sound to play when alarms of this severity are active |
Priority | Int | Numeric priority (0–99); ControlBird plays only the sound for the highest-priority unacknowledged alarm |
FlashRate | Int | Icon flash rate in milliseconds; 0 disables flashing |
RowBackgroundColor | String | RGBA color for the alarm row background (e.g. rgba(51,51,51,1)) |
RowTextColor | String | Color for the alarm row text (e.g. #ffffff) |
RowBorderColor | String | Color for the alarm row border (e.g. transparent) |
Symbol | String | SVG markup for a custom alarm icon |
PulseAudioController
Server-side audio service controller for hardware playback on kiosks and HMI panels.
| Field | Type | Purpose |
|---|---|---|
Name | String | Controller instance name |
EndpointConnectionMode | String | Connection mode for the output, used so a single station drives the speakers in a high-availability deployment |
Disabled | Bool | Disables the controller when set to 1 |
PulseAudioEndpoint
Network endpoint configuration for the PulseAudio server connection.
| Field | Type | Purpose |
|---|---|---|
Host | String | PulseAudio server hostname (default localhost) |
Port | Int | PulseAudio server port (default 4713) |
ServerName | String | Logical server name (default default) |
TlsEnabled | Bool | Enable TLS encryption (0 = disabled, 1 = enabled) |
Certificate | Reference | The certificate to use for TLS |
PulseAudioMapper
Mapper configuration that routes audio commands to PulseAudio playback operations.
| Field | Type | Purpose |
|---|---|---|
SourcePath | String | Path to monitor for audio commands |
TargetEntity | Reference | Target for mapper operations |
Channels | Int | Audio channel count (default 2 for stereo) |
SampleFormat | String | PCM sample format: S16LE (signed 16-bit little-endian, default) or FLOAT32LE |
SampleRate | Int | Sample rate in Hz (default 44100; supports 44100, 48000) |
SinkName | String | PulseAudio sink name for the output device (e.g. alsa_output.pci-0000_00_1f.3.analog-stereo) |
Volume | Float | Master volume multiplier 0.0–1.0 |
StreamName | String | Display name for the PulseAudio stream (default Audio) |
Configuration examples
Server-side audio mapper
Route audio to a hardware sink for 48 kHz stereo output at 80% volume.
PulseAudioMapper {
SourcePath: '/Root/Control/AudioOutput',
SinkName: 'alsa_output.pci-0000_00_1f.3.analog-stereo',
SampleRate: 48000,
Channels: 2,
Volume: 0.8
}Volume widget
The taskbar volume widget exposes a volume slider (0–100%), a mute toggle, and a playing indicator with an animated pulse. Its menu items are: Enable Audio (shown when autoplay is blocked), Playing: <trackname>, Stop, the volume slider, and Mute / Unmute.
Common patterns
- Per-severity annunciation. Configure a distinct sound and priority for each alarm severity in the Alarms Config app. ControlBird handles selection and broadcast automatically, with no scripting needed.
- Continuous siren. Enable looping on session playback so a critical sound repeats until the operator acknowledges the alarm or a new sound is played.
- Fixed-panel speakers. Use an audio controller, endpoint, and mapper so a kiosk plays through attached hardware regardless of session state. Run
pactl list sinkson the host to discover valid sink names before configuring the mapper. - Custom feedback. Trigger ad-hoc sounds (button confirmations, completion chimes) for a specific operator session from a Script.
Troubleshooting & limitations
Browser autoplay is blocked until interaction
Browsers block audio until the user clicks somewhere in the UI. A sound played before any interaction is rejected by the browser. The volume widget shows a warning indicator and a "Click to enable audio" option to unblock playback.
- Repeated alarm sounds. Multiple active alarms re-trigger sound every 10 seconds. Acknowledge alarms promptly to stop the repetition.
- Only active, unacknowledged alarms play. ControlBird plays a sound only for alarms that are in an active or latched state and are not yet acknowledged.
- Loops run indefinitely. When looping is enabled, audio repeats until you play a new sound or disable looping.
- Exact sink names required. The audio mapper sink name must match exactly: verify with
pactl list sinksbefore configuring. - Operation support. Server-side audio supports play, stop, volume, and state operations. Pause, resume, and seek are not yet implemented.
- Upload size cap. Audio uploads are capped at 5 MB in the Alarms Config UI, which validates MIME types (
audio/wav,audio/mpeg,audio/mp3,audio/ogg,audio/webm). - Backgrounded tabs. Browsers throttle audio in inactive tabs; sound may not play if the ControlBird UI tab is backgrounded.
- Host audio access. Server-side audio plays through the host's audio system, so the deployment must run with permission to reach the host's audio device.