Day 15: (Tue Oct 24, Week 9) Introduction to OSC and MIDI

Notes for 2023-10-24.

New Assignments

  1. New assignment, due in a week: choreograph a light and motion performance at least two minutes long.

Agenda

  1. Review of recent progress:

    • we assembled the current machine right before break

    • I fabricated new lighting gel holders

    • I rewrote the control code into separate lighting and motion servers

    • I wrote a new MIDI translation layer and tested with Logic

    • I recorded a five-minute performance

    • We ran at least 108 performances since last Wednesday as per the logs

  2. Introduction to OSC and MIDI. References:

  3. Detailed walkthrough of new theater control software.

  4. Discussion of next steps.

    • What’s the next revision of the hardware?

notes on IDeATe Cluster MacBook Pro

  1. Currently has Python 3.11.5 installed, but no extra packages.

    • Audio MIDI Setup.app: configure and enable IAC Driver

    • Max 8.5.6 installed and authorized via keyserver

    • Ableton Live 10 Suite installed

  2. Setting up python:

    • pip3 install mido python-osc scipy matplotlib python-rtmidi PyQt6

    • download tools.zip and theater.zip

  3. Running the MIDI to OSC bridge client:

    • set up IAC Driver bus to communicate MIDI out of Live

    • python3 MIDI-bridge.py --ip 172.24.26.199 --midi 'IAC Driver Bus 1' --console --debug

    • connect MPD218 or run virtual-MPD218.py

  4. Recording events with Ableton Live:

    • from Settings, enable the MIDI busses

    • set first track output to IAC Driver (Bus 1) Ch 1

    • set second track output to IAC Driver (Bus 1) Ch 2

    • set track inputs to either virtual or real MPD218

    • arm track recording for either channel, press record, perform in real time

Using your own computer

  1. You’ll need some kind of MIDI sequencer capable of MIDI output:

  2. You’ll need some means of sending MIDI from the sequencer to Python:

    • macOS: Audio MIDI Setup IAC Bus

    • Windows: loopMIDI (VirtualMIDI)

  3. You’ll need some kind of input device

    • recommended: check out MPD218 from Lending

    • also possible: use virtual-MPD218.py