feat: Implement initial tuner application with core logic, audio processing, and presentation components.

This commit is contained in:
2025-12-02 13:54:52 +01:00
commit cc5f96c9e3
51 changed files with 4182 additions and 0 deletions

90
README.md Normal file
View File

@@ -0,0 +1,90 @@
# AeroTuner
An instrument tuner featuring a nostalgic **Frutiger Aero** aesthetic, built with modern web technologies and Clean Architecture.
![Status](https://img.shields.io/badge/Status-Production_Ready-success)
![PWA](https://img.shields.io/badge/PWA-Installable-purple)
![Tests](https://img.shields.io/badge/Tests-Passing-green)
![Design](https://img.shields.io/badge/Design-Frutiger%20Aero-aqua)
## Features
### Precision Tuning
- **FFT-based Pitch Detection**: High-precision frequency analysis using the Web Audio API.
- **Harmonic Product Spectrum (HPS)**: Robust fundamental frequency detection, even for bass instruments.
- **Accurate to ±1 cent**: Professional-grade tuning accuracy (don't quote me on that).
- **Multi-Instrument Support**: Guitar, Ukulele, Bass, and Piano.
- **Alternate Tunings**: Drop D, Open G, DADGAD, and more (Pro Mode).
### Frutiger Aero UI
- **Glossy Aesthetics**: Glassmorphism, vibrant gradients, and detailed reflections.
- **Interactive Gauge**: Smooth, physics-based needle animation.
- **Basic vs. Pro Modes**:
- **Basic**: Clean interface for quick tuning.
- **Pro**: Advanced tools including Waveform Display and String Guide.
- **Real-time Waveform**: Visualizes the audio signal in real-time.
- **String Guide**: Visual indicator of the target string.
### Progressive Web App (PWA)
- **Installable**: Add to home screen on iOS, Android, and Desktop.
- **Offline Capable**: Works without an internet connection.
- **App-like Experience**: Fullscreen mode with custom icons.
## Technology Stack
- **Core**: [React 19](https://react.dev/), [TypeScript](https://www.typescriptlang.org/)
- **Build**: [Vite](https://vitejs.dev/), [Bun](https://bun.sh/)
- **Styling**: [Tailwind CSS](https://tailwindcss.com/) (with custom Frutiger Aero configuration)
- **Audio**: Web Audio API (`AnalyserNode`, `AudioContext`)
- **State**: React Hooks + LocalStorage persistence
- **Testing**: [Bun Test](https://bun.sh/docs/cli/test)
## Architecture
This project strictly follows **Clean Architecture** principles to ensure maintainability and testability:
- **Domain Layer** (`src/domain`): Pure business logic (Note conversion, Tuning calculations, Harmonic analysis). Zero dependencies.
- **Infrastructure Layer** (`src/infrastructure`): Implementation details (Web Audio API, FFT algorithms).
- **Presentation Layer** (`src/presentation`): UI components and React hooks.
## Quick Start
```bash
# Install dependencies
bun install
# Start development server
bun dev
# Run tests
bun test
# Build for production
bun run build
```
## Testing
The project includes a comprehensive suite of unit tests for the Domain layer.
```bash
bun test
```
Tests cover:
- Frequency ↔ Note conversion
- Cents calculation & Tuning status
- Harmonic analysis & Fundamental frequency detection
## Usage
1. **Grant Permission**: Allow microphone access when prompted.
2. **Select Instrument**: Choose Guitar, Bass, Ukulele, or Piano.
3. **Choose Mode**: Toggle between **Basic** (simple) and **Pro** (advanced) views.
4. **Tune**: Play a string. The gauge shows if you are sharp (right) or flat (left).
- **Green**: In tune!
- **Blue/Red**: Adjust your tuning pegs.
## License
MIT