Only Learn
Catatan riset di balik setiap reel @only_learn0: uang, karier, dan psikologi sehari-hari, lengkap dengan sumber dan level buktinya.
Translation pending
A free strobe tuner for guitar, bass, ukulele and violin, guitar practice exercises with a metronome, and a Guitar Pro tab player. Runs in your browser, works offline.
MediaGitHub @tkesiciOnlineOwner unconfirmed
Have you tried it? One tap is enough. No sign-in needed.
Repository information has not been collected yet.
No updates detected yet. GitHub releases will appear here.
The maker's introduction consists of the line above. Read the repository README for more details. Repository README ↗
Loading the full README.
Read the full 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.