mixxx-launchpad icon indicating copy to clipboard operation
mixxx-launchpad copied to clipboard

Adding devices.

Open christianholman opened this issue 10 months ago • 2 comments

Hi! I've been spending some time mapping out the Denon SC Live 4 for myself, and I keep trying to optimize my typescript structure and seem to end up closer and closer to yours. Does it make sense to fork this repository to add support for a DJ controller like the SC Live 4, and if so, what would you say would be the best first steps, entrypoint-wise etc.? Thank you!

christianholman avatar Apr 15 '24 19:04 christianholman

Also, if it makes sense, are you open to PRs adding such a device? How would you want naming conventions to be upheld between brands and devices?

christianholman avatar Apr 15 '24 19:04 christianholman

Hi @christianholman

I've been spending some time mapping out the Denon SC Live 4 for myself, and I keep trying to optimize my typescript structure and seem to end up closer and closer to yours.

That's satisfying to hear, indicates the structure is generic enough for supporting other controllers.

Does it make sense to fork this repository to add support for a DJ controller like the SC Live 4, and if so, what would you say would be the best first steps, entrypoint-wise etc.?

The major shortcoming of the current code is a lack of support for faders, knobs, encoders, as I was focusing on launchpad which only has buttons. This started to change with intoducing Novation LaunchControl, but that code is still highly experimental. One thing I think might be different between these Novation controllers and your Denon, is that the former are very generic; basically you get a grid system, while on the latter I assume every physical control more or less has a purpose. So the generic layout descriptor I introduced for the Launchpad (however not yet using for the LaunchControl) is not that useful.

I suggest if you want to start out, start it simple. Create a package for your controller, inherit from MidiDevice, see if its generic enough, add some controls, see if there's some additional functionality you would need. Try to follow the LaunchControl code, although it is not very clean, but the LaunchPad code has this declarative description system which is not generic enough to be used, and also the diffing layouting is not needed I guess for Denon.

If you find it useful, I am open to publishing the generic packages, i.e mixxx and common to npm packages that could be used in your fork, also, separating a framework repo that contains and publishes this build system as npm package, so you could invoke something like mixxx-control build my-controller to build the controller script.

Unfortunately I don't have much time nowadays to work on these scripts, all my spare time on mixxx is spent on integrating AI driven stem separation, but I'll find some time to review any PRs or your fork.

dszakallas avatar May 09 '24 20:05 dszakallas