About
Method, measured accuracy and sources
Sing is a vocal pitch trainer that runs in the browser. This page says how it finds a pitch, how accurate that measured, what it does with the sound from your microphone, and where its facts come from.
What Sing is
Sing is a vocal pitch monitor with a target-note mode, a vocal range test, exercises for singing scales and singing intervals against a reference, and pitch matching by ear. Any song in the labs.llc song book (five lists, 5,018 tracks) can be sent to it with Sing this. It is free, has no accounts, and is part of labs.llc, in the Sound room beside the chromatic tuner, which reads instruments. It was sing.com.im until 2026; every address there now answers one permanent redirect to its page here.
It reports pitch. It is not vocal coaching and not medical advice, and it makes no claim about what singing with it will do for a voice.
How the pitch is found
Up to 30 times a second the page takes the most recent block of sound from the microphone, 4,096 samples or about 85 to 93 thousandths of a second, and looks for the period at which the block repeats. The method is the normalised square difference function described in McLeod and Wyvill, “A Smarter Way to Find Pitch”: the block is compared with a shifted copy of itself at every shift in the search range, and the result is scaled so that a perfectly repeating sound scores 1. That score is the clarity figure the page prints.
The shift chosen is the first peak that reaches 85% of the tallest one, not the tallest, because the tallest is often at twice the true period and would name the octave below. The peak is then re-measured on a shorter, more recent slice of the block, so that a moving pitch is measured where it is now, and refined between samples with a parabola. A block quieter than −48 dBFS, or with a clarity under 0.55, is given no pitch.
Frames then pass through a tracker. A note has to begin with a clarity of at least 0.8 and may continue down to 0.55. The first frame of a note is held until a second agrees with it. A frame more than 350 cents from the ones before it is not believed until three frames in a row agree. The trace draws every frame that passes. The note name, the cents figure and the timers use the centre of the last nine frames: the midpoint, in cents, between the lowest and the highest of them.
The detector is the trainer’s own: it began as the tuner’s and was changed for a voice (a narrower range, two passes, a tracker that allows vibrato), so the two are separate files measured separately.
Your microphone and your privacy
The microphone opens only when you press Start microphone, and closes when you press it again, leave the page or put the tab in the background. The browser’s echo cancellation, noise suppression and automatic gain are asked to stay off, because all three reshape a held note.
The sound is handed to an analyser inside the page and to nothing else. It is not played back, not recorded, not stored and not sent: the trainer’s scripts make no network request of any kind with it, and each block of sound is overwritten by the next. What is kept is in this browser’s own storage: the A4 reference (labs.sing.a4), the choice of note names (labs.sing.solfege) and the lowest and highest notes from the range test (labs.sing.range). The paper or dark edition you chose is kept under labs_edition, in local storage and in a cookie. Clearing the site’s data in your browser removes them all. Settings saved on sing.com.im before the trainer moved here stay in that site’s storage: a browser keeps each site’s storage apart.
When a song is named on the trainer, the page loads that list from the labs.llc song book, a file on labs.llc. The links marked Find on YouTube and Find on Spotify are ordinary links: nothing is asked of those sites unless you press one, and then it opens in a new tab.
Analytics. labs.llc counts visits with Google Analytics, the one script on the page that talks to anyone else, and only from labs.llc itself. It is told which page was opened and in which edition, and, as on every labs.llc tool, that one of the page’s controls was first used, that the page was in use for thirty seconds, and how quickly the page drew and answered (its LCP, CLS and INP timings, with the tag and the id or class of the element involved, never its text). The trainer’s own scripts tell it nothing: no sound, no note and no reading is part of any of it. The menus, the search and the Lab Assistant around the trainer are labs.llc’s own; the site’s legal page has the privacy note for all of labs.llc.
Settings
A4 can be set from 415 to 466 Hz and is 440 Hz by default, the standard tuning pitch (Wikipedia, A440 (pitch standard)). Notes are named with a letter and an octave number, with middle C as C4 (Wikipedia, Scientific pitch notation), and sharps are always written as sharps: the page hears a pitch, not a key, and cannot know whether a note is an F sharp or a G flat. Solfège names are fixed do, in which Do is always C (Wikipedia, Solfège). Cents are hundredths of an equal-tempered semitone (Wikipedia, Cent (music)).
Measured accuracy
The detector file labs.llc serves (sing/assets/js/sg-pitch.js) was run, unchanged, on 7,344 synthesised tones: 12 kinds of tone, at every note from C2 to D6 (51 notes, each detuned by a random amount), at 2 sample rates (44,100 and 48,000 Hz). The error is the difference, in cents, between the pitch the detector gave and the true pitch of the tone over the samples it measured. A frame counts as the wrong note when it is more than 50 cents out.
These are synthesised tones. The “vowel-like” ones are harmonic series shaped by three resonances chosen for the test so that the fundamental is weak; they are not recordings of singers. The vibrato figures sit inside what Wikipedia, Vibrato gives for solo singers, an extent usually under a semitone either side of the note.
One frame at a time
| Test tone | Frames | Answered | Wrong note | Median error, cents | 95th percentile | Largest |
|---|---|---|---|---|---|---|
| Pure sine | 612 | 100.0% | 0.00% | 0.00 | 0.01 | 0.03 |
| Sine plus five harmonics | 612 | 100.0% | 0.00% | 0.00 | 0.06 | 0.12 |
| Vowel-like, open shape | 612 | 100.0% | 0.00% | 0.01 | 0.03 | 0.08 |
| Vowel-like, front shape | 612 | 100.0% | 0.00% | 0.01 | 0.07 | 0.11 |
| Vowel-like, back shape | 612 | 100.0% | 0.00% | 0.00 | 0.04 | 0.09 |
| Harmonics with vibrato 5.5 Hz, ±50 cents | 612 | 100.0% | 0.00% | 0.69 | 3.35 | 5.16 |
| Vowel-like with vibrato 6.5 Hz, ±100 cents | 612 | 86.1% | 2.09% | 3.49 | 28.64 | 49.11 |
| Vowel-like in noise, 20 dB | 612 | 100.0% | 0.00% | 0.08 | 0.40 | 0.99 |
| Vowel-like in noise, 10 dB | 612 | 100.0% | 0.00% | 0.80 | 4.13 | 13.14 |
| Vowel-like in noise, 5 dB | 612 | 99.2% | 0.00% | 2.22 | 11.84 | 28.45 |
| Vowel-like, vibrato 5.5 Hz ±50 cents, noise 10 dB | 612 | 99.3% | 0.00% | 2.11 | 7.67 | 13.36 |
| Harmonics 2 to 6 only (no fundamental) | 612 | 100.0% | 0.00% | 0.00 | 0.14 | 0.29 |
By register
| Test tone | C2–B2, 95th pct | C2–B2, answered | C3–B3, 95th pct | C3–B3, answered | C4–B4, 95th pct | C4–B4, answered | C5–D6, 95th pct | C5–D6, answered |
|---|---|---|---|---|---|---|---|---|
| Pure sine | 0.00 | 100.0% | 0.00 | 100.0% | 0.00 | 100.0% | 0.02 | 100.0% |
| Sine plus five harmonics | 0.00 | 100.0% | 0.00 | 100.0% | 0.01 | 100.0% | 0.09 | 100.0% |
| Vowel-like, open shape | 0.00 | 100.0% | 0.01 | 100.0% | 0.02 | 100.0% | 0.06 | 100.0% |
| Vowel-like, front shape | 0.01 | 100.0% | 0.01 | 100.0% | 0.04 | 100.0% | 0.09 | 100.0% |
| Vowel-like, back shape | 0.00 | 100.0% | 0.01 | 100.0% | 0.02 | 100.0% | 0.06 | 100.0% |
| Harmonics with vibrato 5.5 Hz, ±50 cents | 4.67 | 100.0% | 1.86 | 100.0% | 1.05 | 100.0% | 0.86 | 100.0% |
| Vowel-like with vibrato 6.5 Hz, ±100 cents | 46.53 | 57.6% | 11.86 | 86.1% | 6.55 | 100.0% | 4.17 | 97.8% |
| Vowel-like in noise, 20 dB | 0.14 | 100.0% | 0.24 | 100.0% | 0.36 | 100.0% | 0.60 | 100.0% |
| Vowel-like in noise, 10 dB | 1.17 | 100.0% | 2.42 | 100.0% | 3.14 | 100.0% | 6.67 | 100.0% |
| Vowel-like in noise, 5 dB | 2.85 | 97.2% | 5.94 | 100.0% | 8.71 | 100.0% | 16.46 | 99.4% |
| Vowel-like, vibrato 5.5 Hz ±50 cents, noise 10 dB | 9.91 | 97.9% | 3.60 | 100.0% | 3.65 | 100.0% | 6.12 | 99.4% |
| Harmonics 2 to 6 only (no fundamental) | 0.00 | 100.0% | 0.00 | 100.0% | 0.03 | 100.0% | 0.18 | 100.0% |
Through the tracker, as the page uses it
Three seconds of each tone, 30 frames a second. “Readout” is the note centre the page prints, compared with the centre of the tone. “Trace” is each frame, compared with the pitch at that moment. “Shown” is the share of frames that produced a reading.
| Test tone | Frames | Shown | Readout median, cents | Readout 95th pct | Readout largest | Trace 95th pct | First reading after |
|---|---|---|---|---|---|---|---|
| Sine plus five harmonics | 8,976 | 98.9% | 0.00 | 0.06 | 0.11 | 0.06 | 67 ms |
| Vowel-like, open shape | 8,976 | 98.9% | 0.01 | 0.03 | 0.04 | 0.03 | 67 ms |
| Harmonics with vibrato 5.5 Hz, ±50 cents | 8,976 | 98.6% | 2.34 | 5.31 | 13.77 | 3.68 | 67 ms |
| Vowel-like with vibrato 6.5 Hz, ±100 cents | 8,976 | 73.8% | 4.11 | 13.72 | 36.73 | 10.26 | 67 ms |
| Vowel-like in noise, 10 dB | 8,976 | 98.9% | 0.36 | 1.97 | 7.60 | 3.96 | 67 ms |
| Vowel-like, vibrato 5.5 Hz ±50 cents, noise 10 dB | 8,976 | 97.6% | 2.15 | 5.78 | 14.02 | 7.68 | 67 ms |
What it refuses
800 windows each of near-silence, of loud noise with no pitch, of a steady offset, of 60 Hz hum and of a tone above the range (1,250 to 4,000 Hz) were given to the detector. It named a pitch in none of them.
In the browser, through the microphone path
A fake microphone in a headless browser is silent, so the page was given a substitute: a getUserMedia that hands back a stream carrying a generated tone (a fundamental and five harmonics). Everything after that is the page’s own code on labs.llc: the same microphone routine, the same analyser window, the same detector, the same readout. 26 notes were sent in headless Chrome 154 at 48,000 Hz; 26 were read back as the right note, and the largest error in the frequency shown was 0.21 cents.
| Note sent | Hz sent | Hz shown | Error, cents | Note shown |
|---|---|---|---|---|
| C2 | 65.41 | 65.41 | 0.10 | C2 |
| G2 | 98.00 | 98.00 | 0.02 | G2 |
| C3 | 130.81 | 130.81 | -0.04 | C3 |
| E3 | 164.81 | 164.81 | -0.04 | E3 |
| G3 | 196.00 | 196.00 | 0.02 | G3 |
| A3 | 220.00 | 220.00 | 0.00 | A3 |
| C4 | 261.63 | 261.60 | -0.17 | C4 |
| D4 | 293.66 | 293.70 | 0.21 | D4 |
| E4 | 329.63 | 329.60 | -0.14 | E4 |
| F4 | 349.23 | 349.20 | -0.14 | F4 |
| G4 | 392.00 | 392.00 | 0.02 | G4 |
| A4 | 440.00 | 440.00 | 0.00 | A4 |
| B4 | 493.88 | 493.90 | 0.06 | B4 |
| C5 | 523.25 | 523.20 | -0.17 | C5 |
| D5 | 587.33 | 587.30 | -0.09 | D5 |
| E5 | 659.26 | 659.20 | -0.14 | E5 |
| F5 | 698.46 | 698.40 | -0.14 | F5 |
| G5 | 783.99 | 784.00 | 0.02 | G5 |
| A5 | 880.00 | 880.00 | 0.00 | A5 |
| B5 | 987.77 | 987.70 | -0.12 | B5 |
| C6 | 1046.50 | 1046.50 | -0.00 | C6 |
| D6 | 1174.66 | 1174.60 | -0.09 | D6 |
| F♯2 | 92.50 | 92.50 | 0.03 | F♯2 |
| A♯3 | 233.08 | 233.10 | 0.13 | A♯3 |
| C♯5 | 554.37 | 554.40 | 0.11 | C♯5 |
| D♯4 | 311.13 | 311.10 | -0.15 | D♯4 |
Measured 2026-09-29 07:15 (UTC) on this page. The page prints hertz to one or two decimal places, so part of each error is rounding.
What these numbers do not cover
- No real microphone, room or voice was measured. A laptop microphone, a noisy room or a breathy voice will do worse than a synthesised tone.
- The widest vibrato tested, ±100 cents at 6.5 Hz, is where the detector is weakest, and weakest of all in the lowest octave: there a block of sound spans most of one swing, so the sound does not repeat and many frames are refused.
- One voice at a time. Two notes together are not one pitch.
- Notes below C2 and above D6 are reported as out of range.
- Not tested on Safari, iOS or Firefox, and the permission-refused paths were not driven by a real browser prompt.
Measured 2026-09-29 06:38 (UTC) by sing/tools/accuracy.js on the served file. Detector settings: first-peak threshold 0.85, clarity floor 0.55.
Sources
Every rule and figure on these pages that was not computed by the trainer was read at one of these 13 sources on the date shown. The voice-type ranges are conventions and the two articles that give them do not agree; both are shown on the range page.
- Voice type — Wikipedia. Used for the typical range of each voice type. Revision 1371431200 of 2026-08-26. Read 2026-09-28 (UTC). https://en.wikipedia.org/wiki/Voice_type
- Vocal range — Wikipedia. Used for the second set of approximate ranges, and the statement that range alone does not determine a voice type. Revision 1365646625 of 2026-07-23. Read 2026-09-28 (UTC). https://en.wikipedia.org/wiki/Vocal_range
- Cent (music) — Wikipedia. Used for the cent: 100 to an equal-tempered semitone, 1200 · log2(f2 / f1). Revision 1376384857 of 2026-09-23. Read 2026-09-28 (UTC). https://en.wikipedia.org/wiki/Cent_(music)
- Scientific pitch notation — Wikipedia. Used for note names with an octave number: middle C is C4, and the number goes up at each C. Revision 1355585069 of 2026-05-22. Read 2026-09-28 (UTC). https://en.wikipedia.org/wiki/Scientific_pitch_notation
- A440 (pitch standard) — Wikipedia. Used for A4 = 440 Hz as the tuning standard, ISO 16. Revision 1368304281 of 2026-08-08. Read 2026-09-28 (UTC). https://en.wikipedia.org/wiki/A440_(pitch_standard)
- Interval (music) — Wikipedia. Used for the names of the intervals of 1 to 12 semitones. Revision 1369352691 of 2026-08-14. Read 2026-09-28 (UTC). https://en.wikipedia.org/wiki/Interval_(music)
- Major scale — Wikipedia. Used for the major scale’s pattern of whole and half steps. Revision 1372680474 of 2026-09-01. Read 2026-09-28 (UTC). https://en.wikipedia.org/wiki/Major_scale
- Minor scale — Wikipedia. Used for the natural and harmonic minor scales. Revision 1369856436 of 2026-08-17. Read 2026-09-28 (UTC). https://en.wikipedia.org/wiki/Minor_scale
- Pentatonic scale — Wikipedia. Used for the major and minor pentatonic scales. Revision 1369340041 of 2026-08-14. Read 2026-09-28 (UTC). https://en.wikipedia.org/wiki/Pentatonic_scale
- Chromatic scale — Wikipedia. Used for the chromatic scale. Revision 1362634296 of 2026-07-05. Read 2026-09-28 (UTC). https://en.wikipedia.org/wiki/Chromatic_scale
- Solfège — Wikipedia. Used for fixed-do solfège: Do, Re, Mi, Fa, Sol, La, Si tied to C, D, E, F, G, A, B. Revision 1370429203 of 2026-08-21. Read 2026-09-28 (UTC). https://en.wikipedia.org/wiki/Solf%C3%A8ge
- Vibrato — Wikipedia. Used for the extent of a solo singer’s vibrato: usually less than a semitone either side of the note. Revision 1344845204 of 2026-03-22. Read 2026-09-28 (UTC). https://en.wikipedia.org/wiki/Vibrato
- A Smarter Way to Find Pitch — Philip McLeod and Geoff Wyvill, University of Otago. Used for the pitch method: the normalised square difference function, picking the first key maximum above a threshold, and the clarity measure. Read 2026-09-28 (UTC). https://www.cs.otago.ac.nz/graphics/Geoff/tartini/papers/A_Smarter_Way_to_Find_Pitch.pdf
The song book
The songs the trainer can name are the labs.llc song book’s own five lists, 5,018 tracks, with the artist, the title and a year for every one; the song book’s pages say where the lists came from. sing.com.im had its own shorter lists (1,715 songs); 1,714 of them are in the song book, and a “Sing this” link made there opens the same song here. The one that is not was a video title rather than a song.
Contact
Corrections and questions: labs@labs.llc.