Theater System Overview

The theater software system is intended to run our class show. It is being developed with the following objectives in mind:

The system runs on a dedicated Ubuntu Linux server located in the theater space. The software is structured as several independent servers which primarily communicate using UDP networking and the OpenSoundControl (OSC) message format. The server provides a VPN for secure communication with external performance tools.

Core Data Flow Block Diagram

Following is an SVG figure showing the data flow through the core theater system. It may be easier to read by opening the frame in a separate window, if your browser allows.

digraph input_matching { node [fontsize=10] edge [fontsize=8] dpi="72" size="12,12!" // declare all nodes lights [label = "light fixtures"] steppers [label = "stepper motors"] valves [label = "pneumatic valves"] dmx [label = "DMX USB Pro"] stepperspline [label = "Arduino\nStepperSpline"] valvecontrol [label = "Arduino\nValveControl"] lighting [label = "lighting_server.py"] motion [label = "motion_server.py"] valve [label = "valve_server.py"] control [label = "show\ncontroller", style = "dashed"] director [label = "director.py"] schedule [label = "schedule", shape="cylinder"] // declare all edges stepperspline -> steppers [label = "CNC Shield"] dmx -> lights [label = "DMX"] valvecontrol -> valves [label = "ULN2803 Shield"] motion -> stepperspline [label = "USB"] valve -> valvecontrol [label = "USB"] lighting -> dmx [label = "USB"] control -> motion [label = "OSC UDP"] control -> lighting [label = "OSC UDP"] control -> valve [label = "OSC UDP"] director -> control [label = "exec"] schedule -> director label = "Theater System Core Data Flow" }

MIDI Data Flow Block Diagram

Following is an SVG figure showing the MIDI data flow through the theater system. This is a particular solution for implementing an interactive controller.

digraph input_matching { node [fontsize=10] edge [fontsize=8] dpi="72" size="12,12!" // declare all upper level nodes lighting [label = "lighting_server.py"] motion [label = "motion_server.py"] valve [label = "valve_server.py"] midishow [label = "MIDI-show.py"] Live [label = "Ableton Live"] drumpad [label = "MPD218 drum pad", shape = "box"] midifile [label = "MIDI\nfile", shape="cylinder", style = "dashed"] drumsim [label = "virtual_mpd218.py\nPyQt6"] colors [label = "color presets", shape="cylinder"] paths [label = "spline presets", shape="cylinder"] // MIDI based pipeline down to the OSC level midishow -> motion [label = "OSC UDP"] midishow -> lighting [label = "OSC UDP"] midishow -> valve [label = "OSC UDP"] paths -> midishow midifile -> midishow [label = "MIDI"] colors -> midishow Live -> midishow [label = "MIDI"] drumpad -> Live [label = "MIDI"] drumsim -> Live [label = "MIDI"] label = "Theater System MIDI Flow" }