Приватный офлайн-тюнер для гитары и баса с диапазоном вплоть до G0/A0/B0. Звук анализируется локально через Web Audio API, AudioWorklet и Web Worker, не записывается и не передаётся по сети.
Требования: Node.js 22+ и pnpm 11.
pnpm install
pnpm devКоманды проверки:
pnpm typecheck # строгая проверка TypeScript/Vue
pnpm lint # ESLint
pnpm test # unit + component, включая DSP benchmark
pnpm benchmark # подробный запуск синтетического DSP benchmark
pnpm build # typecheck + production-сборка в dist/
pnpm test:e2e # production E2E: Chromium/WebKit, 360–1440 px, offline PWA
pnpm check # форматирование, lint, typecheck, unit и buildДля первого запуска Playwright может потребоваться:
pnpm exec playwright install chromium webkit- Выберите инструмент и строй. При первом запуске выбраны шестиструнная гитара и E Standard.
- Нажмите «Начать настройку» — запрос микрофона не появляется до явного нажатия.
- Играйте одну открытую струну и заглушайте остальные.
- При необходимости включите список струн в настройках и выберите сильно расстроенную струну: тюнер не будет перескакивать на соседнюю цель.
- Остановите вход явной кнопкой. Все
MediaStreamTrackтакже останавливаются при размонтировании приложения и событииpagehide.
Кнопка «Настроить все струны» запускает hands-free сеанс из двух проходов. В первом проходе тюнер ведёт от самой толстой струны к самой тонкой и автоматически переключает цель после 750 мс стабильного попадания. Во втором проходе все струны проверяются ещё раз с учётом изменения общего натяжения. Завершение каждой струны сопровождается вибрацией на поддерживаемых устройствах; сеанс можно отменить без потери ранее выбранного режима.
По умолчанию используется стандартный интерфейс: выбор инструмента и строя, автоматическое распознавание струны и пошаговая настройка. Профессиональный интерфейс добавляет ручной выбор режима, частоту, отклонение в центах, калибровку A4, noise gate и пользовательские строи. Пошаговую настройку, список струн и показатели качества сигнала можно независимо включать и выключать в настройках.
Режимы профессионального интерфейса:
- Хроматика — ближайшая нота в равномерной темперации;
- Авто — ближайшая открытая струна выбранного строя с hysteresis;
- Струна — только выбранная цель, полезно при большом расстройстве и сильных обертонах.
Настройки и пользовательские строи хранятся в версионированных JSON-записях localStorage. Повреждённые или несовместимые данные безопасно заменяются значениями по умолчанию. Аудио не записывается, не сохраняется и не передаётся по сети.
vite-plugin-pwa создаёт manifest и Service Worker, который precache-кэширует только статические файлы приложения. После первой успешной загрузки приложение открывается офлайн. В проекте нет backend, API-маршрутов, SSR, базы данных, аналитики, трекеров или внешних runtime CDN.
Доступ к микрофону требует secure context: HTTPS либо localhost. Выбор аудиовхода становится доступен после первого разрешения, когда браузер раскрывает названия устройств. Переключение входа во время работы безопасно перезапускает локальный аудиограф.
Телефонные микрофоны и встроенная обработка ОС часто ослабляют диапазон ниже 50–80 Hz. B0 (30,87 Hz), A0 (27,5 Hz) и G0 (24,5 Hz) могут лучше определяться по гармоникам, чем по физически слабой фундаментали. Для низкого баса предпочтителен инструментальный вход аудиоинтерфейса без AGC/noise suppression; приложение запрашивает отключение echoCancellation, noiseSuppression и autoGainControl, но браузер или ОС вправе проигнорировать эти constraints.
Подробнее: архитектура, валидация аудио, проверка реальных устройств.
src/audio/— независимый от Vue Tuner Engine, DSP, worker и интерфейс detector;src/audio/audio-capture-worklet.ts— сбор моно PCM-окон без pitch detection;src/domain/— MIDI/note math и типизированный каталог строёв;src/stores/— только UI-настройки и готовые измерения, без PCM;src/components/— адаптивный интерфейс и доступный Reka Dialog;tests/иsrc/**/__tests__/— component/E2E/unit/DSP проверки.