Panel Design
The latest and greatest Hypno manual can be found here: sleepycircuits.com/hypno-manual
Hardware
PROCESSOR
Hypno Is essentially a fancy Pi Zero Hat. It uses Rasbian as its operating system and the pi zero GPIO to interface with an OpenGL Engine.
THE CV INPUTS
Hypno utilizes a common MCP3008 ADC via SPI to take in control voltages (scaled from -5 to 5v to a more acceptable 0 to 5V)
THE KNOBS
Knobs are taken into a single channel of the MCP3008 through a multiplexer. The knob values are offset in software based on the CV inputs.
Software
The system is written with C++ & GLSL. The system utilizes a "Layer" system where multiple shaders are "patched" with texture units to take advantage of the CPU's superior branching abilities. Shaders are dynamically swapped based on knob positions and mode selection.
Note: The codebase is not open source anymore due to me not having enough time to support all the requests. If you are interested in helping out on the software side send me a message: ron@sleepycircuits.com
OpenGL
The Engine runs on a basic engine with one plane in OpenGL where it draws the output of a GLSL shader. CVs + Knob values are fed into shader uniforms which are used in the engine to change things.
GLSL Shaders
The Shader system is inspired by analog video synthesis, every shape has a simulated "scan" over the screen and a function is mapped to it. This function can be rotated and the scan smoothly transformed into polar coordinates.
WiringPi
WiringPi is used for GPIO interactions because Arduino is fun and Im used to it already.
NDI
While this is not currently supported on the panel. The device sends Its video feed over NDI which means it can easily be used with existing VJ software like Resolume.
OTHER SOFTWARE
OSC
I used Lemur to prototype the panel before committing to panel layout. This lets you go through quick panel design iterations without sinking your paycheck into china. Some layouts are provided in the repo (but aren't guaranteed to work). The basic mapping is "/vidos/N" controlls "N"th CV. So to control cv 0 you would send a float value to "/vidos/0"
RTMIDI (NOT IN USE)
The codebase receives midi and logs it but doesn't current have a mapping to the Shader uniforms.
github link gives 404...