MIDI Output Troubleshooting
This guide helps you diagnose and resolve common issues with Conductor’s MIDI output functionality, including SendMIDI actions, virtual MIDI ports, and DAW integration.
Quick Diagnostic Checklist
Before diving into specific issues, run through this quick checklist:
- Virtual MIDI port is created and online (IAC Driver, loopMIDI, ALSA)
- DAW has MIDI input enabled for the virtual port
- Conductor config specifies the correct port name (case-sensitive)
- MIDI messages are being sent (check
conductor --verboselogs) - DAW is receiving MIDI (check DAW’s MIDI monitor)
- Correct MIDI channel is used (usually Channel 0)
- No other applications are blocking the MIDI port
Common Issues
Issue 1: “Port not found” Error
Symptoms:
ERROR: MIDI output port "IAC Driver Bus 1" not found
Available ports: []
Possible Causes:
- Virtual MIDI port not created or offline
- Port name mismatch (case-sensitive)
- Conductor started before port was created
- Permissions issue (Linux/Windows)
Solutions:
macOS (IAC Driver)
-
Verify IAC Driver is online:
# Open Audio MIDI Setup open -a "Audio MIDI Setup"- Window → Show MIDI Studio
- Double-click IAC Driver
- Check “Device is online”
- Click Apply
-
List available MIDI ports to verify the exact name:
# Use conductor diagnostic tool cargo run --bin test_midi -
Restart Conductor daemon:
conductorctl stop conductor
Windows (loopMIDI)
-
Verify loopMIDI is running:
- Check system tray for loopMIDI icon
- If not running, launch loopMIDI from Start Menu
-
Verify port exists in loopMIDI:
- Open loopMIDI application
- Ensure at least one port is listed (e.g., “Conductor Virtual”)
-
Check exact port name (case-sensitive):
- Note the exact name shown in loopMIDI
- Update
config.tomlto match exactly:[modes.mappings.action.then_action] type = "SendMIDI" port = "Conductor Virtual" # Must match exactly
-
Restart Conductor:
conductorctl stop conductor
Linux (ALSA)
-
Verify virtual MIDI port exists:
aconnect -lLook for “Virtual Raw MIDI” or similar.
-
Load ALSA virtual MIDI module if missing:
sudo modprobe snd-virmidi -
Verify port name and update config:
# List MIDI ports aconnect -lUpdate
config.tomlwith the exact port name. -
Permissions (if port access denied):
# Add user to audio group sudo usermod -a -G audio $USER # Log out and log back in for changes to take effect
Issue 2: Messages Sent But Not Received by DAW
Symptoms:
- Conductor logs show messages being sent
- DAW doesn’t respond (no transport control, no parameter changes)
- No error messages
Diagnosis:
-
Enable verbose logging in Conductor:
conductor --verboseLook for lines like:
[DEBUG] Sending MIDI: NoteOn(note=60, velocity=100, channel=0) to port "IAC Driver Bus 1" -
Check DAW’s MIDI monitor:
- Logic Pro: View → Show MIDI Environment → Monitor
- Ableton Live: Preferences → Link, Tempo & MIDI → MIDI Ports (check Track/Remote enabled)
- Reaper: View → MIDI Device Diagnostics
Possible Causes & Solutions:
Cause 1: DAW MIDI Input Not Enabled
Logic Pro:
- Open Logic Pro → Settings → MIDI → Inputs (⌘,)
- Locate your virtual MIDI port
- Check the box to enable it
- Close Settings
Ableton Live:
- Open Preferences → Link, Tempo & MIDI
- In MIDI Ports section, find your virtual port
- Enable Track and Remote for the input port
- Close Preferences
Reaper:
- Open Preferences → MIDI Devices
- Find your virtual MIDI port in the input list
- Enable Enable input from this device
- Click OK
Cause 2: Wrong MIDI Channel
Solution: Most DAWs use Channel 0 (sometimes labeled as “Channel 1” in DAW UI). Verify your config:
[modes.mappings.action.then_action.message]
type = "NoteOn"
note = 60
velocity = 100
channel = 0 # Change to match DAW expectations
Test different channels (0-15) to find the correct one.
Cause 3: Wrong CC Numbers or Note Numbers
Solution: Use DAW’s MIDI Learn feature to discover correct values:
Logic Pro:
- Logic Pro → Control Surfaces → Learn Assignment
- Click the parameter to control
- Note the CC number shown (update your config)
Ableton Live:
- Click MIDI button (top-right, or press ⌘M)
- Click the parameter to control
- Press your MIDI controller (Ableton learns the mapping)
- Note the CC/Note number (if you want to replicate in config)
Cause 4: Control Surface Conflicts
Solution: Disable conflicting control surfaces in DAW:
Logic Pro:
- Logic Pro → Control Surfaces → Setup
- Disable any control surfaces using the same MIDI port
Ableton Live:
- Preferences → Link, Tempo & MIDI
- In Control Surface section, ensure no conflicting surface is assigned to the same port
Issue 3: Latency / Delayed Response
Symptoms:
- Noticeable delay (>50ms) between pad press and DAW response
- Audio/MIDI feels “laggy”
Possible Causes & Solutions:
Cause 1: High Audio Buffer Size
Solution: Lower DAW’s audio buffer size:
Logic Pro:
- Logic Pro → Settings → Audio
- Reduce I/O Buffer Size to 128 or 64 samples
- Note: Lower buffer = lower latency, but higher CPU usage
Ableton Live:
- Preferences → Audio
- Reduce Buffer Size to 128 or 64 samples
Reaper:
- Preferences → Audio → Device
- Reduce Block size to 128 or 64 samples
Cause 2: Third-Party Virtual MIDI Drivers
Windows: loopMIDI adds ~5-10ms latency. This is usually acceptable, but if critical:
- Consider rtpMIDI (network MIDI) for even lower latency
- Ensure loopMIDI is up to date
macOS: Use IAC Driver (native, near-zero latency) instead of third-party apps.
Linux: Use ALSA virtual ports (native, low latency) instead of JACK MIDI (higher latency).
Cause 3: System CPU Load
Solution:
- Close unnecessary applications
- Freeze/bounce tracks in DAW to reduce CPU usage
- Increase audio buffer size if CPU is maxed out (trade latency for stability)
Cause 4: Conductor Processing Delay
Diagnosis: Check Conductor logs for processing time:
conductor --verbose
If you see warnings about slow processing, check:
- Complex velocity curves (use simpler curves)
- Conditional actions with many conditions (simplify)
- Sequence actions with many steps (reduce)
Solution: Simplify mappings to reduce processing overhead.
Issue 4: Messages Sent to Wrong Port
Symptoms:
- DAW receives MIDI from a different source
- Conductor logs show correct port, but DAW sees different port
Possible Causes & Solutions:
Cause 1: Multiple Virtual MIDI Ports
Solution: List all available MIDI ports and verify exact name:
# Use Conductor diagnostic tool
cargo run --bin test_midi
Update config to use the correct port name (case-sensitive):
[modes.mappings.action.then_action]
type = "SendMIDI"
port = "IAC Driver Bus 1" # Not "IAC Driver Bus 2"
Cause 2: Port Name Changed
macOS (IAC Driver):
- If you renamed the bus in Audio MIDI Setup, update your config
Windows (loopMIDI):
- If you renamed the port in loopMIDI, update your config
- Restart Conductor after renaming
Issue 5: Velocity Not Working
Symptoms:
- All MIDI messages sent with same velocity (e.g., always 127)
- Velocity curves not being applied
Possible Causes & Solutions:
Cause 1: Fixed Velocity in Config
Problem: Config specifies a fixed velocity value:
[modes.mappings.action.then_action.message]
type = "NoteOn"
note = 60
velocity = 127 # Fixed velocity
channel = 0
Solution: Use a velocity curve to map input velocity:
[modes.mappings.action.then_action.message]
type = "NoteOn"
note = 60
channel = 0
[modes.mappings.action.then_action.message.velocity_curve]
type = "PassThrough" # Use controller velocity directly
Cause 2: Trigger Doesn’t Capture Velocity
Problem: Trigger type doesn’t include velocity information.
Solution: Use a trigger that captures velocity:
[modes.mappings.trigger]
type = "Note" # Captures velocity
note = 1
# Velocity is automatically available to velocity_curve
Issue 6: Virtual Port Not Visible in DAW
Symptoms:
- Virtual MIDI port exists (verified via OS tools)
- DAW doesn’t list the port in MIDI preferences
Possible Causes & Solutions:
macOS (IAC Driver)
Cause: DAW started before IAC Driver was enabled.
Solution:
- Enable IAC Driver in Audio MIDI Setup
- Restart the DAW
- Alternatively: Logic Pro → Settings → MIDI → Reset MIDI Drivers
Windows (loopMIDI)
Cause: DAW doesn’t detect dynamically created ports.
Solution:
- Create loopMIDI port before launching DAW
- If DAW is running, restart it after creating the port
Linux (ALSA)
Cause: ALSA virtual port created after DAW startup.
Solution:
- Load
snd-virmidimodule before launching DAW:sudo modprobe snd-virmidi - Restart DAW
- Alternatively: Use
aconnectto manually connect ports
Platform-Specific Issues
macOS Specific
IAC Driver “Device is offline” After Reboot
Problem: IAC Driver unchecks itself after macOS reboot.
Solution:
- Open Audio MIDI Setup
- Double-click IAC Driver
- Check “Device is online”
- This should persist, but if not, consider using an AppleScript to auto-enable on login
Permissions Issues with HID Device
Problem: Conductor can’t access MIDI controller hardware.
Solution:
- Grant Input Monitoring permissions:
- System Settings → Privacy & Security → Input Monitoring
- Enable for Terminal (if running
cargo run)
- Restart Conductor
Windows Specific
loopMIDI Port Disappears
Problem: loopMIDI port intermittently disappears.
Solution:
- Ensure loopMIDI is set to start with Windows:
- Right-click loopMIDI tray icon → Settings → Start with Windows
- If port disappears, restart loopMIDI application
- Restart Conductor daemon
Multiple MIDI Drivers Conflict
Problem: Multiple virtual MIDI drivers (loopMIDI, rtpMIDI, etc.) cause conflicts.
Solution:
- Use only one virtual MIDI driver at a time
- Disable/uninstall unused drivers
- Assign unique port names if using multiple drivers
Linux Specific
ALSA Permissions Denied
Problem: Conductor can’t access ALSA virtual MIDI ports.
Solution:
# Add user to audio group
sudo usermod -a -G audio $USER
# Log out and log back in
# Verify group membership
groups | grep audio
JACK MIDI vs ALSA
Problem: DAW uses JACK MIDI, but Conductor uses ALSA.
Solution:
- Bridge ALSA to JACK using
a2jmidid:sudo apt-get install a2jmidid a2jmidid -e & - Use
qjackctlto route ALSA virtual port to JACK - Alternatively: Use JACK-native virtual MIDI ports instead of ALSA
Advanced Debugging
Enable Conductor Debug Logging
Run Conductor with verbose logging to see detailed MIDI output:
conductor --verbose
What to look for:
[DEBUG] Sending MIDI: ...- Confirms messages are being sent[ERROR] Port not found: ...- Port name issues[WARN] Slow processing time: ...- Performance issues
Monitor MIDI Traffic in DAW
Logic Pro:
- View → Show MIDI Environment
- Click Monitor object
- Watch for incoming MIDI messages
Ableton Live:
- Preferences → Link, Tempo & MIDI
- Enable Track and Remote for the port
- Create a MIDI track
- Arm the track for recording
- Watch the MIDI input meter
Reaper:
- View → MIDI Device Diagnostics
- Select your virtual MIDI port
- Watch for incoming messages
Test MIDI Loopback
Create a loopback test to verify MIDI output is working:
-
Route virtual output back to Conductor input (macOS):
- Audio MIDI Setup → IAC Driver
- Create two buses: “Conductor Out” and “Conductor In”
- Configure Conductor to send to “Conductor Out”
- Configure Conductor to receive from “Conductor In”
- Use a MIDI routing app to bridge them
-
Send a test message:
# Press a pad and verify it's received on the input conductor --verbose
Getting Help
If you’ve tried all troubleshooting steps and still have issues:
-
Gather diagnostic information:
# List MIDI ports cargo run --bin test_midi > midi_ports.txt # Run Conductor with verbose logging conductor --verbose 2>&1 | tee conductor_debug.log # (Press pads to trigger actions) # Stop after 30 seconds conductorctl stop -
Check configuration:
cat ~/.config/conductor/config.toml -
Report the issue:
- GitHub: https://github.com/amiable-dev/conductor/issues
- Include:
- Platform (macOS, Windows, Linux)
- Conductor version (
conductor --version) - DAW name and version
- MIDI port name
- Relevant config.toml sections
- Debug logs (conductor_debug.log)
- midi_ports.txt
See Also
- DAW Control Guide - General MIDI output concepts
- Logic Pro Integration - Logic Pro-specific setup
- Ableton Live Integration - Ableton Live-specific setup
- Configuration Reference - SendMIDI action syntax