Hospitality · Worked Example

Lobby, Pool, Spa, Breakfast, Conference

Multi-zone hotel audio on one mini-PC · 6 min read

Illustrative worked example — a representative scenario showing how Multilarm is configured, not an account of a specific customer.

A boutique hotel runs five separate audio zones that each want different content, at different volumes, at different times of day, with different fallbacks when the content runs out. The industry default is five separate streaming subscriptions, one per zone, each with their own monthly bill and their own web UI. The Multilarm default is one XML file.

The property

A 34-room independent hotel with a ground-floor lobby and bar, a dedicated breakfast room that turns into a lunch cafe, a first-floor conference suite (three meeting rooms), a basement spa with three treatment rooms, and a small outdoor pool on the roof. Each zone has its own in-ceiling speaker distribution already in place. The GM wanted control — not a selection of proprietary apps with different logins.

Hardware

One PC, five soundtracks

Each zone runs as its own Multilarm process, launched at boot from Task Scheduler with a per-zone config via the --config switch. The background music for each zone is driven by the virtual radio (continuous shuffled playback from a folder), with scheduled alarms supplying any fixed-time chimes or announcements. A simplified lobby config (zones\lobby.xml):

<MAConfig><InstanceName>Lobby</InstanceName></MAConfig>
<MAConfig><PlaybackDevice>3</PlaybackDevice></MAConfig>
<MAConfig><WebRemotePort>6580</WebRemotePort></MAConfig>
<MAConfig><PlayRadio>Local</PlayRadio></MAConfig>
<MAConfig><RadioFolder>C:\Hotel\Music\Lobby_Morning</RadioFolder></MAConfig>
<MAConfig><RadioFileFormat>mp3</RadioFileFormat></MAConfig>
<MAConfig><CrossfadeMs>2500</CrossfadeMs></MAConfig>
<MAConfig><RadioScheduleRules>07:00-17:00;17:00-00:00</RadioScheduleRules></MAConfig>

Five Windows shortcuts launch the zones in parallel at boot:

Multilarm.exe --config zones\lobby.xml
Multilarm.exe --config zones\spa.xml
Multilarm.exe --config zones\pool.xml
Multilarm.exe --config zones\breakfast.xml
Multilarm.exe --config zones\conference.xml

The lobby gets lighter acoustic pieces in the morning folder, switches to cocktail-bar jazz at 17:00 via AlternateConfig pointing at lobby-evening.xml. The spa plays the same gentle ambient track pool all day. Breakfast fires at 06:30 and crossfades indefinitely until the folder is swapped at lunch. No streaming subscriptions involved — the hotel’s music licence covers a folder of tracks the GM curated with the marketing team. One instance promoted to Hub mode (Ctrl+H) aggregates all five into one dashboard card row.

Volume caps by time, per zone

Pool audio is different after dark: volume needs to drop to stay within the local noise ordinance. Breakfast gets louder at the 08:00 peak and softer after 10:00. Because each zone is its own Multilarm instance, each zone has its own VolumeProfileRules — semicolon-separated rules with optional volume= caps apply inside the instance that owns the output. The pool’s zones\pool.xml carries:

<MAConfig><VolumeProfileRules>09:00-19:00,volume=0.90;19:00-22:00,volume=0.55</VolumeProfileRules></MAConfig>
<MAConfig><RadioScheduleRules>09:00-22:00</RadioScheduleRules></MAConfig>

The pool zone is silenced entirely outside operating hours because RadioScheduleRules only permits playback inside the 09:00–22:00 window — outside it, the virtual radio is paused rather than playing silently, and the moment 09:00 ticks over the shuffle resumes. The dashboard surfaces the active volume window as volumeProfile in the status JSON.

No dead air between alarms

A folder that runs short of tracks or a schedule with a long gap between bells is a bad look for a hotel — silent speakers feel like broken speakers to guests. The virtual radio is exactly the tool for this: PlayRadio=Local keeps shuffled background music running continuously between any scheduled alarm fires, and Multilarm ducks the radio automatically when an alarm is about to play and brings it back after. Each zone points its RadioFolder at a well-stocked library so there is always something in rotation:

