Breathing new life into vibrotactile MIDI experiences
Taking the novel concept of MIDI playback through Nintendo Switch JoyCon haptics and reimagining it in Rust. This isn't just a port - it's a complete architectural rethink leveraging Rust's robust type system and zero-cost abstractions.
I mainly want to do this to learn rust - but also I think the C++ version was poorly made during my time in school. This should be a better version that is actually thought out.
This is an active rewrite of the original C++ implementation. While we're making steady progress, expect significant architectural changes and evolving APIs.
- Multi-track Support: Independent control over dual JoyCon haptics
- Zero-overhead Abstractions: Leveraging Rust's type system for performant, safe hardware interaction
- Track Merging and Ordering: Dynamically merge and order tracks based on their score throughout the song
musical-joycons/
├── src/
│ ├── joycon/ # Bluetooth and haptic control
│ ├── midi/ # MIDI/Audio processing pipeline
│ └── config/ # Runtime configuration
# Clone the repository
git clone
# Build development version
cargo build
# Run tests
cargo test
btleplug
: Rust-native Bluetooth LE connectivity- Additional dependencies to be determined during development
- [*] Core JoyCon communication layer
- [*] MIDI parsing and transformation
- [*] Haptic pattern generation
- Track Layering
- Configuration and UI layer
While the project is in active development, we welcome discussions and ideas. Feel free to open issues for feature suggestions or architectural feedback.
TBD
- Nintendo Switch Reverse Engineering community
- Rust Embedded community
This README reflects the current development state and will evolve alongside the project.