Sound, voice and updates

Last verified

How BRX plays sound: what the gun does on its own, what a host has to trigger, and how to change what you hear over USB or through a firmware update.

How BRX audio works

Every sound is an id. Your BRX stores 2,477 sound files (the official app's own list names 2,166 of them). The gun plays most of them by itself, the instant something happens. A host (the Callsign app, or Open BRX Mission Control) plays the rest with a single command. Knowing which is which tells you what you can change.

What decides behavior. Two questions decide how any sound behaves. First, who starts it: the gun on its own, or a host over Bluetooth. Second, how much you can change it: fixed, swappable by file, or fully yours.

Cut 1: who starts the sound

Cut 2: how much you can change each sound

TierExamplesWhat you control
Forced (native, unstoppable)Power-on boot sound. It plays before any host connects, which is why a tagger is loud at startupNothing: can't suppress or trigger
Native reflex, re-skinnable"Phone connected" on BLE attach, disabled chirp, reload / empty, low batteryYou can't stop it firing, but you can replace the clip in the USB AUDIO folder (see Custom sounds over USB)
Config-driven, then automaticHit / pain / death / armor / shield / weapon soundsAny bank id via the loadout ($SIR / $PSET / $WEAP), or replace the file
Host-triggered, fully yoursObjective callouts, timers, custom announcersAny of the 2,477 ids on the gun, on any rule, via $PLAY

Only one sound is truly stuck: the boot chime.

The $PLAY command (developer detail)

ItemValue
Shape$PLAY,<soundID>,<volume>,<priority>,<announcerID>,,,,*. Token 1 is the local effect sound; token 4 is a second, independent announcer/voice slot.
Two slots at once$PLAY,,4,6,V3A,,,,* leaves the effect slot empty and says "kill". Both slots can carry an id at once: the app's game-end frame is $PLAY,VSF,4,6,JAY,,,,* (victory sting plus "victory").
Slots behave differentlyToken 1 interrupts: sending a new id there cuts off whatever is playing, in either slot, even mid-word. Token 4 queues: a new id there waits its turn and plays after what is ahead of it, several deep. This is true of the slot, not the id: an effect id sent through token 4 queues exactly like a voice line does. Put anything that must never be cut off in token 4, and accept that anything urgent in token 1 can cut a line short.
Required tokensVolume and priority are required. $PLAY,VA33,,,,,,,* was silent on the bench; $PLAY,VA33,4,6,,,,,* spoke "game over". The official apps use 3,9 (Android) and 3,6 / 4,6 (iOS Callsign): app conventions, not protocol constants.
Stop playback$PLAYX,0,* stops playback right away. The app sends it just after $STOP on connect, and it also silences a spawn voice line if sent right after $SPAWN. One stop per write stops only the clip playing; several stops in one write can clear every queued clip.
Queue$PLAY clips queue first in, first out. Four $PLAY frames written with no gap between them lost one clip, in 2 of 2 runs, so Open BRX spaces its $PLAY writes. The smallest safe gap is not measured.
Unknown idAny id not in the bank is invalid. For an unknown id the gun plays a fallback sound instead of staying silent. That is why a microphone sweep can't list the bank: a nonsense id produced audio at 150x the noise floor.

Where kill feedback comes from, and what the green sight flash is

Score a kill in a game the app hosts, and your gun gets three things from the host over Bluetooth. $SFLASH,* is the green sight flash: the scope/sight LED goes green as a kill confirm. $PLAY,,4,6,V3A,,,,* says the "kill" line on the announcer slot. On a lead change, a score line such as VB17 plays too. You get one $SFLASH per kill, about 0.4 s after the trigger burst.

$SFLASH is bare, with no arguments. It works on an idle unspawned gun and needs no companion frame.

In a phoneless game started from the gun menu, the gun says "double kill" and other streak lines on its own, with no phone involved. How a gun learns enough about the other players to call a streak has not been established. Once a Bluetooth host is driving the gun, those native multikill lines go silent and the host has to play them.

The one hit function that changes something without touching a pool. Function 23 in the $SIR table leaves health, armor, ammo and the trigger alone: the victim keeps firing normally. What it does move is $ALCD token 2, which reads 100 in normal play, drops to 0 on a fn 23 hit and climbs back over roughly 6 to 8 s. A $SPAWN,,* resets it to 100 at once. Token 2 is now known: it is the gun's live accuracy (bench 2026-09-09), so a fn 23 hit forces your accuracy to zero, below whatever floor your weapon carries. The gun was also heard to go silent on a fn 23 hit, and that stands on its own, but the token 2 number was never evidence for it. Treat fn 23 as an accuracy debuff a host can trigger and read.

Why does the gun play music when I die?

Your player profile carries a "music mix on death" slot next to the death scream. It is part of the voice pack, not a separate feature (see Voice packs and announcers).

Are grenade sounds on the grenade?

Mostly no. Your gun sees the grenade's IR signal and plays those sounds from its own bank: the blast, the flashbang and gas effects, the CTF music, the "control point captured" lines. The grenade itself only chirps and flashes for status. It announces its mode through the tagger speaker only while the gun is in setup.

Voice packs and announcers

A voice pack is the run of sound ids at the tail of $PSET, one per game event: death alarm, pain, respawn cry, kill line. The BRX does not ship "a male voice" and "a female voice" as one big pack. The characters you pick in the app are just pre-filled sets of those ids.

The voice pack has seventeen wire slots, $PSET tokens 7 through 23, in the order below. The alignment is confirmed from Battle Company's field table and the v4.30 firmware image, and the pool-sound positions were checked on hardware.

Declared fieldEvent it fires on
deathAlarmYou died (the loud beep/alarm)
stealthDeathScreamDeath while stealthed / quiet death
musicMixOnDeathDeath music sting (e.g. JAD)
deathScreamThe character's death cry
battleRespawnCryRespawn line ("Get some!", "Let's move out")
meleeGruntMelee swing
shortPainLight hit
longPainHeavy hit
painReliefHealed / relieved
missShotHitA shot that registered but did no damage (accuracy miss)
hitHpHit that took health
hitArmorHit that took armor
hitShieldHit that took shield
hitCritCritical hit
emptyUnboundButtonSoundPressing a button with nothing bound (the "can't do that" chirp)
ammoOrGearPickUpAmmo / gear pickup
energyShieldLoopLooping shield hum (e.g. A10). Stops only when the shield reaches zero, not on $PLAYX,0,* (confirmed 2026-09-25). It holds every queued clip back, so Open BRX ships it empty.

The "Get some" respawn line was traced to this block on the bench.

Design choice: pool sounds, not health sounds. Open BRX uses the pool slots on purpose. Because the firmware carries a separate sound for a hit that took health, a hit that took armor and a hit that took shield, a hit can tell the player what it went through. Open BRX rings metal for armor and plays an energy note for the shield, drawing from a small pool so the same hit does not sound identical all match. Health is deliberately silent: the character's own pain grunt fires on exactly those hits, so real damage is the moment the metal stops and a human sound starts. The pool slots behave as described on hardware, and every sound was chosen by ear rather than from the catalog.

An empty slot is not silence. Clearing one of these fields makes the gun fall through to a neighboring pool's sound, not go quiet: an empty hitShield plays the armor clip. Health can ship empty only because it is the innermost pool, with nothing further in to fall through to. This differs from the voice fields, where an empty value really does mean the gun says nothing. Confirmed on hardware 2026-09-07.

Where named voices come from. The named voice profiles you choose in Callsign are not stored in the app. The app fetches them from Battle Company's server (.../callsign/voice-profiles/selected/) and writes the resulting slot ids into $PSET. Open BRX offers the same idea as a voice field on each player.

Voice families in the bank

Prefixes and character names are restated from David Knox's audio map; counts come from the bank file.

PrefixCharacter / voiceIds
VAMale (the default announcer; also the connect/countdown/game-over lines)321
VBScout / clean female (score & lead lines such as VB17 live here)90
VEClean male9 (+13 VEx lines)
VMClean female9 (+12)
VPClean male (alt)9 (+12)
VSClean commander (game-end stings VS6, VSB, VSF)9 (+9)
VCSentinel9 (+13)
VDFemale sniper9 (+13)
VF / VGCreature / female creature9 (+13) each
VHValkyrie ("weapons hot" VHT, kill VHR)9 (+22)
VJViper9 (+13)
VK / VLWraith (Russian) / Russian clean9 (+13) / 9 (+12)
VNMercenary9 (+12)
VQ / VRNexus commander / Vanguard commander9 (+10) / 9 (+9)
V0 Fury, V1 Grenadier, V2 Guardian, V3 Heavy, V4 Hive Queen, V5, V6 Infiltrator, V7 Marauder, V8 Medic, V9 RaiderThe Supremacy / class characters23 each (V4: 33, V5: 26, V8: 35)
V100-V144Gameplay callouts: CTF, Slayer, King of the Hill34

What one character pack contains

The pattern repeats across every V<n>/V<letter> family.

Weapon callouts (announcer says the weapon name)

WeaponCallout idFire sound id
M4VA4BR02
TAC-87 shotgunVA6AT14
SR-100 sniperVA5YS16
MG7VA4FJ07
SMG-x3VA5RG10
TAR-33 (silenced AR)VA6Bnot documented

Killstreak audio is not free under a phone or host. "Double kill" and its friends are announced natively only in a game started from the gun's own menu. As soon as a host drives the gun over Bluetooth, the host must play them itself ($PLAY on the announcer slot). Open BRX's Mission Control does this. A bare Bluetooth script gets silence.

The sound bank

See the sound bank for all 2,634 known ids: 2,477 files on the gun plus 157 app-listed ids whose files are missing. The searchable table includes AI categories and acoustic analysis, transcripts, confirmed uses, by-ear review notes, availability, and community labels from the LaserTagMods BRX Audio sheet.

Custom sounds over USB

The AUDIO folder. Hold SELECT while you power on with a USB cable attached, and the tagger becomes a disk drive. You get a firmware file at the root and an AUDIO folder of per-sound files: replace a file, replace a sound. This is Battle Company's own update path, confirmed in their Extended User Guide, and the community has used it for Star Wars packs for years.

Back up the whole AUDIO folder before you change anything. The originals belong to Battle Company, and the factory restore is their USB updater package (see Firmware updates and factory restore). Copying files is slow, so budget up to an hour per 250 MB. Don't unplug early.

Swap a sound

  1. Power the tagger off, then connect the micro-USB Programming Port (not the charging port) to a computer.
  2. Hold SELECT and switch the gun on. It makes no startup sound, and that silence is how you know you are in disk mode. A normal power-on never exposes the drive.
  3. Open the removable disk that appears (Windows or macOS), with a .BIN at the root and an AUDIO folder. On older non-logo guns, tap SELECT a few times after entering if nothing shows.
  4. Copy the entire AUDIO folder to your computer as a backup.
  5. Name your replacement file <ID>.LTP, using the sound id from the bank (e.g. R02.LTP replaces the M4 fire sound, NA0.LTP the death beep).
  6. Drag it into AUDIO, choose overwrite = yes, and wait for the copy to finish.
  7. Eject the disk, power-cycle, and test with the on-gun menu (or $PLAY,<id>,4,6,,,,,* over Bluetooth).

File facts

ItemValue
Naming<ID>.LTP, one file per bank id. Known community swaps: NA0.ltp death loud-beep, VA3.ltp scream, VA5.ltp yell (copy or rename one over another to change the death cue).
Audio encodingHeaderless raw PCM, signed 16-bit little-endian, mono, 44,100 Hz. An .LTP file has no WAV header.
Which files are which weaponThe Callsign-app gun sounds use different file names from the default (on-gun menu) weapon files. Replacing one set won't change the other. Default guns to target for the menu game: SR-100, TAC-87, SMG-x3, MG7.
Firmware v4.30+Needs a complete new audio-file set in AUDIO. After that update, old packs don't line up.

What people build with this

Policy note. Swapping files in AUDIO changes stored content, not firmware. It is the same mechanism Battle Company's updater uses, and it is reversible. Open BRX's own hard rule is "never modify stock firmware", and sound swaps sit comfortably inside it.

Firmware updates and factory restore

One port, one .BIN. Firmware for the tagger, headset, hatchet, shield and sidearm all update the same way: enter USB disk mode, then replace the file at the root. Battle Company's updater package is also your factory restore, for both firmware and sounds.

Update tagger firmware (Battle Company's procedure, restated)

  1. Get the current firmware package from Battle Company. We do not host a copy, and we have no permanent address for the download itself, so ask them for the current package rather than reusing an old file.
  2. Switch the gun off, plug the USB cable into the Programming Port, then hold SELECT and switch on. There is no startup sound, and a disk appears.
  3. Delete the existing .BIN at the root of the disk.
  4. Copy the new .BIN to the root. Don't touch AUDIO unless the release notes say the audio set changed.
  5. Eject and power-cycle. Non-logo (older) guns wait about 10 s and then announce "upgrade complete".

Update a headset or accessory (hatchet, shield, sidearm)

  1. Hold the device's PROGRAM button (a pinhole) while you power it on.
  2. Replace the root firmware file exactly as above, once it shows up as a USB disk.

Firmware v4.30 was a "makeover" release. The community reports that it wipes on-gun config, breaks headset pairing and Callsign until you re-run setup, and requires a completely new audio-file set in AUDIO. Gen-1 guns need an extra step after flashing (reboot, then press SELECT three times). Read the release notes and back up AUDIO first.

Known issues and Battle Company-verified fixes

Factory restore

ItemValue
Restore packageBattle Company's USB updater package is the reference firmware .BIN plus the matching AUDIO set. Restore both from that package and a tagger returns to stock, whatever packs were installed.
Your own backupKeep your own backup of AUDIO from before any change. It is faster than a full restore, and it preserves the exact set your firmware version expects.

Open BRX never modifies stock firmware. All of its control runs over the Bluetooth serial protocol. So a tagger running Open BRX is always on Battle Company's firmware, and always restorable with Battle Company's updater.

Volume

30 is silence. The gun menu offers volume 1-5. Over Bluetooth the same control is a 0-100 scale. On that scale, the gap between "quiet" and "you hear nothing" is smaller than you would think.

The scales, side by side

ControlRangeNotes
On-gun menu (SELECT to settings)1-5Remembered per game mode as the new default
Bluetooth $VOL,<0-100>,0,*0-100 (MaxMusicVolume = 100)Sent by every app on connect and again at game end

Levels

30 is not "quiet"; it is silent for weapon audio. Measured with a microphone harness: at volume 100 the gun's sounds peak at 7-37 times the room noise floor, and at 30 nothing rises above room noise. Volume 45 is barely audible. Use 65 or higher to hear a tagger reliably. No absolute SPL figure exists for any of these values.

Safety. The boot chime plays at the gun's stored level before any host can lower it. A gun last used at 100 is loud at the next power-on. Set the volume down before you switch off if kids or a quiet venue are next. Voice lines and the death beep are uncomfortable held to the ear at 100. The official iOS app ships 69 for a reason.