bodgedbutworks / Blaize_V3

BLAIZE animation software for projectors
GNU General Public License v3.0
30 stars 8 forks source link

is anyone working on implementing a MIDI interface? #7

Closed tylerstraub closed 2 years ago

tylerstraub commented 2 years ago

I really want to help this project get decent midi support for interface control, is this a viable control mechanism?

bodgedbutworks commented 2 years ago

Hi, yes, MIDI is quite a universal protocol in my opinion and would suit Blaize 3. I recommend implementing a MIDI learn mode that lets users select a button/slider in Blaize an then press/move an element on their midi controller to connect to.

Remotely controlling Blaize has been on my todo list for some time, although I will probably use the Art-Net protocol to be able to use lighting control software as my remote controller and include Blaize in a "conventional" event lighting setup.

Have fun implementing, I look forward to your results!

tylerstraub commented 2 years ago

Okay so, I am closing this thread out because I have deviated in my approach.

As you mentioned, the most practical use case for Blaize is on a separate machine, remotely controlled through a network protocol such as Art-Net.

After reverse engineering the TCP interface that is already somewhat roughly implemented I have come away with this:

// TRS DOCUMENTATION FOR BLAIZE EXPECTED TCP DATA STRUCTURE

- messages are split on new line (/n)
- messages expect a C value (address registry) and a V value (data registry)

// CHANGE CURRENT PRESET
- C values of 0-31 trigger preset changes (V value must be 0)

ex: 
    C10V0 (switch to preset 10)

// CHANGE COLORS
- value 32 triggers color buttons
- selectable V values for colors are a range from 0-7
    0: RED
    1: YELLOW
    2: GREEN
    3: CYAN
    4: BLUE
    5: MAGENTA
    6: WHITE
    7: RANDOM

ex: 
    C32V1 (change color to yellow)
    C32V1/nC32V6 (change color to green and white when multicolor enabled)

// CHANGE BUTTONS (on/off)
- values 36-42 seem to toggle on/off buttons with value 0-1 (some do nothing?)
    36: MULTICOLOR
    37: BLACKOUT
    38: BPM
    41: LINE MOVE

// CHANGE SLIDERS
- C values of 44-47 control the main sliders with a V range of 0-100
    44: SPEED
    45: SIZE
    46: BRIGHTNESS
    47: STROBING
    50: SHADING

My approach to enable indirect MIDI support is now going to be from a Max for Live patch. I intend on doing all of the MIDI bindings here, and having the Max patch connect directly to the TCP socket and forward stream the value changes there.

I will share this patch when it is complete! Also creating an external settings.cfg file the processing sketch can read from to configure certain functionality like output resolution settings, explicit target display definition, and configurable port number for the TCP server (maybe other things too...)

Art-Net interface would be cool someday too :)