01Features
Training
- Eight training modes — Boosts, Cuts, Mixed, Shelves, Pass Filters, Sweep, How Much?, and Match EQ — peaks, dips, shelves, filter cutoffs, free-form location, gain amounts, and dialling in a whole bell. More
- Explore — A free-play EQ: drag a bell, shelf, or pass filter on the graph and hear it live, with a guide to what each region sounds like. More
- Adaptive difficulty — Each mode has its own level: 3 correct in a row levels up, 2 wrong levels down. More
- Gain and Q controls — Boost/cut amount (1–18 dB) and bell width (Q 0.5–8), applied live, even mid-trial. More
- Instant A/B comparison — EQ and Flat switch without a click or restart, so both continue from the same point. More
- Frequency response graph — Every candidate curve is drawn during a trial and the hidden one is revealed after you answer; buttons sit under their curves. EQ regions are shaded and named, and a cursor readout shows the frequency, note, and region under the mouse. More
- Live spectrum — A faint real-time spectrum of what's playing behind the curves. During a trial it only shows the Flat signal (or Match EQ's Yours) until you answer, so it can't give the EQ away. More
- Sweep scoring — Drag on the graph to the frequency you hear; scored by octave error with a tolerance that tightens by level, and near misses earn partial points. More
- Answer labels — A verdict and points, then the answer with its note, filter type, or (in Sweep and Match EQ) your error, and its EQ region. More
- Auto-play EQ — Optionally starts each trial playing the EQ straight away.
- Focus weak bands — Optionally drills the octaves you miss most often. More
Audio
- Generated sources — Pink noise (recommended), white noise, and synthesized drum and band loops, all generated in the browser. More
- Your own music — Upload MP3, WAV, FLAC, OGG, or anything else your browser can play. More
- File details — The file's format, original sample rate, bit depth, channels, average bitrate, and length. More
- Position and loop — Seek within an uploaded track and loop an A/B section. More
- Volume and limiter — Master volume, and a limiter so large boosts never clip. More
Progress
- Scores — Points weighted by difficulty, accuracy, streaks, your last 10 answers, and a per-mode breakdown, for the session or all time. More
- Weak-spot strip — Accuracy per octave, shown under the graph. More
- Saved between visits — Levels, settings, and stats are kept in your browser. More
- Resets — Reset the sliders to defaults, reset your progress, or clear all saved data. More
Everything else
- Keyboard shortcuts — 1–9/0 pick bands, ← → step, ↑ ↓ switch boost/cut in Mixed and Shelves, Space toggles EQ/Flat, Enter checks or advances.
- Share links — Copy a link that recreates a challenge: mode, level, gain, Q, generated source, and for Sweep its boost/dip direction. More
- Light and dark themes — System (the default) follows your device; you can also pick Light or Dark, and your choice is remembered.
- Installable and offline — Install it as an app and keep training without a connection. More
- Private — No account, no server: your audio and data never leave your browser. More
02Why EQ Ear Training Works
Hearing is trained through repeated exposure with immediate feedback. EQ ear training presents a controlled, repeatable stimulus — the same source with and without a filter — and asks the listener to identify what changed. Over time the brain learns to associate the timbral character of a peak, dip, shelf, or roll-off with a frequency region, and that skill transfers to real mixing.
The A/B toggle (EQ vs. Flat) is the core mechanic. Switching between the filtered and unfiltered signal lets the auditory system isolate the change; without the flat reference there is no perceptual anchor. FreqRoom switches between the two without restarting playback (see Signal Chain), so both sides of the comparison continue from the same point in the audio.
03Training Modes
Every mode hides one filter and asks you to identify it. They differ in the filter type, what you answer, and how difficulty scales:
In the mode picker, modes that differ only in direction or filter type share a card with a row of keys along its bottom: Bands (Boosts, Cuts, Mixed) and Filters (Shelves, Pass Filters). Sweep's card has Boost and Dip keys that set its direction. How Much?, Match EQ, and Explore have a card each.
| Mode | Hidden filter | You answer | Candidates span | Levels |
|---|---|---|---|---|
| Boosts | peaking, +gain | band | 20 Hz – 20 kHz | 2–15 bands |
| Cuts | peaking, −gain | band | 20 Hz – 20 kHz | 2–15 bands |
| Mixed | peaking, ±gain | band and direction | 20 Hz – 20 kHz | 2–15 bands |
| Shelves | low/high shelf, ±gain | corner and direction | 60 Hz – 10 kHz | 2–8 corners |
| Pass Filters | high-pass or low-pass | cutoff frequency | HP 40 Hz – 1 kHz, LP 1 – 16 kHz | 2–8 cutoffs |
| Sweep | peaking, ±gain | any frequency, by dragging | 40 Hz – 16 kHz | 1–5 (tolerance) |
| How Much? | peaking at a marked frequency | its gain | 60 Hz – 12 kHz | 1–6 (2–12 gain choices) |
| Match EQ | peaking, ±3–12 dB | frequency and gain, by dragging your own bell | 40 Hz – 16 kHz, ±12 dB | 1–5 (tolerance) |
In Shelves, corners below 1 kHz are low shelves and corners above are high shelves; the direction (boost or cut) is random, and you answer it with the corner using the boost and cut rows. In Pass Filters the Gain slider has no effect.
How Much? turns the question around: the bell's frequency is marked on the graph and you pick its gain from a row of dB keys. The choices per level are:
| Level | 1 | 2 | 3 | 4 | 5 | 6 |
|---|---|---|---|---|---|---|
| Choices (dB) | +3 +9 | +3 +6 +9 | +3 … +12, step 3 | +2 … +12, step 2 | ±3 … ±12, step 3 | ±2 … ±12, step 2 |
Match EQ hides a bell anywhere from 40 Hz to 16 kHz with a gain of ±3 to ±12 dB (in 1.5 dB steps). You drag your own bell on the graph — left and right for frequency, up and down for gain — and compare Target (the hidden bell), Yours, and Flat; both bells use the Q fader. Your guess counts when it is within the level's tolerance on both axes:
| Level | 1 | 2 | 3 | 4 | 5 |
|---|---|---|---|---|---|
| Frequency | ±1 oct | ±⅔ oct | ±½ oct | ±⅓ oct | ±⅙ oct |
| Gain | ±4 dB | ±3 dB | ±2.5 dB | ±2 dB | ±1.5 dB |
In both, the hidden bell carries its own gain, so the Gain slider has no effect.
Explore sits after the eight modes and isn't scored. You drag one filter across the graph — left and right set the frequency, up and down the gain (±18 dB) — and pick its type: bell, low or high shelf, high-pass, or low-pass. The bell uses the Q fader. The engine retunes the filter live while EQ plays, and a guide under the graph names the region, the nearest note, and what a boost or cut there tends to sound like (for example, boxy for a low-mid boost, dull for a treble cut). Nothing is recorded to your progress.
04Band Placement
Pitch perception is roughly logarithmic: each octave doubles the frequency, and octaves feel similar in size. Candidate frequencies are therefore spaced evenly on a logarithmic axis. At level n the mode's span [lo, hi] is divided into n equal slices in log space, with one candidate at the geometric centre of each:
The geometric centre of a slice [a, b] is √(a·b), its midpoint in log space, so candidates sit an equal number of octaves apart and are rounded to the nearest hertz. For the full 20 Hz – 20 kHz span (10 octaves), level 2 places candidates 5 octaves apart and level 15 places them 2/3 of an octave apart.
Because the spacing is even on the graph's log axis, the answer buttons are laid out as n equal columns inset to the plot area, so each button sits directly under its curve.
05The Peaking EQ Filter
Boosts, Cuts, Mixed, and Sweep use a peaking EQ — a symmetric bell centred on a frequency, the most common filter in any DAW — implemented with the Web Audio API's BiquadFilterNode set to type: "peaking".
Gain (1–18 dB)
Sets the height of the bell. Decibels are logarithmic: +6 dB doubles the amplitude at the centre frequency, +12 dB is about 4×, and +18 dB about 8×; −6 dB halves it. Perceived loudness grows more slowly than amplitude, so a boost sounds less dramatic than those ratios suggest. Beginners should start at 12 dB or more and lower the gain as their ears improve.
Q (0.5–8)
Q sets the width of the bell. For a peaking filter, the bandwidth in octaves between the half-gain points (where the boost in dB is half its peak) is approximately:
| Q | 0.5 | 1 | 1.4 | 2 | 2.9 | 4.3 | 8 |
|---|---|---|---|---|---|---|---|
| Bandwidth | 2.5 oct | 1.4 oct | 1 oct | 0.7 oct | ½ oct | ⅓ oct | 0.18 oct |
Broad bells (low Q) change more of the spectrum and are easier to hear; narrow ones (high Q) are much harder. The default of 1.4 is about one octave wide.
Coefficients
The biquad coefficients follow Robert Bristow-Johnson's Audio EQ Cookbook, which the Web Audio specification adopts:
Here f₀ is the centre frequency and fs is the AudioContext's sample rate — usually 44.1 or 48 kHz, set by the output device.
06Shelf and Pass Filters
Shelves
lowshelf and highshelf filters lift or lower everything below or above a corner frequency. Web Audio ignores Q for shelves and fixes the slope at S = 1, the steepest slope without overshoot; at the corner the gain is exactly half the shelf gain in dB. With A and ω₀ as above:
High-pass and low-pass
For highpass and lowpass, Web Audio reads Q in decibels of resonance rather than as a plain ratio. FreqRoom uses Q = −3.01 dB, which is a Butterworth response (linear Q = 1/√2 ≈ 0.707): maximally flat in the passband, −3 dB at the cutoff, then rolling off at 12 dB per octave.
07Sweep Scoring
Sweep mode has no band buttons: you pick the direction (a boost or a dip) with the Boost and Dip keys on its card, then drag a marker across the graph to where you hear it (← and → nudge it by a semitone, 1/12 octave). The hidden frequency is drawn from 72 log-spaced points between 40 Hz and 16 kHz. Your answer is scored by its distance from the true frequency in octaves:
A guess counts as correct when the error is within the level's tolerance, which tightens as you level up:
| Level | 1 | 2 | 3 | 4 | 5 |
|---|---|---|---|---|---|
| Tolerance | ±1 oct | ±⅔ oct | ±½ oct | ±⅓ oct | ±⅙ oct |
±⅙ octave is two semitones either side. After answering, the graph draws the true curve and a bracket from your marker to it, labelled with the error.
Points (see Points and Scoring) give partial credit: full points within the tolerance, fading linearly to zero at three times it. The level still only moves on the pass/fail result.
08The Frequency Response Graph
The graph evaluates each biquad's transfer function H(z) on the unit circle (z = ejω), giving the steady-state gain in dB at each frequency. With normalised coefficients (each divided by a0):
Curves are sampled at 301 log-spaced points from 20 Hz to 20 kHz. The graph uses the exact descriptor that is sent to the audio engine, and matches BiquadFilterNode.getFrequencyResponse for every filter type, so what you see is what you hear.
During a trial every candidate is drawn in grey — both directions in Mixed and Shelves — and after you answer, the hidden filter is revealed in colour: amber for boosts, blue for cuts and pass filters. The dB axis is ±12 dB and widens in 6 dB steps (to ±18 dB) when the gain exceeds 12 dB, so curves are never clipped. The revealed curve rises out of the 0 dB line.
The plot is divided into the seven EQ regions used in the answer labels (see Note and Region Labels), with alternate regions faintly shaded and named along the bottom. With a mouse, a hairline follows the pointer and the top-left readout shows the frequency, nearest note, and region under it (and the gain, where dragging sets one).
Live spectrum
Behind the curves, a soft live spectrum shows what's playing. An AnalyserNode sits inline after the EQ/Flat mix (FFT size 16384, about 3 Hz per bin at 48 kHz, smoothing 0.8). Each of 160 log-spaced points averages the bins' power over a third of an octave, with every bin weighted by f / 1 kHz — a +3 dB/octave tilt, so pink noise reads flat and an EQ change stands out as a bump. Points are eased from frame to frame in power (averaging in dB would read low where there are few bins), and the display is centred on the average level from 100 Hz to 10 kHz. Real material varies far more than an EQ does, so the spectrum is drawn at about three-quarters of the curves' scale and rounds off towards the plot's edges (a tanh soft limit) instead of flat-topping.
Because the spectrum would show where a hidden EQ is, during a trial it only shows while Flat plays — your source with no EQ — or Match EQ's Yours (your own bell), and only after that has played for half a second, since the analyser's 0.34-second window still holds the hidden EQ's sound just after switching. Once you answer it shows for EQ too, so you can watch the change. In Explore it's always on. The spectrum button (the bars icon beside Back and Share, once a mode is open) turns it off.
09Adaptive Difficulty
Each mode keeps its own level, which sets the number of candidates (or, in Sweep and Match EQ, the tolerance). Levels change on consecutive-answer streaks:
2 wrong in a row → level down
A single wrong answer resets the correct streak but doesn't drop the level, so one slip isn't punished. The asymmetry (3 to advance, 2 to drop) keeps you working close to your limit. Peak modes run from 2 to 15 bands, Shelves and Pass Filters from 2 to 8 (closer corners or cutoffs become impractical to tell apart), Sweep and Match EQ from level 1 to 5, and How Much? from 1 to 6.
10Points and Scoring
Accuracy alone can't compare trials: picking 1 of 2 bands is a coin toss, picking 1 of 15 is not. So each correct answer earns points for how many answers were possible — 10 points per bit, where a bit is one doubling of the choices:
Choices is the band count, doubled in Mixed and Shelves (each band has a boost and a cut row), or the number of dB keys in How Much?. For Sweep it is how many tolerance-wide windows fit across its 40 Hz–16 kHz range (about 8.6 octaves ÷ 2 × tolerance); Match EQ multiplies that by the windows across its ±12 dB gain range (24 dB ÷ 2 × gain tolerance). Credit is 1 for a correct answer and 0 for a wrong one; Sweep's fades from 1 at the tolerance to 0 at three times it, and Match EQ takes the weaker of its frequency and gain credits, each faded the same way. Points are scored at the level the trial was played at, before any level change.
| Trial | 2 bands | 4 bands | 8 bands | 15 bands | Mixed, 15 | Sweep 1 | Sweep 5 | How Much? 6 | Match 1 | Match 5 |
|---|---|---|---|---|---|---|---|---|---|---|
| Points | 10 | 20 | 30 | 39 | 49 | 21 | 47 | 36 | 37 | 77 |
The score panel shows the points total, accuracy, the current and best streak of correct answers, lamps for the last 10 answers, and a row per mode played: current and best level, correct count, points, and Sweep's and Match EQ's average error (octaves, and dB for Match EQ). Session covers this visit; Lifetime is saved with your progress. Scores saved before points existed keep their totals and start earning points from the next answer.
11Progress and Focus Practice
Every answer is recorded against the hidden frequency's octave bucket. There are ten buckets centred on the standard octave bands (31.5, 63, 125, 250, 500 Hz, 1, 2, 4, 8, 16 kHz); a frequency belongs to the nearest one:
Stats are kept separately for peak (Boosts, Cuts, Mixed), shelf, pass, Sweep, How Much?, and Match EQ modes. The strip under the graph's frequency axis shows accuracy per bucket — red below 50%, amber below 80%, green above — once a bucket has at least 3 answers; hovering a segment shows the exact count.
With Focus weak bands on, the hidden frequency is chosen with a weight per candidate instead of uniformly:
A band you always miss is therefore about 7.7× as likely as one you always get right (1.15 vs. 0.15), while untried regions still come up regularly.
12Noise and Synthesized Loops
Pink noise has a 1/f power spectrum: power per hertz falls by 3 dB per octave, so every octave carries equal total power. Because hearing resolves frequency on a roughly logarithmic scale, this makes every region about equally prominent, which is why pink noise is the standard signal for acoustic measurement and the recommended source here.
White noise has equal power per hertz. Each octave spans twice as many hertz as the one below it, so each octave carries 3 dB more power — which is why white noise sounds bright and hissy.
FreqRoom generates pink noise with Paul Kellet's refined filter: white noise is fed through a bank of first-order low-pass filters whose outputs are summed to approximate the −3 dB/octave slope to within about ±0.05 dB across the audio band.
Here w is a uniform random sample in [−1, 1]. The b5 term, with its negative coefficient, and the one-sample-delayed b6 term correct the response at the top of the spectrum; the 0.11 factor sets the level (peaks around 0.9), and output is clamped to ±1. White noise is uniform random samples scaled by 0.45. Both are generated as 30-second stereo buffers with independent channels and loop seamlessly.
Noise is ideal for learning, but music is what you'll EQ. The Drum Loop and Band Loop are synthesized in plain JavaScript on demand, so no audio files ship with the app. Each is 8 bars at 100 BPM (19.2 s), stereo, with light swing:
- Kick: a sine whose pitch drops from 130 to 45 Hz, plus a 4 ms noise click.
- Snare: first-difference (brightened) noise over a 190 Hz tone body.
- Hats: second-difference noise, hiss mostly above 6 kHz; the last 8th of each bar opens.
- Bass (Band Loop): a sawtooth through a 500 Hz one-pole low-pass, in 8ths on the chord roots.
- Pad (Band Loop): C–Am–F–G triads, each note two sawtooths detuned ±7 cents and panned apart, through two 2.2 kHz one-poles with a slow attack.
Every note is written at its start position modulo the loop length, so tails that run past the end wrap to the start and the loop point is seamless. A seeded random generator makes each render identical. Both loops are scaled toward an RMS of 0.16, close to the pink noise, with peaks held under 0.95.
13Uploaded Audio
Uploaded files are decoded with decodeAudioData, which resamples them to the AudioContext's rate. The original format details are therefore read from the file header instead:
| Format | Where the details come from |
|---|---|
| WAV | fmt chunk: channels, sample rate, bit depth (including 32-bit float and WAVE_FORMAT_EXTENSIBLE) |
| FLAC | STREAMINFO block: bit-packed sample rate, channels, and bit depth |
| MP3 | first MPEG frame header after any ID3v2 tag: MPEG version, sample rate, channel mode |
| Ogg Vorbis / Opus | identification header in the first page (Opus reports its original input rate) |
| M4A / other | format name only |
The bitrate shown is the average over the whole file — size × 8 ÷ duration — which is the meaningful figure for variable-bitrate files. Set A and Set B loop a section via the source node's loopStart/loopEnd; playback wraps inside the region, and seeking outside it jumps back to its start.
14Web Audio Signal Chain
All audio processing runs in the browser with the Web Audio API — no server and no audio libraries. The node graph is built once and reused:
Switching between EQ and Flat crossfades the two parallel paths with setTargetAtTime (time constant 5 ms, settled in about 25 ms) rather than restarting playback, so A/B comparison is click-free and never loses its place. Gain and Q changes ramp the filter parameters in place, and volume ramps the master gain. Stopping or seeking fades the current source's own voice gain out over 50 ms, so a seek crossfades between the old and new positions.
Large boosts on dense material can exceed full scale, and digital clipping would add distortion that gives the answer away. The compressor acts as a limiter: threshold −1 dBFS, ratio 20:1, 0 dB knee, 1 ms attack, 100 ms release. The noise sources at normal volume stay below the threshold unless boosted, and the EQ and Flat paths share the same limiter, so the comparison stays fair.
15Note and Region Labels
After each answer the trainer's header shows a Correct or Incorrect verdict and the points earned (Sweep and Match EQ near misses earn some even when incorrect). The line below spells out the answer in three parts: the answer itself, then what it was or how far off you were, then its EQ region:
| Mode | Answer | Then |
|---|---|---|
| Boosts, Cuts, Mixed | frequency | nearest note |
| Shelves, Pass Filters | frequency | filter type (e.g. low shelf cut, high-pass) |
| Sweep | frequency | your error in octaves |
| How Much? | gain | its frequency |
| Match EQ | frequency and gain | your error in octaves and dB |
Note name
The nearest MIDI note uses A4 = 440 Hz (MIDI note 69) as the reference:
EQ region
16Privacy, Storage, and Offline Use
FreqRoom has no server and sends nothing anywhere. Uploaded files are read locally in the browser. Your settings (theme, volume, gain, Q, switches, spectrum on/off) and progress (level per mode, lifetime score, per-octave stats) are saved in the browser's localStorage under a freqroom: prefix. Reset progress clears the progress only; Clear saved data removes every freqroom: entry. If storage is unavailable (for example in some private-browsing modes), the app works with defaults.
Share links carry only the challenge settings in the URL (mode, level, gain, Q, generated source, plus the boost/dip direction for Sweep). A service worker caches the app so it can be installed and used offline: pages load from the network when available, falling back to the cached copy, and other files load from the cache and refresh in the background.
17Learn More
Guides, tools, and deeper reading on EQ, hearing, and audio. All external links open in a new tab.
EQ and listening
A practical guide to equalizers for audio playback, from beginner to experienced: filter types, gain, Q, and how to shape a sound.
The frequency ranges from sub-bass to brilliance, what lives in each, and how they sound when boosted or cut.
Harman's critical-listening training program, which inspired FreqRoom.
More ear training
Audio ear-training games and courses covering EQ, compression, and more.
Frequency ear-training app for learning to recognise bands by ear.
Tests how well you and your headphones or speakers place sounds in the stereo image.
Sound and signals
An interactive introduction to sound waves, frequency, amplitude, and harmonics.
A visual, interactive primer on digital signal processing: sampling, aliasing, and the Fourier transform.
Convert between Q, bandwidth in octaves, and cutoff frequencies; the site has many more audio calculators.
A free, rigorous online book from Stanford CCRMA on how digital filters like biquads work.
Sources
Canonical derivation of the biquad coefficients for peaking, shelf, and pass filters, and the Q-to-bandwidth relation.
Exact filter formulas the browser implements, including the fixed shelf slope and Q in dB for low-pass and high-pass.
Source of the refined pink-noise filter coefficients (Kellet), alongside the Voss-McCartney algorithm.
Original inspiration for the EQ ear-training approach and A/B comparison method.
Practical reference for AudioContext, audio-node graphs, and parameter automation.