尚未收集仓库信息。
尚未检测到更新。GitHub 发布版本后会显示在这里。
制作者的介绍仅有上面的一句话。 更多详情请阅读仓库 README。 仓库 README ↗
正在加载完整 README。
查看完整 README ↗A chromatic and instrument tuner, guitar practice exercises and a Guitar Pro tab player that run in the browser. No server, no build step, no dependencies: plain HTML, CSS and JavaScript.
index.html Page skeleton (Tuner, Practice and Tab Studio pages)
css/style.css All styles (light and dark themes)
js/pitch.js Pitch detection (McLeod / NSDF), shared by anything that listens
js/tuner.js Tuner: microphone input, string detection, pitch trace
js/voice.js Voice: pitch trail, range finder, singing exercises, song key helper
js/alphatab.js Loads alphaTab once for Practice and Tab Studio
js/exercises.js Practice catalogue: names, descriptions, tempos
js/practice.js Practice: plays the exercise files with alphaTab, in a loop
js/tab-studio.js Tab Studio: opens, plays, loops and edits Guitar Pro / MusicXML files (alphaTab), and scores singing along with a vocal track
js/amp.js The amp: drive and volume for everything alphaTab plays, and Tab Studio’s mix
js/metronome.js The metronome beside the amp: swings at the playing tempo, sets tempo and click volume
js/app.js Switching between #tuner, #practice and #tab-studio, offline support
practice/*.gp The Practice exercises as Guitar Pro 7 files (generated, see below): <id>.gp, or <id>-p<n>.gp per position
tools/ Dev-only scripts (Node): exercise files, asset hashes, git hook; not needed to run the site
tests/ Node tests (pitch detection); not needed to run the site
sw.js Service worker: caches the app and the exercise files for offline use
manifest.webmanifest Lets the app be installed to the home screen
favicon.svg
icons/ App icons (192, 512, maskable, apple-touch-icon) and the link-preview image, drawn by tools/make-icons.js
.nojekyll Turns off Jekyll processing on GitHub Pages
Most browsers block the microphone on file:// pages, so start a small local server:
python3 -m http.server 8000
# open http://localhost:8000
The notes of every Practice exercise are stored as Guitar Pro 7 files in practice/, so they render and play exactly like files opened in Tab Studio (and can be opened in Guitar Pro). They are generated from the definitions in tools/make-practice-files.js and the catalogue in js/exercises.js. After changing either, regenerate them with Node:
cd tools && npm install && npm run practice
The script reads every file back after writing it and stops if any note differs. A new exercise needs an entry in js/exercises.js and, for techniques, its notes in the script; the service worker picks up the new file automatically.
The PNG app icons and the link-preview image (icons/social.png, 1200×630, used by the Open Graph and X/Twitter tags) are drawn from the logo's shapes by a small Node script with no dependencies. After changing the logo, run:
node tools/make-icons.js
The pitch detector is tested with Node, no browser needed: sines and sawtooths at known frequencies, from a 5-string bass's low B to the top of the chromatic range, at 44.1 and 48 kHz, must come back within 1 cent.
node --test tests/*.test.js
Every CSS and JS link in index.html carries a hash of the file's content (css/style.css?v=36afc388), and so do the exercise files and the service worker's precache list. When a file changes, its URL changes, so a CDN or browser cache can't serve an old stylesheet next to new HTML. (In front of 7uner.com, Cloudflare keeps CSS and JS for hours; without this, a deploy can show the new page with the old styles.)
The hashes are written by tools/stamp-assets.js. Run it before committing, or let git do it by turning on the hook in tools/hooks once per clone:
git config core.hooksPath tools/hooks
The hook stamps and re-adds index.html, sw.js and js/exercises.js to the commit.
7uner) and put the contents of this folder at its root.main, folder: / (root).https://<username>.github.io/7uner/.7uner.com) under Settings > Pages > Custom domain. GitHub adds a CNAME file to the repository automatically.A records for the apex domain (7uner.com): 185.199.108.153, 185.199.109.153, 185.199.110.153, 185.199.111.153CNAME record for www pointing to <username>.github.iojs/amp.js): a drive knob (0 is clean; turning it up adds distortion) and a volume knob, saved in the browser. The metronome goes through it too, so Volume 0 silences it as well. In Tab Studio, with a file open, a second row of knobs on the amp is the mix: Guitar (the guitar track picked), Vocals (when the file has a vocal track) and Backing (everything else); 0 mutes a channel.js/metronome.js). While Practice or Tab Studio plays, its rod swings at the playing tempo, kept in phase with the music. Sliding the weight or the − and + buttons (10 BPM a step) set the tempo; in Practice this is the only tempo control, and in Tab Studio it sets the speed relative to the song’s tempo, and a drawer under the base holds three brass keys for 50%, 75% and 100% (the one in use lights up like the metronome’s display; Practice has no drawer, since its exercises have no tempo of their own to take a share of). The knob on its right side sets the click and count-in volume (1.25× alphaTab’s default at the middle, 2.5× at the top); in Practice and Tab Studio the click is always on and volume 0 silences it. The switch on its left side turns the one-bar count-in on or off (off by default), for both pages.localStorage and don't carry over to other devices.