An open API service indexing awesome lists of open source software.

https://github.com/pbalduino/menio_tuner

A guitar tuner
https://github.com/pbalduino/menio_tuner

Last synced: 2 months ago
JSON representation

A guitar tuner

Awesome Lists containing this project

README

          


MenioTuner Logo

# 🎸 MenioTuner

[![Flutter](https://img.shields.io/badge/Flutter-3.9.0+-02569B?logo=flutter&logoColor=white)](https://flutter.dev/)
[![License](https://img.shields.io/badge/License-MIT-blue.svg)](LICENSE)
[![Issues](https://img.shields.io/github/issues/pbalduino/menio_tuner)](https://github.com/pbalduino/menio_tuner/issues)

**A beautiful, ad-free guitar tuner built with Flutter.**

*No ads, no subscriptions, just pure tuning perfection for musicians.*

## ✨ Features

### 🎯 **Accurate Tuning**
- ✅ Real-time frequency detection using FFT + autocorrelation
- ✅ Visual gauge with needle responsiveness and smooth animations
- ✅ Color-coded feedback: Flat (♭) = Red/Left, Sharp (♯) = Yellow/Right, In Tune = Green
- ✅ Precision within ±1.5 cents for perfect tuning
- ✅ Automatic string detection with manual override option
- ✅ Amplitude-based signal validation for clean readings
- ✅ Subtle gradient tint shifts (red → orange → green) reinforce tuning status

### 🎵 **Multiple Instruments & Tunings**
- **Guitar**: Standard, Drop D, Drop C, Open G, DADGAD
- **Bass Guitar**: 4-string standard tuning
- **Ukulele**: Standard tuning (G C E A)
- **Violin**: Standard tuning (G D A E)
- **Mandolin**: Standard tuning (G D A E)
- Custom tuning creation and management

### 🎨 **Beautiful Interface**
- Modern gradient design with smooth animations
- Dark/Light theme support for stage performance
- Intuitive string selection with visual feedback
- Responsive design for all screen sizes

### ♿ **Accessibility First**
- Haptic feedback when perfectly in tune
- Color-blind safe visual indicators
- High contrast ratios for visibility
- Voice-over support

### ⚙️ **Customizable Settings**
- Reference frequency adjustment (A4 = 430-450 Hz in 0.5 Hz increments)
- Microphone sensitivity levels
- Theme selection (Light/Dark)
- Language selection (English/Portuguese)
- Haptic feedback toggle
- Keep screen on during tuning

## 📱 Screenshots

| Main Tuner | Settings | Tunings |
|------------|----------|---------|
| ![Main Screen](docs/ui/mockup_01.png) | ![Settings](docs/ui/mockup_02.png) | ![Tunings](docs/ui/mockup_03.png) |

## 🚀 Getting Started

### Prerequisites

- Flutter 3.9.0 or higher
- Dart SDK 3.0.0 or higher
- Android Studio / VS Code with Flutter extension
- Physical device or emulator with microphone access

### Installation

1. **Clone the repository**
```bash
git clone https://github.com/pbalduino/menio_tuner.git
cd menio_tuner
```

2. **Install dependencies**
```bash
flutter pub get
```

3. **Run the app**
```bash
flutter run
```

### Development Setup

```bash
# Check Flutter installation
flutter doctor

# Run tests
flutter test

# Build for Android
flutter build apk

# Build for iOS
flutter build ios
```

## 🏗️ Architecture

### Project Structure
```
lib/
├── main.dart # App entry point
├── app.dart # App configuration
├── screens/ # UI screens
│ ├── tuner_screen.dart # Main tuning interface
│ ├── settings_screen.dart # Settings and preferences
│ └── tunings_screen.dart # Tuning selection
├── widgets/ # Reusable UI components
│ └── tuner_gauge.dart # Custom gauge widget
├── services/ # Core business logic
│ ├── audio_processor.dart # Audio input processing
│ └── signal_processing.dart # FFT and frequency analysis
└── data/ # Data models and storage
└── tunings.dart # Tuning definitions
```

### Key Technologies
- **State Management**: StatefulWidget (upgrading to Riverpod)
- **Audio Processing**: ✅ FFT + Autocorrelation via `flutter_audio_capture`
- **UI Framework**: Flutter Material Design
- **Platform Integration**: ✅ Native audio permissions via `permission_handler`

## 🔧 Technical Details

### Audio Processing
- **Buffer Size**: 4096 samples @ 44.1 kHz (~93ms latency)
- **Frequency Range**: 80-2000 Hz (covers guitar fundamentals)
- **Noise Filtering**: Low-pass filter at 2 kHz
- **Smoothing**: Exponential moving average for stable readings

### Performance Optimizations
- ✅ Audio processing pauses when app is backgrounded
- ✅ Efficient memory management with proper disposal
- ✅ Smooth 60fps animations with minimal jank
- ✅ Battery-optimized microphone usage
- ✅ Lifecycle-aware audio stream management
- ✅ Permission-based audio access control
- ✅ Optional debug mode with logging & diagnostics overlay

## 📋 Roadmap

### 🔴 High Priority
- [x] ~~UI Design & Navigation~~ ✅
- [x] ~~**Real-time Audio Input Processing**~~ ✅ ([#1](https://github.com/pbalduino/menio_tuner/issues/1))
- [x] ~~**Tuning Selection Navigation**~~ ✅ ([#2](https://github.com/pbalduino/menio_tuner/issues/2))

### 🟡 Medium Priority
- [x] ~~**Frequency Smoothing**~~ ✅ ([#3](https://github.com/pbalduino/menio_tuner/issues/3))
- [x] ~~**Fix Default String Selection**~~ ✅ ([#17](https://github.com/pbalduino/menio_tuner/issues/17))
- [x] ~~**Debug Logging**~~ ✅ ([#18](https://github.com/pbalduino/menio_tuner/issues/18))
- [ ] **Internationalization (i18n)** ([#19](https://github.com/pbalduino/menio_tuner/issues/19))
- [ ] **Haptic Feedback** ([#4](https://github.com/pbalduino/menio_tuner/issues/4))
- [ ] **Color-blind Accessibility** ([#5](https://github.com/pbalduino/menio_tuner/issues/5))
- [ ] **Dark/Light Theme Support** ([#7](https://github.com/pbalduino/menio_tuner/issues/7))
- [ ] **State Management (Riverpod)** ([#9](https://github.com/pbalduino/menio_tuner/issues/9))

### 🟢 Low Priority
- [ ] **Custom Tuning Creation** ([#13](https://github.com/pbalduino/menio_tuner/issues/13))
- [ ] **Multi-instrument Support** ([#16](https://github.com/pbalduino/menio_tuner/issues/16))
- [ ] **Advanced Settings** ([#12](https://github.com/pbalduino/menio_tuner/issues/12), [#15](https://github.com/pbalduino/menio_tuner/issues/15))

[View all issues →](https://github.com/pbalduino/menio_tuner/issues)

## 🤝 Contributing

We welcome contributions! Please see our [Contributing Guidelines](CONTRIBUTING.md) for details.

### Development Workflow
1. Fork the repository
2. Create a feature branch (`git checkout -b feature/amazing-feature`)
3. Make your changes
4. Add tests if applicable
5. Commit your changes (`git commit -m 'Add amazing feature'`)
6. Push to the branch (`git push origin feature/amazing-feature`)
7. Open a Pull Request

### Code Style
- Follow [Dart Style Guide](https://dart.dev/guides/language/effective-dart/style)
- Use `flutter analyze` to check for issues
- Format code with `dart format .`
- Write tests for new features

## 📄 License

This project is licensed under the MIT License - see the [LICENSE](LICENSE) file for details.

## 🙏 Acknowledgments

- Flutter team for the amazing framework
- Open source audio processing libraries
- Musicians who provided feedback and testing
- Contributors who help make this project better

## 📞 Support

- 🐛 **Bug Reports**: [Create an issue](https://github.com/pbalduino/menio_tuner/issues/new?template=bug_report.md)
- 💡 **Feature Requests**: [Create an issue](https://github.com/pbalduino/menio_tuner/issues/new?template=feature_request.md)
- 💬 **Questions**: [Start a discussion](https://github.com/pbalduino/menio_tuner/discussions)

---


MenioTuner

**Made with ❤️ for musicians by musicians**