StreamDeck support


#1

Hi everybody,

I just stumbled over Streamdeck, which looks like a incredible useful device for increasing the workflow efficiency. Basically it’s a USB device with 15 pressable buttons (so you get a tactile feedback) that have LCD displays beyond them:

It’s main target group is gamers, but it can be super useful for us audio folk too:

DAWs or audio editors

  • transport buttons that start blinking on playback
  • hotkeys that are greyed out if unavailable

Plugins

  • toggling boolean plugin-parameters
  • key-switches for switching articulations / presets

There are already some APIs available, but they are for node.js and C# (.NET), so I figured having a JUCE module that wraps the functionality in the JUCE style would be awesome. I’d imagine something like this:

class StreamDeckListener
{
    // Notifies your class when it gets the focus
    virtual void streamDeckFocusGained() = 0;

    // Gets called when the user presses a button and your class has the focus
    virtual void streamDeckButtonClicked(int index) = 0;

    // Draws the icon for the given button
    virtual void drawButtonIcons(int buttonIndex, Graphics& g) = 0;

    // Locks the Streamdeck to this class and prevents other Listeners to grab the focus
    void lock();
};

I am willing to write this module and publish it under a MIT license, so if anybody is interested in this, please second my request for a simple C API to the company so they know that’s something people are interested in.

Best,
Christoph


#2

Nice. been looking for something like that for ages - can’t believe that slipped by.


#3

Thanks for the find. I can’t believe they market this to streamers :o. Isn’t it just a lcd keyboard like the much hyped optimus maximus? It would be amazing for apps like sibelius or blender to replace the numeric keypad.


#4

Yes, LOL I didn’t even know what streamers are. Last time I heard this word was for the markers that appear on the film for conductors to synchronise the orchestra to the screen way before the digital area, so I guess that’s how you realise you get old :slight_smile:

I noticed there is already a general purpose USB interface library from the company called hidapi and with this and reverse engineering the node.js library to get the magic numbers that talk to the device we’re almost there.

I think I’ll use a separate process and use the InterProcessConnection stuff to talk / listen to the device. This allows multiple plugins / applications to communicate with each other and lock / unlock their focus.