-
Notifications
You must be signed in to change notification settings - Fork 167
Description
I'm happy to create a PR for this feature if it aligns with Link's vision. This request outlines the concept for your feedback before I start implementation work.
Overview
I'd like to propose adding an optional metadata field to Link that would allow applications to share musical information beyond timing, with an initial focus on musical key data. This extension is designed with strict backward compatibility as the primary requirement, ensuring no disruption to existing Link integrations.
Use Case
I currently use Link when connecting DJay Pro with Ableton Live and custom software. While the tempo, beat, and phase synchronization works wonderfully, I'd like to also share the musical key of songs between applications. This would be particularly valuable for:
- DJs mixing between applications
- Live performers who want to stay in the same key during a jam
- Generative music apps that need to know the current key to produce complementary sounds
Proposed Implementation
I envision this as an optional field that:
- Is 100% backward compatible with all existing Link clients
- Uses the extensible protocol design to ensure older clients can safely ignore it
- Contains a flexible metadata structure with key/value pairs
- Includes specific support for musical key information (e.g., "C", "Am")
- Has a "follow strength" parameter for how strictly to adhere to the key
Backward Compatibility Guarantees
The implementation would ensure:
- Zero impact on existing clients: Applications using older versions of Link would continue to function exactly as before
- No protocol breakage: The extension would use the existing payload mechanism that allows clients to ignore unknown fields
- Opt-in functionality: New API methods would be separate from the core timing functions
- Graceful degradation: In mixed environments with new and old clients, timing sync would work for all while metadata would be available only to clients that support it
Technical Considerations
- The implementation would follow the existing serialization patterns in the codebase
- The API would provide straightforward methods to get/set metadata values
- Performance impact would be minimal as the data is small and changes infrequently
- All changes would be made with the utmost attention to preserving the robust nature of Link
Next Steps
I'm willing to implement this feature and submit a PR if there's interest. Before proceeding, I'd like feedback on:
- Is this kind of extension in line with the Link roadmap?
- Are there any architectural concerns I should be aware of?
- Any specific design requirements or constraints to consider?
Thank you for considering this proposal!