Sparrow Chrono

Loading chronograph…

Chronograph

How a phone microphone measures arrow speed

A phone chronograph measures arrow speed acoustically: it timestamps the sound of the shot and the sound of the arrow hitting the target, subtracts the time that impact sound needed to travel back down the range to the phone, and divides the known distance by what is left. No light gates, no sky screens, no rail across the front of your bow. The only hardware is the microphone already in your pocket.

The subtraction is the part that matters, and it is the part that a naive stopwatch approach gets wrong. Sound is fast but it is not instant, and over an archery range the return trip is a large fraction of the arrow's flight time. Skip that correction and every reading you take will be roughly a fifth too low.

The measurement, step by step

Three inputs, one interval, one correction:

  1. Distance to target. Rangefind it. Do not pace it. A 1% error in distance is a 1% error in speed, straight through — this is by far the largest controllable error in the method.
  2. Phone-to-bow distance. How far the phone sits from the shot, in feet. Small, but it shifts the moment the shot sound reaches the microphone.
  3. Air temperature. The speed of sound depends on temperature and almost nothing else at range distances. Get this wrong and the correction is wrong.
  4. The interval. The microphone hears the shot, then hears the impact. That raw gap is arrow flight time plus the sound's return trip.
  5. The correction. Subtract distance divided by the speed of sound. What remains is true flight time. Distance over flight time is the average speed across the flight.
  6. The solve back to launch speed. Average speed is not muzzle speed — the arrow was faster at the bow and slower at the target. The tool solves back through a drag model to report launch velocity, which is the number your sight tape and your ballistics actually need.

Why the sound-return correction is not optional

Because both the arrow and the returning sound travel the same distance, the uncorrected reading is wrong by a fixed proportion no matter how far away the target is. Uncorrected, you are measuring the combination of the two speeds, which always lands well below the truth.

Actual launch speed Uncorrected acoustic reading (70 °F) Error
250 fps about 205 fps −18%
280 fps about 224 fps −20%
300 fps about 237 fps −21%
320 fps about 249 fps −22%
350 fps about 267 fps −24%

These are arithmetic, not measurements — they are what the numbers must be if you forget the correction. Note that the faster your bow, the worse the uncorrected error gets, because the sound's fixed return time becomes a larger share of a shorter flight.

Speed of sound, and the delay it costs you

Sound in dry air travels at roughly 1087 fps at 32 °F and gains about 1.1 fps for every degree Fahrenheit above that. Humidity and pressure move it far less than temperature does, which is why the tool asks for air temp and nothing else.

Air temp Speed of sound Return delay, 20 yd 40 yd 60 yd 80 yd
20 °F 1074 fps 56 ms 112 ms 168 ms 224 ms
40 °F 1096 fps 55 ms 110 ms 164 ms 219 ms
60 °F 1117 fps 54 ms 107 ms 161 ms 215 ms
70 °F 1128 fps 53 ms 106 ms 160 ms 213 ms
80 °F 1139 fps 53 ms 105 ms 158 ms 211 ms
100 °F 1160 fps 52 ms 103 ms 155 ms 207 ms

Put that beside a real flight: an arrow leaving at 280 fps covers 40 yards in roughly 429 ms, while the impact sound needs about 106 ms to get back to you at 70 °F. The correction is a quarter of the flight time. It is not a rounding error.

The same table explains the tool's validity window. Any interval shorter than the sound-return time for your entered distance cannot be a real shot — it is a door, a cough, or a second bow on the line — and gets rejected rather than averaged in.

Why the chronograph lives on its own page

The rest of The Forge runs inside a sandboxed iframe. A sandboxed document served without same-origin privileges is treated by the browser as an opaque origin, and browsers refuse microphone access in an opaque origin regardless of what any permission attribute says. That is a browser security rule, not a setting we can flip.

So the chronograph is a plain page on the storefront origin instead of a tab inside the app, and it hands its result back to The Forge through your browser's local storage. Open The Forge in the same browser afterwards and the reading is waiting. Two consequences worth knowing: the page must be loaded over HTTPS, and it will not work if you have somehow embedded it in a frame.

Reading a string of shots

One shot is a data point, not a chronograph reading. Shoot a group and read the aggregate.

Readout What it tells you
Session average launch speed The number to feed a sight tape or a ballistic solve.
ES (extreme spread) Fastest minus slowest in the string. Uses only two shots, so it grows as you shoot more.
SD (standard deviation) Consistency across the whole string. Better behaved than ES, and the honest measure of whether your bow, release and arrows agree with each other.
Flagged outliers Intervals outside the valid shot window for your distance and temperature. Shown, but held out of the average.

Practical hygiene: put the phone where it hears the shot cleanly and not in your quiver; keep other apps off the microphone, because the operating system will hand it to only one at a time; use the same target face and the same arrow for the string; and re-enter the temperature if you shot the first half at dawn and the second half in the sun.

One honest caveat on the drag solve. Opened cold, this page has no build loaded, so it re-solves the same measured shot times against a generic hunting arrow's drag. Open it inside The Forge with your actual build and the identical timings resolve against your own shaft, point weight and fletching — which typically moves the reported launch speed by a small amount at normal chronograph distances. Same measurement, better model.

Common questions

How does a phone chronograph measure arrow speed?

It times the interval between the sound of the shot and the sound of the arrow striking the target, subtracts the time the impact sound took to travel back to the phone, and divides the rangefound distance by the remaining flight time. It then solves that average speed back to launch velocity through a drag model.

Do I need to know the air temperature?

Yes. The speed of sound rises about 1.1 fps per degree Fahrenheit, and the whole correction depends on it. Entering a summer temperature on a winter morning biases every reading in the string the same direction.

Why does the tool insist I rangefind the distance?

Because a 1% distance error becomes a 1% speed error with no attenuation at all. Pacing a 40-yard shot to within a yard is a 2.5% error, which is larger than any other error in the method.

Why can't the chronograph run inside The Forge app?

The app runs in a sandboxed iframe, which browsers treat as an opaque origin, and microphone access is refused in an opaque origin. The chronograph therefore has to be a standalone page on the storefront origin. It passes its result back to the app through local storage.

Is the reading launch speed or average speed?

The raw measurement is average speed over the flight. The reported number is launch speed, solved back through a drag model, because that is the input trajectory and sight-tape math expect.

How many shots should I take?

Enough for the standard deviation to stop moving. A single shot tells you almost nothing about your bow; a string tells you both the average and how repeatable it is, and the repeatability is often the more useful finding.

Will it work in a noisy environment?

It depends on whether the shot and the impact stand out against the background. The valid-shot window rejects intervals that are physically impossible for your distance, which catches most stray noise, but a busy line with several archers shooting at once is a hard environment for any acoustic method.

Sparrow Chrono is a free tool from The Forge by Sparrow Expeditions. The formula stack behind it is documented on our Methods page. Built by archnerds, for archnerds.