Stream Deck Extension and Stream Deck Plus?

Thanks. I understand and fully agree with your viewpoint on how best to use Companion and Stream Deck. The non-music use cases will definitely be secondary for me.

Interesting solution.

Just found out that Bitfocus is a norwegian company (I’m norwegian), and that one of the top sponsors for Companion is The Norwegian National Opera & Ballet.

I wonder; Is this just about handeling buttons? Should I still go for Open Stage Control if I want to control faders and knobs from my iPad?

The nature of OSC is to send a single discrete value at a single instant. So, think of switching. If your use case is to use OSC to carry out rapid sequential changes (similar to a Mod Wheel MIDI CC1 - possibly with CC33 as LSB for 14 bit resolution …?) the sheer volume data to transfer as OSC UDP packets -might- become significant… depending on a number of possible things, I suppose. Can’t say for sure. Hardware MIDI 1.0 UART spec was 31.25kbps if memory serves.

If what you need to do in your use case is send all kinds of dynamic changes for example (something I do all the time but a different way, I think) then a stream of MIDI CC data might be a more efficient medium.

From my own experience for any type of continuously changing “fine” MIDI data, using knobs on a MIDI controller to build an audio mixer for example - that you can rely upon - I would let Gig Performer do your continuous MIDI reception (and mapped to VST host control too) and leave OSC to handle statistically rare by comparison single switching operations.

My guess is that would give you the best profile for those types of data.

My cost $0.02 no receipt required.

OSC was originally developed as an attempt to replace MIDI, running at higher rates and intended for continuous change.

A lot of alternative controllers, such as the Eigenharp which I play, are designed to let you play far more fluently than can be done with a keyboard and depend on OSC

1 Like

Thanks David. My thinking was about the larger quantity of bytes “change per change” comparing the bit count of a series of OSC paths likely through a LAN, with a comparable series of CC messages through the same 1981 UART that was probably in my 1983 300 baud modem (!)

Having said that I’ll share that my grade 10 math teacher once looked at me in frustration and pointed at the door saying, “Out. Just get out, ok?”

Lots of interesting info, but a little bit confused by these answers.

My use case, I think will, be using my iPad for some faders for mixing.

What I was wondering was if Companion can control faders at all, or if it’s just an interface for pressing buttons.

I would say give Companion a try. There’s a lot of ways you could use it, really depending on what you’re controlling. It sends single or sequences of OSC paths to devices. You can build sequences of paths or not. It’s pretty open ended that way. It’s not like buying an appliance, it’s more like buying wire I guess. Kind of like Gig Performer it depends what you want it to do for you.

It might be a particularly good option for software or a device that it particularly supports too,

1 Like

Googled a little and checked youtube. Don’t seem like they’re quite there when it comes to handling fader movements. Think they can make a fader jump to a new position when pressing a button, but not so sure that they can handle fluent fader movements.

I would say from my experience that’s absolutely the case. But again, results will depend on the device. For example I can send an ATEM Mini Pro an OSC command to reduce a given audio gain by a given amount, send ten such commands within a few ms of each other and get a pretty convincing quick fader move. In GP I can send MIDI CC mapped to a volume parameter of a GP Mixer plugin and get a very smooth result, at any arbitrary rate. Depends very much on setup and device.

1 Like

One question I have about Streamdeck with Bitfocus Companion…

One thing I’d really want to be able to do with a Streamdeck is have GP (through scripting or an extension) write its own data to the labels on the buttons.

As a really simple example, I’d like to be able to select Rackspaces or Variations through a Streamdeck. To do so a GP script or extension would need to write the names of the Rackspaces to the buttons and have those update in roughly real time if I were paging through Rackspaces.

Is something like that possible? I love the idea of the Streamdeck, but in practice I don’t want to have to pre-define everything I want appearing on a “page” of buttons. If I re-order rackspaces or add new ones I’d like the buttons to be kept in sync.

I do this kind of thing with OSC already. But I like physical buttons and knobs better than touchscreens. I’m intrigued by Streamdeck Plus as a controller, but it’s not obvious to me if there’s a way for GP to re-write the images or labels for the buttons on the fly.

This is what the GP Stream Deck extension does. That’s not to say it couldn’t do with some improvements to things like text wrapping. But as is, it will dynamically update to show rackspace and variation names, and song/part names.

I’ve done this - having GP write a string to a Companion button, which shows up on the Streamdeck (and simultaneously any emulated browser) button, implicitly confirming the operation reported by the string from GP. Works perfectly.

May be worth mentioning this works the same whether the Companion button is part of a “native” Companion button array (99 available to be served) or if it is a Companion button type used within a Streamdeck profile folder of buttons (using the Companion button plugin in the Streamdeck application.

Main problem for me is the character size, colours, line breaks etc on the button. Depending on eyesight I suppose you’ll need to be parsimonius with the string you display but it does work. Companion doesn’t know about Gig Performer per se when using the generic OSC plugin, but it works fine.

I assume that if you can re-write this string based on a widget value, rackspace name, etc. you can also change the color based on whatever you want? Can you do that by specifying RGB values?