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.