Beat frequency calculator
Two tones at 440 and 442 Hz beat twice per second: the beat rate is simply the gap between them. Enter both frequencies to get the beat, their average and which one is lower, ready for a tuning or lab table. Free in your browser.
- Free
- Runs in your browser
- No sign-up
- Your data stays on your device
Run — free
Worked example
- First frequency in hertz
- 440
- Second frequency in hertz
- 442
- Beat frequency
- 2
- Average frequency
- 441
- Lower frequency
- 440
- Upper frequency
- 442
When two pure tones of nearly equal frequency sound together, the ear often perceives a slow rise and fall in loudness called beats. Classic instrument-tuning checks include four hundred forty and four hundred forty-two hertz yielding a two-hertz beat, or equal frequencies yielding zero beats when the tones are already matched. When you later need period-to-frequency conversion, Doppler shifts, or wavelength from wave speed, treat those as separate landings rather than overloading this elementary beat-frequency page.
How two close tones create beats
Superposition of two pure sinusoids with equal amplitude and angular frequencies omega one and omega two produces a product identity: the combined waveform is a cosine at the average frequency multiplied by a slowly varying cosine envelope at half the frequency difference. The intensity maxima of that envelope arrive twice per envelope cycle, so the number of loudness beats heard per second equals the absolute difference of the two frequencies in hertz.
The absolute value matters because the ear does not care which oscillator sits slightly sharp or flat—only how far apart they are. When the two frequencies are identical, the beat rate is zero and the sound is steady; when they drift apart, the beats speed up and eventually become a roughness rather than a countable pulse. This identity is model-independent for pure tones of comparable strength: it does not require knowing phases, room reflections, or amplitude ratios to report the ideal two-tone beat rate.
Where beat frequency shows up in real work
Secondary-school and introductory college physics constantly assign tuning-fork and dual-oscillator labs that ask students to count beats and infer how far a string or fork sits from a reference pitch; a single trusted oracle that returns the absolute difference speeds grading and demo setup. Instrument technicians and piano tuners still listen for slow beats against a fork or electronic reference, then nudge tension until the beat rate falls toward zero.
Audio engineers and synthesizer designers map detune amounts in cents or hertz into expected beat rates for unison voices and chorus effects, and they need honest rejection of negative frequency fields rather than silent absolute-value coercion that hides bad automation data. Laboratory notebooks recording two function-generator readouts often convert the pair into an expected beat rate before comparing to a stopwatch count of intensity maxima.
If you later need period-to-frequency reciprocity, Doppler frequency shifts, simple-pendulum length from period and gravity, or spectral peak extraction, treat those as separate search intents and landings rather than overloading this elementary beat frequency calculator page.
What you can do with it
Tuning forks and music labs
Compute the expected beat rate between a reference pitch and a slightly sharp or flat tone so students can check stopwatch counts against theory.
Instrument and piano tuning
Convert two measured frequencies into the audible beat frequency technicians listen for when matching unisons and octaves.
FAQ
What formula does this beat frequency calculator use?
The response also includes the average frequency (f1 + f2)/2 and the lower/upper pair for lab tables.
What units should I use?
Both frequencies in hertz (Hz). Convert prefixes (kHz, mHz) yourself before calling. Beat frequency is returned in the same unit.
What does it cost?
The browser tool is free and runs locally.
How do I use beats to tune an instrument?
Play the string or fork against a reference pitch and listen for the slow pulse in loudness. Adjust the tension until the beats slow down and stop: zero beats means the two tones match.
Can one of the frequencies be zero or negative?
Zero is accepted and means one tone is silent, so the beat equals the other frequency. Negative values are rejected, because a sound frequency in hertz is a size, not a signed quantity.
Related tools
For developers — API access
Everything on this page is available programmatically. This section is for teams who want to wire it into their own systems; everyone else can just use the tool above.
API endpoint
Prefer to automate it? One authenticated POST creates the task; the result comes back by webhook or a signed link. The same capability also runs here on the web, by email and from Telegram — and soon from our app too.
Call it from your stack
curl -X POST https://api.kit.forhosting.com/phys/beat-frequency \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"f1":440,"f2":442}'const res = await fetch("https://api.kit.forhosting.com/phys/beat-frequency", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"f1": 440,
"f2": 442
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/phys/beat-frequency",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"f1": 440,
"f2": 442
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/phys/beat-frequency", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"f1":440,"f2":442}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"f1":440,"f2":442}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/phys/beat-frequency", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)Example request
{
"f1": 440,
"f2": 442
}Example response
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "phys.beat_frequency",
"status": "queued",
"_links": {
"result": "/tasks/tsk_…/result"
}
}The API is asynchronous: the call returns a task_id immediately and the result arrives by webhook. Polling is capped at 1 req/s per task.
Pricing
Published price — no tokens, no invented credits. A failed task is never charged.
Errors
| HTTP | Code | Meaning |
|---|---|---|
401 | unauthorized | Missing or invalid API key. |
402 | insufficient_balance | Your balance doesn't cover the task price. |
404 | unknown_type | That task type doesn't exist. |
429 | rate_limited | Too many requests. Use the webhook instead of polling. |
Technical notes
The beat frequency—the number of loudness maxima per second—is exactly the absolute difference of the two source frequencies: f_beat equals the absolute value of f1 minus f2, measured in hertz. This calculator accepts two non-negative finite frequencies in hertz, rejects negative values with a clear validation error, and returns the beat rate, the arithmetic average of the pair, and the lower and upper frequencies for lab tables.
How beat frequency works (f_beat = |f1 − f2|)
Written compactly, f_beat equals the absolute value of f1 minus f2. The implementation is deterministic floating-point arithmetic with no random seeds, no wall-clock timestamps, no network calls, and no model drift, so identical inputs always yield identical JSON. Both frequencies must be finite and non-negative; NaN, Infinity, missing fields, and negative values are rejected with invalid_input because ordinary acoustic frequency in hertz is a magnitude, not a signed spectral-analysis convention.
What you send and what you get back
Send two finite non-negative numbers under the fields f1 and f2, each in hertz. Both fields are required. Zero is allowed: a silent second oscillator simply returns a beat equal to the active frequency, which matches the absolute-difference formula. If you need period from frequency, wavelength from wave speed, or multipath interference beyond the two-tone beat rate, use a dedicated landing so this SEO intent stays sharp and the contract stays tiny. Aliases are accepted: frequency1, freq1, and f_a for the first tone; frequency2, freq2, and f_b for the second. Missing fields, non-numeric strings, NaN, Infinity, and any strictly negative frequency fail with invalid_input and are not charged. On success the response includes cleaned f1 and f2, beat_frequency equal to the absolute difference, average_frequency equal to the arithmetic mean of the pair, lower_frequency and upper_frequency as the min and max of the inputs, unit labels frequency_unit Hz and beat_frequency_unit Hz, plus formula and relation strings for worksheets. Classic checks include four hundred forty and four hundred forty-two hertz giving a two-hertz beat with average four hundred forty-one, equal frequencies giving a zero beat, and swapped order of f1 and f2 leaving beat_frequency unchanged. Pricing for successful API calls is the published base of $0.002 per item; validation failures do not consume prepaid balance.
Where beat frequency shows up in real work
Because this capability is a pure parse engine, API pricing is the published base of $0.002 per successful item and failed validation does not consume balance.
Integration use cases
Synth detune and dual-tone demos
Map detuned oscillator pairs to f_beat for UI labels and auto-graded physics or audio homework with identical browser and API results.
Technical questions
What happens if a frequency is negative?
The request fails with invalid_input. Ordinary acoustic frequency in hertz must be non-negative; the API does not silently take absolute values of bad inputs.
Does order of f1 and f2 matter?
No. Beat frequency uses the absolute difference, so swapping the two tones leaves f_beat unchanged. Average frequency is likewise symmetric.