Accuracy & methodology

How BeatTiming verifies every calculation.

Each tool shows its formula and states its limits. Before a release goes live, automated tests check the answers. The same tests can be run again to check the result.

Our calculation checks and limits

Version 23 verification9,717,735deterministic assertions
Test coverage1,667,709calculation scenarios

Last verified September 5, 2026. The test seed is 0x18acc0de. This fixed starting value lets us run the same set of random test cases again.

What those numbers mean

The total counts automated checks, not human reviews. Each check tests one condition in a fixed set of cases. Some checks compare an answer with a known value. Others run a calculation in reverse or compare it with a separate whole-number method. Tests also cover input limits. A failed check stops the release.

Calculator formulas and verification

BeatTiming calculator formulas and automated verification methods
Calculator groupCore relationshipHow it is checked
Tap tempoBPM = 60,000 ÷ estimated tap interval in millisecondsExact-tempo sweeps from 15–500 BPM, jitter trials at both endpoints, outlier handling and reset boundaries.
Note, delay, reverb and LFO timingnote ms = 60,000 ÷ BPM × division; Hz = 1,000 ÷ duration msReciprocal timing and frequency invariants across straight, dotted, triplet and extended note values.
Bars and loop BPMquarter-note equivalents = bars × numerator × 4 ÷ denominatorIndependent checks across 2/4 through 12/8, including compound meters, half-time, double-time and target-duration results.
Pitch, varispeed and beatmatchingspeed ratio = 2^(semitones ÷ 12); deck change = target ÷ source − 1Forward/reverse round trips, microscopic nonzero changes, deck-range boundaries and pitch-change direction.
Sample frames and PCM sizeframes = duration × sample rate; bytes = frames × channels × stored bytesInteger results are checked against decimal-rational BigInt references, including exact half-frame rounding and maximum inputs.
DJ set planningset time = tracks × play time − (tracks − 1) × overlapThe selected whole-track count must cover the set while one fewer track must fall short; spare tracks always round upward.
Harmonic mixingsame, relative and adjacent-circle relationships across 24 major/minor keysEvery key pair is checked in both directions, and each conservative shortlist must contain exactly four defined choices.

Documented formulas for every calculator

Precision and rounding policy

Tempo, pitch and frequency use JavaScript’s IEEE 754 double-precision numbers. These can have tiny rounding errors, so we do not call every answer exact. Tests allow only a small error close to the limits of that number format. The display adds decimal places when rounding would hide a real change or make a value outside a limit look valid.

Whole sample-frame counts, PCM file payload sizes, clock milliseconds and some other counts need stricter rounding. Where this matters, decimal inputs become exact fractions handled with BigInt whole-number math. A result exactly halfway between two sample frames rounds up. The tool rejects whole-number results that are too large to store safely.

Four layers of release testing

  1. Known answers.Checks use familiar values such as 120 BPM, one-octave shifts and common sample rates.
  2. Boundaries.Checks cover the smallest and largest inputs, invalid values, half-frame ties, deck limits, signed zero and nearby floating-point values.
  3. Stress invariants.A fixed-seed test set checks rules that should hold across note, bar, pitch, beatmatch, sample, loop, set, tap-tempo and key calculations.
  4. Published output.Checks inspect the finished pages. They cover default answers, formulas, metadata, canonical URLs, links, structured data and 404 pages that cannot be indexed.

Important limitations

Corrections and release policy

Changes to an equation must include matching tests and updated assumptions. Releases that change only page content still run the full calculation test suite. If we find an error, we correct the formula or text and add a test for it. We update this record before the change goes live.

Open the calculator directory