Visual Metronome with Multi-Device Wireless Synchronization
Features • Screenshots • Installation • Usage • Architecture • Contributing
TokTokgom is a revolutionary visual metronome app for iOS that enables musicians to practice together in perfect sync through multi-device wireless synchronization. Unlike traditional audio metronomes, TokTokgom's visual-first design works perfectly in noisy environments and provides an accessible rhythm tool for all musicians, including the hearing-impaired community.
톡톡곰은 iOS를 위한 혁신적인 시각적 메트로놈 앱으로, 다중 기기 무선 동기화를 통해 음악가들이 완벽한 동기화 상태로 함께 연습할 수 있게 합니다.
- Wireless sync across unlimited iOS devices via WiFi or Bluetooth
- ±10-50ms accuracy for professional ensemble practice
- Host & Join sessions with automatic peer discovery
- Real-time sync of tempo, time signature, and beat changes
- Bold pulsing animations designed for maximum visibility
- Downbeat emphasis with distinct visual and haptic feedback
- Customizable themes to match your preference
- Works without audio - perfect for noisy practice spaces
- Tap Tempo: Set BPM naturally by tapping the screen
- BPM Range: 30-300 BPM for all musical styles
- Time Signatures: 2/4, 3/4, 4/4, 5/4, 6/8, 7/8, 9/8 and more
- BPM Presets: Quick access to common tempo markings
- Haptic Feedback: Feel the beat with customizable vibration
- Fully visual metronome requiring no audio
- VoiceOver support for blind and low-vision users
- High-contrast visual indicators
- Inclusive design for hearing-impaired musicians
Coming soon - screenshots will be added before App Store submission
- iOS 17.0+
- Xcode 15.0+
- Swift 5.9+
- Physical iOS device (required for MultipeerConnectivity testing)
- Clone the repository
git clone https://github.com/bear3283/TokTokgom.git
cd TokTokgom- Open in Xcode
open TokTokgom.xcodeproj- Configure Permissions
The app requires local network access for multi-device sync. Permissions are already configured in Info.plist:
- Local Network Usage: For wireless device discovery
- Bonjour Services:
_toktokgom-sync._tcp
- Build and Run
- Select a physical iOS device (Simulator doesn't support MultipeerConnectivity)
- Build (⌘+B) and Run (⌘+R)
- Open TokTokgom
- Tap the tap area to set your desired tempo
- Press Start to begin the visual metronome
- Adjust BPM, time signature, or theme as needed
- Tap the 👥 icon in the top toolbar
- Select "Host Session"
- Enter a session name (e.g., "Band Rehearsal")
- Wait for participants to join
- Approve incoming connection requests
- Start the metronome - all connected devices sync automatically
- Tap the 👥 icon in the top toolbar
- Select "Join Session"
- Choose from nearby available sessions
- Wait for host approval
- Once connected, your device will sync with the host's metronome
Note: All devices must be within ~30 feet and have WiFi or Bluetooth enabled.
TokTokgom follows MVVM (Model-View-ViewModel) architecture with clean separation of concerns:
TokTokgom/
├── Models/
│ ├── TimeSignature.swift # Time signature data model
│ ├── MetronomeState.swift # Metronome state enum
│ ├── SessionRole.swift # Solo/Host/Participant roles
│ ├── SessionState.swift # Session connection state
│ ├── SyncMessage.swift # Sync protocol messages
│ └── Peer.swift # Peer device info
│
├── ViewModels/
│ ├── MetronomeViewModel.swift # Main metronome logic
│ └── SessionViewModel.swift # Session management
│
├── Views/
│ ├── MetronomeView.swift # Main screen
│ └── Components/
│ ├── BeatVisualizer.swift # Pulsing beat animation
│ ├── TapArea.swift # Tap tempo interface
│ ├── BPMDisplay.swift # BPM numeric display
│ ├── SessionDiscoveryView # Host/Join interface
│ └── ...
│
└── Services/
├── MetronomeEngine.swift # High-precision timer
├── TapTempoDetector.swift # BPM calculation
├── MultipeerService.swift # P2P networking
└── SyncManager.swift # Clock sync algorithm
- SwiftUI: Modern declarative UI framework
- Combine: Reactive programming for state management
- MultipeerConnectivity: P2P device discovery and communication
- AVFoundation: Audio session management
- UIKit Haptics: Tactile feedback generation
For detailed architecture documentation, see ARCHITECTURE_DESIGN.md.
- 🎸 Ensemble Musicians: Band, orchestra, chamber groups
- 👨🏫 Music Teachers: Lead synchronized group lessons
- 🎓 Music Students: Practice with precision and consistency
- 💃 Dance Instructors: Choreography timing for multiple students
- 🎹 Solo Musicians: Practice in noisy environments
- ♿ Hearing-Impaired Musicians: Accessible rhythm training
- Band Rehearsals: Every member sees the same synchronized beat
- Orchestra Practice: Section leaders coordinate tempo across ensemble
- Music Education: Teachers demonstrate tempo to entire class simultaneously
- Dance Classes: Multiple students follow the same rhythm wirelessly
- Recording Sessions: Visual click track for quiet recording environments
- Noisy Venues: Visual metronome works where audio metronomes fail
- Visual metronome with tap tempo
- Multi-device wireless synchronization
- Time signature support (2/4 through 9/8)
- Haptic feedback
- Customizable themes
- BPM presets
- NTP-style clock sync for sub-10ms accuracy
- Background mode support with audio session
- Connection quality indicator (signal strength, latency)
- Session passwords for private sessions
- Subdivision indicators (eighth notes, triplets)
- Practice mode with gradual tempo changes
- Session recording and playback
- Cloud sessions for remote synchronization
- Architecture Design: Detailed system architecture and component design
- Implementation Guide: Development phases and implementation details
- Nearby Connectivity Setup: Multi-device sync configuration and testing guide (Korean)
- App Store Promotional Materials: Marketing copy and ASO strategy
Run unit tests for core services:
⌘+U in XcodeRequirements:
- 2+ physical iOS devices (Simulator doesn't support MultipeerConnectivity)
- WiFi or Bluetooth enabled
- Devices within ~30 feet
Test Scenarios:
- Basic Sync: Host session → Join from second device → Start metronome → Verify sync
- BPM Change: Change BPM on host → Verify participant updates
- Time Signature: Change time signature → Verify sync
- Disconnect: Host leaves → Verify participant transitions to solo mode
Contributions are welcome! Please follow these guidelines:
- Fork the repository
- Create a feature branch (
git checkout -b feature/AmazingFeature) - Commit your changes with descriptive messages
- Push to the branch (
git push origin feature/AmazingFeature) - Open a Pull Request
- Follow Swift API Design Guidelines
- Use SwiftUI best practices
- Maintain MVVM architecture patterns
- Add comments for complex logic
This project is licensed under the MIT License - see the LICENSE file for details.
bear3283
- GitHub: @bear3283
- Built with SwiftUI
- Follows Apple Human Interface Guidelines
- Inspired by the needs of musicians practicing in real-world conditions
- Special thanks to the hearing-impaired music community for accessibility insights
- Issues: GitHub Issues
- Discussions: GitHub Discussions
Made with ❤️ for musicians everywhere
⭐ If you find this project helpful, please give it a star!
