Skip to content

About

Приватный офлайн-тюнер

Resources

Stars

0 stars

Watchers

0 watching

Forks

Repository files navigation

PrivateTune

Приватный офлайн-тюнер для гитары и баса с диапазоном вплоть до 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

Как пользоваться

  1. Выберите инструмент и строй. При первом запуске выбраны шестиструнная гитара и E Standard.
  2. Нажмите «Начать настройку» — запрос микрофона не появляется до явного нажатия.
  3. Играйте одну открытую струну и заглушайте остальные.
  4. При необходимости включите список струн в настройках и выберите сильно расстроенную струну: тюнер не будет перескакивать на соседнюю цель.
  5. Остановите вход явной кнопкой. Все MediaStreamTrack также останавливаются при размонтировании приложения и событии pagehide.

Кнопка «Настроить все струны» запускает hands-free сеанс из двух проходов. В первом проходе тюнер ведёт от самой толстой струны к самой тонкой и автоматически переключает цель после 750 мс стабильного попадания. Во втором проходе все струны проверяются ещё раз с учётом изменения общего натяжения. Завершение каждой струны сопровождается вибрацией на поддерживаемых устройствах; сеанс можно отменить без потери ранее выбранного режима.

По умолчанию используется стандартный интерфейс: выбор инструмента и строя, автоматическое распознавание струны и пошаговая настройка. Профессиональный интерфейс добавляет ручной выбор режима, частоту, отклонение в центах, калибровку A4, noise gate и пользовательские строи. Пошаговую настройку, список струн и показатели качества сигнала можно независимо включать и выключать в настройках.

Режимы профессионального интерфейса:

  • Хроматика — ближайшая нота в равномерной темперации;
  • Авто — ближайшая открытая струна выбранного строя с hysteresis;
  • Струна — только выбранная цель, полезно при большом расстройстве и сильных обертонах.

Настройки и пользовательские строи хранятся в версионированных JSON-записях localStorage. Повреждённые или несовместимые данные безопасно заменяются значениями по умолчанию. Аудио не записывается, не сохраняется и не передаётся по сети.

PWA и приватность

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 проверки.

About

Приватный офлайн-тюнер

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages