Using MIDI
You have a MIDI controller, Daydream Scope running AI-generated visuals, and a second piece of software (Resolume, TouchDesigner, or something else) that you want to control simultaneously. The problem: your OS typically lets only one application claim a physical MIDI device at a time. This guide walks through how to solve that with virtual MIDI routing, and covers the broader pattern of connecting Scope into a multi-app visual workflow.What You’ll Need
- A physical MIDI controller (any standard USB MIDI device works)
- Daydream Scope installed and running
- A second application: Resolume Arena/Avenue, TouchDesigner, or similar
- A virtual MIDI routing tool (details by OS below)
- Both apps running on the same machine, or networked via NDI
The Core Problem
Operating systems enforce exclusive access to physical MIDI devices. If Resolume grabs your controller, TouchDesigner can’t see it (and vice versa). The solution is a virtual MIDI routing layer that sits between your physical controller and your applications, duplicating the signal so multiple apps receive it simultaneously.Step 1: Set Up Virtual MIDI Routing
- macOS
- Windows
macOS ships with a virtual MIDI routing tool called the IAC Driver. No extra software needed.To duplicate your physical controller’s signal to both buses, you need a routing utility that copies the input to multiple outputs:
Add buses
Under Ports, click + to add buses. Create at least two: one for each app you want to receive MIDI (e.g., “Bus 1 - Scope” and “Bus 2 - Resolume”).
- MIDIFlow (free/paid, Mac App Store) — simplest dedicated tool
- MIDI Patchbay (free, from notahat on GitHub) — lightweight open-source option
- MIDI Monitor (free, from Snoize) — useful for verifying signals, but doesn’t do routing itself
Step 2: Connect Your Apps to Virtual MIDI Ports
Once virtual routing is running, configure each application to listen on its assigned virtual port instead of trying to claim the physical controller directly.Scope
Scope has built-in MIDI support with a mapping interface for connecting controller inputs to generation parameters.Select your device
Scope uses WebMIDI for device discovery, so your virtual MIDI port (or physical controller, if you’re not sharing it) should appear in the device list automatically. Select your MIDI device.
Resolume Arena/Avenue
Enable MIDI input
Open Preferences → MIDI and enable your virtual MIDI port (the one you assigned to Resolume in Step 1) for both Input and Output.
Enter mapping mode
Open the Shortcuts panel (menu bar → Shortcuts, or the shortcut icon). Select MIDI as the protocol. The interface changes color to indicate mapping mode.
TouchDesigner
Configure channels
On the Channel page, set the MIDI Channel to match your routing strategy. If you’re using channel separation (see Step 4), set this to only the channel(s) you want TouchDesigner to respond to. Leave it at “All” if you want TouchDesigner to hear everything.
- Direct export: Right-click the MIDI In CHOP channel → Export → select the target parameter on any operator
- MIDI Device Mapper: Open Dialogs → MIDI Device Mapper for a more portable mapping setup that separates your mapping from your network layout
Step 3: Connect the Video Pipeline
With MIDI routing handled, you need to get video between your apps. This is where Spout, Syphon, and NDI come in.Same Machine
- Windows: Use Spout to share textures between applications. Scope can output via Spout, and Resolume/TouchDesigner can receive Spout textures as sources
- macOS: Use Syphon for the same purpose. Resolume shows Syphon sources under Sources; TouchDesigner uses a Syphon Spout In TOP
Across Machines
- NDI works over your local network. Scope can output via NDI, and any NDI-compatible software on any machine on the same network can receive it without manual configuration
Step 4: Decide on a Channel Strategy
If both apps are listening to the same MIDI CC numbers, they’ll both respond to every knob twist and fader move. That might be what you want (synced control), or it might cause chaos.Start with Option A. It’s the simplest and works in most cases. Move to B or C only if you find yourself needing independent control per app.
Troubleshooting
No MIDI in one app
No MIDI in one app
Confirm the virtual port is enabled in that app’s MIDI preferences. Check that MIDI-OX (or your routing tool) is still running and routing to both virtual ports.
Both apps fighting over a parameter
Both apps fighting over a parameter
You’re probably sending the same CC to both without meaning to. Use channel separation or CC filtering (see Step 4).
Latency on MIDI response
Latency on MIDI response
Virtual MIDI routing adds negligible latency (sub-millisecond). If you’re experiencing lag, the bottleneck is likely in the application itself — particularly if Scope is running a heavy model on the GPU while another app is also doing GPU-intensive rendering.
Spout/Syphon source not appearing
Spout/Syphon source not appearing
Make sure both applications are running and that the sending app has actually started output. In Scope, verify that Spout/Syphon output is enabled in the settings. Restart the receiving app if the source was started after it launched.
NDI sources not visible
NDI sources not visible
Confirm both machines are on the same network and subnet. Firewalls can block NDI discovery. On Windows, allow NDI through Windows Firewall.
The General Pattern
This guide uses Resolume and TouchDesigner as examples, but the pattern applies to any combination of visual software:- Virtual MIDI routing solves the one-device-one-app OS limitation
- Channel/CC separation gives each app its own control lane when needed
- Spout/Syphon/NDI handles the video pipeline between apps
- OSC is an alternative to MIDI for network-based, higher-resolution control (floats instead of 0–127 integers), and most visual software supports it