WallpaperMachine
당신이 사랑하는 배경화면, 맥에서 새롭게 만나보세요
Tap-tone analysis for luthiers, in your browser — capture a tap, run an FFT, and reveal guitar resonant modes and tonewood stiffness. Installable PWA with guitar, plate, and brace modes.
README 전체를 불러오는 중입니다. 아래는 저장된 발췌입니다.
Tap-tone spectrum analysis for luthiers, running entirely in the browser. Tap a
guitar, tonewood plate, or brace; Guitar Tap captures the sound, runs a
high-resolution FFT, and reveals the resonant peaks and material properties that
guide bracing, mass distribution, and plate thickness — the methodology from
Contemporary Acoustic Guitar Design and Build by Trevor Gore and Gerard Gilet.README 전문 보기 ↗Tap-tone spectrum analysis for luthiers, running entirely in the browser. Tap a guitar, tonewood plate, or brace; Guitar Tap captures the sound, runs a high-resolution FFT, and reveals the resonant peaks and material properties that guide bracing, mass distribution, and plate thickness — the methodology from Contemporary Acoustic Guitar Design and Build by Trevor Gore and Gerard Gilet.
This is the web edition of Guitar Tap. It is a long-term parallel port of the Apple edition (GuitarTap, Swift — the canonical reference for both algorithm and UX), alongside the desktop edition (guitar_tap, Python). All three are kept at numeric and behavioural parity (see Parity below) and are open source under the GNU GPL v3.
Everything runs client-side: the DSP happens in the browser, and your saved measurement library lives in the browser's IndexedDB — no server, no accounts, no tracking. It installs as a Progressive Web App for an app window, offline use, and durable storage.
.guitartap export, and a saved library.src/dsp (no DOM/audio), unit-tested against a shared oracle.public/spectrum-processor.js)..guitartap JSON format.eslint-plugin-react-hooks — a focused lint for React Hook
dependency arrays (types/unused are covered by the strict TypeScript check).src/
dsp/ Pure DSP core — FFT, gated capture, peak finding, classify,
material properties, pitch, calibration. No DOM/audio; oracle-tested.
audio/ AudioWorklet-driven engine: mic capture, tap detection, playback.
components/ React UI — spectrum chart, peak cards, panels, sheets, settings.
measurement/ .guitartap read/write + the IndexedDB library store.
presentation/ Rendering/export helpers (PDF report, spectrum image, mode colours).
hooks/ format/ Small shared utilities.
App.tsx Top-level app: toolbar, live view, results, state.
public/
spectrum-processor.js AudioWorklet (microphone → FFT frames).
icons/ PWA + favicon assets.
test/ Vitest oracle-driven parity tests (g0–g11 + regressions).
fixtures/parity-oracle.json Expected values, generated from the Swift reference.
tooling/sync-oracle.sh Maintainer script: refresh the vendored oracle.
All commands run in bash: Terminal on macOS, a shell on Linux, Cygwin bash (or Git Bash) on Windows. Every
repo has its own Python environment, .venv, made from its own requirements files; nothing uses another repo's
Python or the system's. The repo's scripts find .venv themselves (.venv/bin, or .venv/Scripts on Windows) and
stop if it is missing; PYTHON=… names another interpreter.
.nvmrc (pinned: other versions have broken the build —
nvm install / nvm use reads it), Python 3.14, and git.cmd.exe on Windows, and ours are bash
(npm run build stops with "'.' is not recognized…"). Once per machine, from any folder:
npm config set script-shell "$(cygpath -w "$(which bash)")"
It is saved in your user ~/.npmrc, so it holds for every project; npm config get script-shell shows it.git clone https://github.com/dwsdolce/GuitarTapWeb.git
cd GuitarTapWeb
npm ci # exact, lockfile-pinned install
npx playwright install chromium # the browser the end-to-end and export tests drive
tooling/export-check/), run by npm run test:exports:
python3.14 -m venv .venv
.venv/bin/pip install -r requirements-dev.txt # on Windows: .venv/Scripts/pip
.venv as the Python interpreter.npm run test:fast.Day to day:
npm run dev # start the dev server (http://localhost:5173)
npm test # run the Vitest parity suite
npm run typecheck # strict TypeScript check (no emit)
npm run lint # ESLint — React Hook dependency-array checks
Grant microphone permission when prompted — audio is analysed locally and never leaves the browser.
tooling/soak.sh is an on-demand dev tool (not CI) that loops the fast Vitest
suite many times to surface nondeterministic teardown/async races (React
effect-cleanup) that a single run hides:
./tooling/soak.sh 200 # 200 runs; exits non-zero on any failure or hang
./tooling/soak.sh 200 15000 # …with a 15 s per-test timeout (default 10 s)
Runs under bash on macOS, Linux, and Windows (Cygwin / Git-Bash). A green soak is confidence, not proof — use a few hundred to ~1000 runs. Why it works the way it does, and what it detects, is in the script's own header.
npm run build # tsc --noEmit && vite build → dist/
npm run preview # serve the production build locally to smoke-test it
여기까지가 README 앞부분입니다. 나머지는 원문에서 읽을 수 있습니다. README 전문 보기 ↗