FinishLine is in active development. Features and availability may change before general release.

How the acoustic start works

The device timestamps the gunshot itself rather than a human reaction to it, using the audio hardware's own clock, an impulse detector tuned to miss rather than guess, and two layers of calibration.

Technical7 min readUpdated August 18, 2026

The acoustic start exists to remove one specific error: the gap between a gun firing and a human registering that it fired. It is worth being precise about the claim, because it is easy to oversell.

It does not make the start more precise by milliseconds. It removes a bias of roughly 150 to 250 milliseconds, which also varies shot to shot. That bias is an order of magnitude larger than every other error in the system combined, so removing it is the single biggest accuracy improvement available. But the goal is deleting a human, not adding decimal places.

Timestamp the audio, not the detection

This is the idea the whole feature rests on, and it is not obvious.

A naive implementation notices a loud noise and records the time it noticed. That timestamp includes buffering, thread scheduling, and however long the detector took to decide, all of it variable.

Instead, the device keeps a ring buffer of the last second or two of audio, with each buffer carrying the timestamp the audio hardware assigned it on capture. When the detector becomes confident, it goes back into that buffer, finds the sample where the onset began, interpolates within the audio block, and stamps that.

The consequence is that detection confidence and timing precision are decoupled. The detector can take its time deliberating. However long it thinks, the timestamp it produces is the moment the sound arrived, accurate to well under a millisecond. Processing latency drops out entirely.

That timestamp is then mapped into the shared server-time domain every other device is on, so the gun is directly comparable to a finish captured on a phone 100 meters away. See how clock sync works.

Detecting a gunshot, not just a loud noise

A track is not quiet. Crowds, PA systems, and other events are all louder than the ambient floor, and some are louder than a distant pistol.

Loudness alone is therefore useless as a discriminator. What distinguishes a gunshot is its attack: a broadband transient that rises in under ten milliseconds. A crowd roar is loud but swells. A PA announcement is loud but has no impulse. So detection keys on:

  • Energy rise in a mid-to-high band, where the impulse lives, rather than overall level.
  • A steep attack slope — the rate of rise, not the height.
  • A noise floor tracked adaptively through the day, so the threshold follows a crowd that gets louder between the first heat and the finals rather than being set once and drifting out of date.
  • A high-pass filter to shed wind rumble and handling noise, which are loud at low frequencies and carry no useful signal.

After a candidate fires, a refractory window of roughly 150 to 300 milliseconds suppresses what follows. That window exists for echo: the slap-back off a grandstand or building arrives later and quieter than the direct path, and without suppression it reads as a second shot.

Biased toward missing

Below its confidence threshold, the detector does nothing and lets the manual tap carry the heat.

This asymmetry is intentional and worth stating as a design position rather than a tuning choice. A false negative costs one tap by an operator who is already standing there holding a gun. A false positive starts a race that has not started, corrupts every time in the heat, and has no clean recovery. The two errors are not remotely equal, so the gate is set to miss.

The cancel buffer

A detection is held briefly before it is transmitted, with a countdown and a cancel button, while a provisional clock runs.

The subtlety is that the hold is free. If it commits, it commits with the onset time, not the time the countdown expired. The delay buys a human veto over a suspicious detection without costing any accuracy at all.

Range, and why an air horn is worse

A blank pistol produces about 140 dB at a meter. In practice its impulsive attack stays detectable above field ambient out to roughly 30 to 60 meters, degrading with wind and crowd noise. Past about 60 meters, both the signal-to-noise ratio and the sharpness of the onset erode, and the honest answer is to fall back to manual.

The limiting factor is the attack, not the peak level. This is why an air horn is a worse start source despite being audible farther: it is loud but rises slowly, so it is both harder to detect against an adaptive threshold and fuzzier to place in time once detected. The same applies to electronic start systems played through speakers, which are band-limited by the speaker and rise more slowly than a pistol.

Propagation delay

Sound travels about 343 m/s, so roughly 2.9 milliseconds per meter. A listening device 30 meters from the starter hears the shot about 87 milliseconds after it was fired.

This is systematic, not random, which makes it both worse and better than noise: it biases every heat the same way, and it can be subtracted exactly if the distance is known.

Correction is optional and off by default, because most setups do not need it. It matters when the listening device is deliberately standing off from an independent starting official rather than sitting at the gun. When enabled, the distance is set once per event configuration rather than per heat, and applies to similarly configured heats afterward.

Calibration, layer one: manual

Generic detection is tuned for a pistol. Calibration teaches the device the source actually in use, and what the venue sounds like.

Profiles are kept per standoff band — 0, 10, 30, and 100 meters — because a gun's level at the line is nothing like its level 100 meters out, and one threshold cannot serve both. At arming, the profile nearest that heat's configured standoff is selected. Settings shows coverage as "N of 4".

The capture flow is built around a specific failure it is designed to prevent:

  1. Open calibration and fire the start device during a 10-second window.
  2. The app retains the audio and every candidate onset it heard, not just the loudest.
  3. You review the marks on a signal strip and tap the one that was the real start.
  4. A profile is built from that mark's level and the shape around its onset.

Step 3 is the point. An earlier version kept the loudest impulse automatically, which meant a misfire, a dropped case, or a slammed gate could silently become the profile the whole meet fired against. Making the operator disqualify the bad marks by hand is slower and correct.

Capture sensitivity is not firing sensitivity. Calibration listens permissively so a faint, distant gun still registers as a candidate worth showing you, with an attack qualifier so that quiet candidates only count if they rise fast. Live firing stays conservative. Being generous about what you show the operator is safe; being generous about what fires a race is not.

Calibration, layer two: automatic

Manual calibration is a setup-time snapshot. The automatic layer is opt-in and keeps learning from what the starter actually does during the meet, on the theory that the starter's own corrections are the best available ground truth.

Three signals, all of which are things the operator was going to do anyway:

What happenedWhat it meansAdjustment
An auto-start was cancelledToo sensitive; that was not the gunTrigger nudged up ~10%
A manual tap while armed and listeningToo insensitive; the gun fired and we missed itTrigger nudged down ~10%
An auto-start was left to commitCorrect at current sensitivityHold, and count it

The steps are small and symmetric, so one event nudges rather than jumps, and a single odd heat cannot swing the setting.

Three properties keep this from going wrong:

  • It composes, it does not replace. The order is shipped default → your manual profile, if you calibrated → the learned offset. A good manual calibration gives the learning a better starting point and it converges faster; a bad run of learning cannot erase the anchor.
  • It is one global offset, not per distance band. Starts are sparse, a few per meet, so per-distance buckets would gather too little evidence to learn anything before the season ended.
  • It is railed at both ends. The accumulated adjustment is clamped, and the resolved thresholds are clamped again independently. A run of one-sided events cannot drive sensitivity to where detection stops working, nor to where it fires on footsteps.

Settings shows the current state in plain terms — "More sensitive (+15%)" or "Baseline" — along with how many misfires and manual starts it has learned from, and a Reset learning action that returns it to the anchor. The learning is device-local.

The fallback ladder

Every layer degrades into the one below it, and the bottom of the ladder is a person:

  1. Acoustic detection stamps the onset. No human in the path.
  2. The starter taps manually when detection misses or is switched off. One human reaction, on the shared clock.
  3. No starter device at all — the finish operators trigger the start themselves, and the official gun time is derived from their taps.

The race is never waiting on any of this. If the gun goes up, the race goes, and the timing system's job is to catch up to what happened rather than to permit it.

Did this answer your question? If something here is wrong, missing, or out of date, tell us at support@finishlinetimer.com and we’ll fix it.

Search the knowledge base