For the better part of this year, building a Tally interface for Wirecast and XSplit has been in the back of my mind. However it's only recently that I decided to focus on development. The core of this project is everyone's favorite Microcontroller prototyping platform, Arduino. In particular, one of the catalysts for me actually starting active development was discovering the Arduino Leonardo. The Leonardo is special because it features the ATmega32u4, which has native USB communication, as opposed to previous generations which required a separate USB controller. The native controller of the 32u4 allows for emulation of HID devices, which is what piqued my interest.
Seeing as Wirecast and XSplit both do not have support for tally, and neither program's API is great, I decided to do something which would make the device appear transparently to whatever video switching software I was using at the time. Since the way that I was already switching cameras in these programs involved using keyboard macros, I decided that this would be my way in.
Originally, I ordered a Leonardo and a USB Host shield. My general idea involved plugging a keyboard or dedicated keypad into the Arduino, have it analyze the input, illuminate the correct light, and then use the HID emulation of the Leonardo to pass that back through to the host Operating System. Eventually I stalled on this, and got sidetracked, causing development to stop.
A few weeks later I had a much better idea. Why would I bother intercepting the input of a keyboard? Why shouldn't the input just be coming from buttons themselves wired up the Arduino? I started development again, and didn't stop until I reached the working proof of concept I'm showing off today.
I also recoded a short demo video of this device working in Wirecast, embedded here, and there is a demo video featuring XSplit on the same YouTube Channel.