Lexiverse
Lexiverse - AI contextual reading engine for English learners. Your next article is your next review.
翻译准备中
尚未检测到更新。GitHub 发布版本后会显示在这里。
🎹 App · Span — intervals · span.nathanielschool.com
翻译准备中
正在加载完整 README。
查看完整 README ↗An interval practice studio for pianists, vocalists and every other instrument, built from the interval tricks Jason Zac teaches at Nathaniel School of Music (class B108 Piano 15).
Live: https://span.nathanielschool.com
Most interval trainers make you memorise twelve unrelated facts. This one is built the way the class teaches it: memorise five anchors, derive the rest.
| Anchor | How you find it |
|---|---|
| P5 | circle of fifths, one step clockwise |
| P4 | circle of fifths, one step counter-clockwise |
| M3 / m3 | by key-colour shape (white–white, white–black, black–white, black–black) |
| Tritone | six mirror pairs — the only interval that inverts into itself |
Everything else falls out of those:
Ear adds registers (including roaming) and a "wide" spread; Hands can ask you to
find the root as well as the interval; every drill answers with a picture of the
two keys and the trick that gets you there next time. Each view is linkable by
hash — #ear, #eyes, #hands, #voice.
Each drill keeps a streak and a per-interval accuracy heat strip in localStorage, so you can see which distances you actually own.
G root → D P5 → +2 → E M6).Voice uses the mic-acquisition ladder ported from Prima Vista
(js/mic.js). It exists because Zoom, Teams and Meet install virtual audio
devices that frequently become the default input on macOS, and the browser
then hands back a live stream that is digitally silent — permission granted,
track live, every sample zero. Span now retries across devices, names the
conferencing device when it finds one, offers a picker, re-opens the mic when
the system input changes, and runs a 4-second silence watchdog.
The analysis loop is setInterval at 25 ms, not requestAnimationFrame,
which browsers throttle to a crawl in background tabs — exactly the situation
during a call.
Any static server works — there is no build step.
python3 serve.py
Then open http://localhost:8802.
js/theory.js spells notes from letter-distance plus quality, never from
pitch class. Do not shortcut this — it is what keeps C → B♭♭ a diminished
7th instead of a major 6th.TRITONE_PARTNER), which between them name a partner for all twelve roots.assets/vendor/. Key signature is
always set and Accidental.applyAccidentals always runs._t.mjs is the theory test suite: node _t.mjs. It checks every interval
from every root in both directions, the shape charts against actual key
colours, tritone mutuality, inversions and every derivation formula.Teaching examples default to G, never C.