<MAConfig><PlayRadio>Local</PlayRadio></MAConfig>
<MAConfig><RadioFolder>C:\Hotel\Music\Lobby_Morning</RadioFolder></MAConfig>
<MAConfig><RadioFileFormat>mp3</RadioFileFormat></MAConfig>

The startup Audio Health Check validates every folder path before entering the main loop, so a typo or a deleted directory lights up the console (and the dashboard) rather than turning into silent guest-facing speakers an hour later. Every track played is appended to Multilarm.playlist.log, which the GM scrolls when a guest asks about a song they heard in the lobby.

Why outbound-only Cloud Relay matters in hospitality: hotels rarely control their own network. The ISP router sits in a cupboard nobody has the admin password for; the Wi-Fi is a locked-down guest network with no inbound routing. The duty manager’s laptop can still run the dashboard from anywhere because the hotel PC polls outbound, and the GM can run the same dashboard from home at 11 pm when the night porter calls about a noise complaint.

The duty-manager phone

The duty manager’s phone bookmarks the Web Remote URL hosted by the Cloud Relay. From there, during a shift they can:

Voice Broadcast targets a single zone because each zone is its own Multilarm instance and the duty manager selects the zone’s card on the Hub dashboard before tapping Record — the recording transmits only through that instance’s PlaybackDevice, so a shuttle announcement doesn’t reach the spa treatment rooms. A single-zone streaming service physically can’t talk to the speakers at all; Multilarm can talk to each of them individually.

Evacuation override

A dedicated sixth Multilarm instance — zones\alerts.xml — owns the evacuation announcement. It has no music schedule of its own; it exists to fan a single alert tone out to every zone’s speaker simultaneously via MirrorDevices:

<MAConfig><InstanceName>Alerts</InstanceName></MAConfig>
<MAConfig><PlaybackDevice>3</PlaybackDevice></MAConfig>
<MAConfig><MirrorDevices>4|5|6|7|8</MirrorDevices></MAConfig>
<MAConfig><AlarmPath>C:\Hotel\Alerts\Evacuation</AlarmPath></MAConfig>
<MAConfig><AlarmFileFormat>mp3</AlarmFileFormat></MAConfig>
<MAConfig><Volume>1.0</Volume></MAConfig>
<MAConfig><PlayRadio>Disabled</PlayRadio></MAConfig>
<MAConfig><PlayAmbience>False</PlayAmbience></MAConfig>

The GM presses Test Alarm on the Alerts instance from reception or from the Hub dashboard — the evacuation tone plays at full volume on every mirrored device simultaneously, and every fire is appended to the playlist log (the timestamp the insurer will ask for). Because alerts run in their own instance, the music instances keep their own schedules intact; once the alert finishes, each zone’s virtual radio is already waiting to resume.

Conference suite — different schedule every day

Conference suite audio changes per booking: one day a corporate training session (silent), next day a product launch (playlist), next day a gala dinner (jazz). The GM saves each variant as its own config file (conf-silent.xml, conf-playlist.xml, conf-jazz.xml) and uses the Web Remote’s live config editor to drop the right variant into Multilarm.config.xml for the day. Hot-reload picks up the swap on the next tick; no restart. For predictable recurring patterns (e.g. Ramadan, weekends) the same mechanism can be automated via AlternateConfig date rules, which evaluate once at midnight.

What this replaced

Before Multilarm, the hotel ran: a Sonos setup for lobby/bar (two zones on a subscription), a dedicated spa music service (one subscription), a separate in-ceiling amp-plus-iPod for breakfast (not updated in three years), and nothing at all for the conference suite (staff plugged in a laptop on request). Five different UIs, three subscriptions, one unmanaged device, no evacuation integration.

After: six zones, one box, one XML, no monthly bill, and a single dashboard that works from the duty manager’s phone.

Takeaways

Hotel audio has been a land of small proprietary appliances for a long time. It doesn’t have to be. Try Multilarm on your next soft-launch week.