{"id":38779516,"url":"https://github.com/pbalduino/menio_tuner","last_synced_at":"2026-01-17T12:22:15.063Z","repository":{"id":316243760,"uuid":"1062571675","full_name":"pbalduino/menio_tuner","owner":"pbalduino","description":"A guitar tuner","archived":false,"fork":false,"pushed_at":"2025-09-23T19:24:22.000Z","size":668,"stargazers_count":3,"open_issues_count":12,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2025-10-31T04:39:12.805Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"Dart","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/pbalduino.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2025-09-23T12:40:14.000Z","updated_at":"2025-09-25T06:18:51.000Z","dependencies_parsed_at":"2025-09-23T16:03:09.073Z","dependency_job_id":null,"html_url":"https://github.com/pbalduino/menio_tuner","commit_stats":null,"previous_names":["pbalduino/menio_tuner"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/pbalduino/menio_tuner","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pbalduino%2Fmenio_tuner","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pbalduino%2Fmenio_tuner/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pbalduino%2Fmenio_tuner/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pbalduino%2Fmenio_tuner/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/pbalduino","download_url":"https://codeload.github.com/pbalduino/menio_tuner/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pbalduino%2Fmenio_tuner/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28508464,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-17T11:50:55.898Z","status":"ssl_error","status_checked_at":"2026-01-17T11:50:55.569Z","response_time":85,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.6:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2026-01-17T12:22:14.370Z","updated_at":"2026-01-17T12:22:15.055Z","avatar_url":"https://github.com/pbalduino.png","language":"Dart","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003cdiv align=\"center\"\u003e\n  \u003cimg src=\"docs/assets/logo.svg\" alt=\"MenioTuner Logo\" width=\"150\" height=\"150\"\u003e\n\n  # 🎸 MenioTuner\n\n  [![Flutter](https://img.shields.io/badge/Flutter-3.9.0+-02569B?logo=flutter\u0026logoColor=white)](https://flutter.dev/)\n  [![License](https://img.shields.io/badge/License-MIT-blue.svg)](LICENSE)\n  [![Issues](https://img.shields.io/github/issues/pbalduino/menio_tuner)](https://github.com/pbalduino/menio_tuner/issues)\n\n  **A beautiful, ad-free guitar tuner built with Flutter.**\n\n  *No ads, no subscriptions, just pure tuning perfection for musicians.*\n\u003c/div\u003e\n\n## ✨ Features\n\n### 🎯 **Accurate Tuning**\n- ✅ Real-time frequency detection using FFT + autocorrelation\n- ✅ Visual gauge with needle responsiveness and smooth animations\n- ✅ Color-coded feedback: Flat (♭) = Red/Left, Sharp (♯) = Yellow/Right, In Tune = Green\n- ✅ Precision within ±1.5 cents for perfect tuning\n- ✅ Automatic string detection with manual override option\n- ✅ Amplitude-based signal validation for clean readings\n- ✅ Subtle gradient tint shifts (red → orange → green) reinforce tuning status\n\n### 🎵 **Multiple Instruments \u0026 Tunings**\n- **Guitar**: Standard, Drop D, Drop C, Open G, DADGAD\n- **Bass Guitar**: 4-string standard tuning\n- **Ukulele**: Standard tuning (G C E A)\n- **Violin**: Standard tuning (G D A E)\n- **Mandolin**: Standard tuning (G D A E)\n- Custom tuning creation and management\n\n### 🎨 **Beautiful Interface**\n- Modern gradient design with smooth animations\n- Dark/Light theme support for stage performance\n- Intuitive string selection with visual feedback\n- Responsive design for all screen sizes\n\n### ♿ **Accessibility First**\n- Haptic feedback when perfectly in tune\n- Color-blind safe visual indicators\n- High contrast ratios for visibility\n- Voice-over support\n\n### ⚙️ **Customizable Settings**\n- Reference frequency adjustment (A4 = 430-450 Hz in 0.5 Hz increments)\n- Microphone sensitivity levels\n- Theme selection (Light/Dark)\n- Language selection (English/Portuguese)\n- Haptic feedback toggle\n- Keep screen on during tuning\n\n## 📱 Screenshots\n\n| Main Tuner | Settings | Tunings |\n|------------|----------|---------|\n| ![Main Screen](docs/ui/mockup_01.png) | ![Settings](docs/ui/mockup_02.png) | ![Tunings](docs/ui/mockup_03.png) |\n\n## 🚀 Getting Started\n\n### Prerequisites\n\n- Flutter 3.9.0 or higher\n- Dart SDK 3.0.0 or higher\n- Android Studio / VS Code with Flutter extension\n- Physical device or emulator with microphone access\n\n### Installation\n\n1. **Clone the repository**\n   ```bash\n   git clone https://github.com/pbalduino/menio_tuner.git\n   cd menio_tuner\n   ```\n\n2. **Install dependencies**\n   ```bash\n   flutter pub get\n   ```\n\n3. **Run the app**\n   ```bash\n   flutter run\n   ```\n\n### Development Setup\n\n```bash\n# Check Flutter installation\nflutter doctor\n\n# Run tests\nflutter test\n\n# Build for Android\nflutter build apk\n\n# Build for iOS\nflutter build ios\n```\n\n## 🏗️ Architecture\n\n### Project Structure\n```\nlib/\n├── main.dart              # App entry point\n├── app.dart              # App configuration\n├── screens/              # UI screens\n│   ├── tuner_screen.dart    # Main tuning interface\n│   ├── settings_screen.dart # Settings and preferences\n│   └── tunings_screen.dart  # Tuning selection\n├── widgets/              # Reusable UI components\n│   └── tuner_gauge.dart    # Custom gauge widget\n├── services/             # Core business logic\n│   ├── audio_processor.dart # Audio input processing\n│   └── signal_processing.dart # FFT and frequency analysis\n└── data/                 # Data models and storage\n    └── tunings.dart        # Tuning definitions\n```\n\n### Key Technologies\n- **State Management**: StatefulWidget (upgrading to Riverpod)\n- **Audio Processing**: ✅ FFT + Autocorrelation via `flutter_audio_capture`\n- **UI Framework**: Flutter Material Design\n- **Platform Integration**: ✅ Native audio permissions via `permission_handler`\n\n## 🔧 Technical Details\n\n### Audio Processing\n- **Buffer Size**: 4096 samples @ 44.1 kHz (~93ms latency)\n- **Frequency Range**: 80-2000 Hz (covers guitar fundamentals)\n- **Noise Filtering**: Low-pass filter at 2 kHz\n- **Smoothing**: Exponential moving average for stable readings\n\n### Performance Optimizations\n- ✅ Audio processing pauses when app is backgrounded\n- ✅ Efficient memory management with proper disposal\n- ✅ Smooth 60fps animations with minimal jank\n- ✅ Battery-optimized microphone usage\n- ✅ Lifecycle-aware audio stream management\n- ✅ Permission-based audio access control\n- ✅ Optional debug mode with logging \u0026 diagnostics overlay\n\n## 📋 Roadmap\n\n### 🔴 High Priority\n- [x] ~~UI Design \u0026 Navigation~~ ✅\n- [x] ~~**Real-time Audio Input Processing**~~ ✅ ([#1](https://github.com/pbalduino/menio_tuner/issues/1))\n- [x] ~~**Tuning Selection Navigation**~~ ✅ ([#2](https://github.com/pbalduino/menio_tuner/issues/2))\n\n### 🟡 Medium Priority\n- [x] ~~**Frequency Smoothing**~~ ✅ ([#3](https://github.com/pbalduino/menio_tuner/issues/3))\n- [x] ~~**Fix Default String Selection**~~ ✅ ([#17](https://github.com/pbalduino/menio_tuner/issues/17))\n- [x] ~~**Debug Logging**~~ ✅ ([#18](https://github.com/pbalduino/menio_tuner/issues/18))\n- [ ] **Internationalization (i18n)** ([#19](https://github.com/pbalduino/menio_tuner/issues/19))\n- [ ] **Haptic Feedback** ([#4](https://github.com/pbalduino/menio_tuner/issues/4))\n- [ ] **Color-blind Accessibility** ([#5](https://github.com/pbalduino/menio_tuner/issues/5))\n- [ ] **Dark/Light Theme Support** ([#7](https://github.com/pbalduino/menio_tuner/issues/7))\n- [ ] **State Management (Riverpod)** ([#9](https://github.com/pbalduino/menio_tuner/issues/9))\n\n### 🟢 Low Priority\n- [ ] **Custom Tuning Creation** ([#13](https://github.com/pbalduino/menio_tuner/issues/13))\n- [ ] **Multi-instrument Support** ([#16](https://github.com/pbalduino/menio_tuner/issues/16))\n- [ ] **Advanced Settings** ([#12](https://github.com/pbalduino/menio_tuner/issues/12), [#15](https://github.com/pbalduino/menio_tuner/issues/15))\n\n[View all issues →](https://github.com/pbalduino/menio_tuner/issues)\n\n## 🤝 Contributing\n\nWe welcome contributions! Please see our [Contributing Guidelines](CONTRIBUTING.md) for details.\n\n### Development Workflow\n1. Fork the repository\n2. Create a feature branch (`git checkout -b feature/amazing-feature`)\n3. Make your changes\n4. Add tests if applicable\n5. Commit your changes (`git commit -m 'Add amazing feature'`)\n6. Push to the branch (`git push origin feature/amazing-feature`)\n7. Open a Pull Request\n\n### Code Style\n- Follow [Dart Style Guide](https://dart.dev/guides/language/effective-dart/style)\n- Use `flutter analyze` to check for issues\n- Format code with `dart format .`\n- Write tests for new features\n\n## 📄 License\n\nThis project is licensed under the MIT License - see the [LICENSE](LICENSE) file for details.\n\n## 🙏 Acknowledgments\n\n- Flutter team for the amazing framework\n- Open source audio processing libraries\n- Musicians who provided feedback and testing\n- Contributors who help make this project better\n\n## 📞 Support\n\n- 🐛 **Bug Reports**: [Create an issue](https://github.com/pbalduino/menio_tuner/issues/new?template=bug_report.md)\n- 💡 **Feature Requests**: [Create an issue](https://github.com/pbalduino/menio_tuner/issues/new?template=feature_request.md)\n- 💬 **Questions**: [Start a discussion](https://github.com/pbalduino/menio_tuner/discussions)\n\n---\n\n\u003cdiv align=\"center\"\u003e\n  \u003cimg src=\"docs/assets/logo-simple.svg\" alt=\"MenioTuner\" width=\"32\" height=\"32\"\u003e\n\n  **Made with ❤️ for musicians by musicians**\n\u003c/div\u003e\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fpbalduino%2Fmenio_tuner","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fpbalduino%2Fmenio_tuner","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fpbalduino%2Fmenio_tuner/lists"}