|Mark van Renswoude 4d364c6be2
Control audio devices using physical knobs. And more.
Inspired by an article on Prusa's blog, this project has a slightly different set of goals. The original requirements were:
- Control volume using a potentiometer (fixed position) instead of a rotary encoder (endless rotation)
- Control specific audio devices, not the current default device
- Provide means of switching the default device by pressing a button
Because of these requirements, a simple media keys HID device does not suffice and extra software is required on the desktop. This opens up a range of possibilities.
- 🔊 Set the volume for specific devices / send the current volume to an analog output
- 🔇 Mute / unmute specific devices / send the muted state to a digital output (e.g. LED)
- 🎧 Set the default device / set a digital output based on the default device
- 💬 Optional OSD (On-Screen Display)
- 🔌 VoiceMeeter (Standard, Banana & Potato) plugin to execute macros or read the current state
Massive Knob is basically a host for plugins. A plugin can implement a device or actions which either process signals from the device to perform an action (for example, change the volume when a knob is turned) or send signals to the device based on the system state (for example, light up an LED to indicate the default device).
A device can provide the following inputs and outputs, up to 255 for each type (unless you're Look Mum No Computer I assume this will be enough):
- Analog input (e.g. a potentiometer)
- Digital input (e.g. a button or switch)
- Analog output (e.g. a PWM output, though not yet supported by the reference Arduino implementation)
- Digital output (e.g. an LED)
Connects to a compatible device on a Serial port, probably a USB device like an Arduino. The device must implement the Massive Knob protocol which uses the MIN protocol to send and receive frames. An Arduino Sketch is included with this repository which can be customized to suit your hardware layout.
Useful for development, this one emulates an actual device. The number of inputs and outputs are configurable, a popup allows changing the inputs and shows the state of the outputs.
The hardware side uses an Arduino sketch to communicate the hardware state over the serial port.
The Windows software is written in C# using .NET Framework 4.7.2 and Visual Studio 2019.
Refer to the bundled plugins for examples.
Some icons courtesy of https://feathericons.com/
Builds are automatically run using AppVeyor. Tagged master releases are available on the GitHub releases page. You can find an installer for each version under the "Assets" section for a release.