Beat frequency of two waves calculator
Two nearby sinusoidal frequencies can combine to produce a repeating rise and fall in perceived loudness.
Run — free
That pulse is called a beat, and its rate is the absolute difference between the two frequencies. Enter both frequencies in hertz and this calculator returns the audible beat frequency in hertz, along with the values and formula used. It is useful for tuning instruments, checking laboratory wave experiments, planning oscillator detuning, and explaining interference. The result is deterministic: the order of the two frequencies does not matter, and equal frequencies produce a beat rate of zero.
Understand the beat-frequency formula
When two sinusoidal waves have frequencies that are close but not identical, their peaks repeatedly move into and out of alignment. At moments of stronger alignment, their amplitudes reinforce one another and the combined sound becomes louder. At moments of weaker alignment, they partially cancel and the sound becomes quieter. The repeating loud-soft pattern is heard as beats. Its rate is found with one direct expression: take the absolute value of the first frequency minus the second frequency. For example, waves at 440 Hz and 442 Hz produce a difference of 2 Hz, so a listener hears approximately two loudness pulses per second. Absolute value makes the result independent of input order: 442 minus 440 and 440 minus 442 describe the same two-hertz beat. If both waves have exactly the same frequency, the difference is zero and there is no repeating beat pattern caused by frequency mismatch. The calculator reports the ideal mathematical beat rate for two sinusoids. It does not simulate wave amplitude, phase, room acoustics, harmonics, or a listener’s hearing response, because none of those quantities is required for the basic frequency-difference result.
Enter frequencies and interpret the result
Provide frequency_1 and frequency_2 as finite, non-negative numbers measured in hertz. Decimal values are accepted, which is useful when a tuner or spectrum analyzer reports pitches such as 440.0 Hz and 440.7 Hz. The short aliases f1 and f2 are also accepted by the API. Both inputs must use the same unit; if your readings are in kilohertz, convert both to hertz before submitting them. The response repeats both accepted frequencies, returns beat_frequency, labels the result in Hz, and includes the absolute-difference formula. A beat_frequency of 0.7 Hz means the combined loudness rises and falls about seven times in ten seconds. Swapping the inputs does not change that answer. Values must not be negative, missing, infinite, or non-numeric. These checks prevent a malformed measurement from becoming a plausible-looking result. A successful API calculation costs $0.002 per item, while the browser calculation can run locally. For a meaningful audible-beat interpretation, the source frequencies should be sufficiently close that a listener perceives modulation rather than two clearly separate tones, although the numerical absolute difference remains defined for any accepted pair.
Apply beat frequency in music and wave experiments
Musicians and technicians use beats as a sensitive guide when tuning one pitch against a reference. A slow pulse indicates a small mismatch, and the pulse slows toward zero as the frequencies converge. In a physics laboratory, students can compare the calculated beat rate with pulses counted from tuning forks, speakers, or signal generators. Audio developers can use the same calculation to predict the modulation rate created by two deliberately detuned oscillators, helping them describe chorus-like movement or verify a synthesizer setting. The calculation is also useful when reviewing measured spectral peaks: two peaks at nearby frequencies imply an ideal beat rate equal to their separation. Always keep interpretation distinct from arithmetic. The returned number is the theoretical difference frequency, not a guarantee that every listener will hear discrete beats. Large separations may be perceived as two tones or roughness, unequal amplitudes can make modulation less obvious, and additional harmonics can create more complicated patterns. For controlled comparisons, use two stable sinusoidal sources at similar levels, record both measured frequencies in hertz, and compare the observed number of loudness maxima per second with the returned beat_frequency. Because the algorithm has no network, randomness, or clock dependency, identical inputs always yield identical output for repeatable worksheets and automated tests.
What you can do with it
Tune an instrument to a reference
Find how many beats per second should be heard between a measured note and a nearby reference pitch.
Check a wave-interference experiment
Compare the theoretical difference frequency with the modulation counted from two laboratory signal sources.
Plan oscillator detuning
Predict the ideal pulse rate created by two nearby synthesizer or audio-test oscillator frequencies.
FAQ
How is beat frequency calculated?
Subtract one wave frequency from the other and take the absolute value: beat frequency = |frequency_1 - frequency_2|.
What unit does the result use?
The inputs and result use hertz (Hz). Convert both inputs to the same unit before calculating.
Does the order of the two frequencies matter?
No. Absolute difference makes the result identical when the two input frequencies are swapped.
What happens when both frequencies are equal?
The beat frequency is zero hertz, meaning there is no repeating loudness beat caused by a frequency mismatch.
How much does the API calculation cost?
Each successful API item costs $0.002. The browser calculator can run locally for free.
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/trig/beat-frequency \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"frequency_1":440,"frequency_2":442}'const res = await fetch("https://api.kit.forhosting.com/trig/beat-frequency", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"frequency_1": 440,
"frequency_2": 442
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/trig/beat-frequency",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"frequency_1": 440,
"frequency_2": 442
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/trig/beat-frequency", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"frequency_1":440,"frequency_2":442}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"frequency_1":440,"frequency_2":442}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/trig/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
{
"frequency_1": 440,
"frequency_2": 442
}Example response
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "trig.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. |