TonePaths as a MIDI Controller
TonePaths sends standard MIDI CC over Bluetooth LE. It should work with any software or hardware that accepts BLE-MIDI input. Initial testing has been done with Ableton Live on macOS — the same approach should work with other DAWs, hardware synths, and iPad music apps.
How It Works
When MIDI streaming is enabled, TonePaths continuously sends 13 MIDI CC messages derived from your phone's motion sensors and ARKit position tracking. Each CC maps to a different axis of movement — tilt, rotation speed, position in the room, walking speed, and whether you're touching the screen.
Any software or hardware that can receive BLE-MIDI can map these CCs to parameters — filters, effects, volume, panning, or anything else that accepts MIDI CC input. The walkthrough below uses Ableton Live as a concrete example, but the same principles apply to any MIDI-capable host.
Enabling MIDI on Your iPhone
- Open TonePaths and choose Perform
- Tap the waveform icon (top-right) to open Audio & MIDI
- Toggle Stream MIDI on
- Tap Setup next to Bluetooth to open the Bluetooth MIDI sheet
- Toggle Advertise MIDI Service to ON
Your iPhone is now advertising as a BLE-MIDI device. Connect to it from your receiving device or computer.
Tip: Use the Controller performance profile (in Settings) to disable built-in sound and enable MIDI automatically — ideal when using TonePaths purely as a gesture controller.
Connecting on macOS
Most macOS music software receives BLE-MIDI through the system-level Bluetooth MIDI connection. Set it up once and it works across apps.
- Open Audio MIDI Setup (search Spotlight, or Applications → Utilities)
- Choose Window → Show MIDI Studio (⌘2)
- Click the Bluetooth button in the toolbar
- Your iPhone should appear by its device name (e.g. "My iPhone") — click Connect
- Close this window
Back on your iPhone, if you see a Refresh button next to Bluetooth in Audio & MIDI, tap it — the connection indicator should turn green.
CC Reference
All CCs arrive on a single MIDI channel from your iPhone's Bluetooth MIDI port.
| CC | Group | Source | Character | Good For |
|---|---|---|---|---|
CC1 | Rotation | Phone pitch (forward/back tilt) | Smooth, full range | Filter cutoff, main expression |
CC2 | Rotation | Phone roll (left/right tilt) | Smooth, full range | Pan, stereo width, resonance |
CC3 | Rotation | Phone yaw (left/right turn) | Smooth, wraps | Slow sweeps, detuning |
CC4 | Rotation Rate | Angular velocity X | Spiky, reactive | Reverb send, distortion |
CC5 | Rotation Rate | Angular velocity Y | Spiky, reactive | Chorus depth, tremolo |
CC6 | Rotation Rate | Angular velocity Z | Spiky, reactive | Grain density, glitch |
CC7 | Position | ARKit position X | Slow, room-scale | Volume, macro controls |
CC8 | Position | ARKit position Y | Slow, room-scale | Volume, macro controls |
CC9 | Position | ARKit position Z | Slow, room-scale | Volume, macro controls |
CC10 | Velocity | Movement speed X | Burst on movement | Transient effects |
CC11 | Velocity | Movement speed Y | Burst on movement | Transient effects |
CC12 | Velocity | Movement speed Z | Burst on movement | Transient effects |
CC13 | Interaction | Touching screen (gesture gate) | Binary on/off | Note trigger, effect bypass |
Tip: CC1–CC3 (rotation) are the most musically useful for sustained expression. CC4–CC6 react to gesture speed — great for intensity and effects. CC7–CC12 require ARKit tracking and reflect your physical position and velocity in the room. CC13 fires when you touch or release the screen — useful for triggering notes or toggling effects.
Soloing a CC
TonePaths streams all 13 CCs simultaneously. When your host software enters a MIDI learn or mapping mode, it typically captures whichever CC changes the most — which may not be the one you want.
To keep things clean, solo the CC you want before each mapping.
- In TonePaths, open Audio & MIDI (waveform icon, top-right)
- Scroll to the channel you want and tap SOLO (e.g. CC1 — X rotation, a.k.a. forward/back tilt)
- Only that CC will transmit — all others go silent
After mapping, tap All On in the Channels section to re-enable all streams.
Example: Ableton Live
This walkthrough creates a synth pad in Ableton Live whose filter and reverb respond to your phone's tilt and rotation. The same mapping approach works in any DAW with MIDI CC learn.
Verify the connection in Ableton
- Open Ableton Live
- Go to Preferences → Link, Tempo & MIDI (Live 11) or Settings → Link, Tempo & MIDI (Live 12)
- Under MIDI Ports, find your iPhone's name in the input list
- Enable Track and Remote for that input
- Close Preferences / Settings
Create the instrument
- From the Browser, navigate to Instruments → Drift → Pads and drag any preset into the Arrangement View.
Map CC1 (tilt) to filter cutoff
- Solo CC1 in TonePaths (if you haven't already)
- Click MIDI Map Mode (⌘M) — the interface turns purple
- Click the filter cutoff knob on your synth
- Tilt your phone forward — Ableton captures CC1
- Exit MIDI Map Mode (⌘M again)
Tilt your phone forward and back — the filter opens and closes.
Map CC2 (roll) to resonance
- Solo CC2 in TonePaths
- Enter MIDI Map Mode (⌘M)
- Click the resonance knob
- Roll your phone left or right — Ableton captures CC2
- Exit MIDI Map Mode
Map CC3 (yaw) to reverb send
- Add a Reverb return track if you don't have one (⌘⌥T, drag Reverb onto it)
- Solo CC3 in TonePaths
- Enter MIDI Map Mode
- Click the Send A knob on your MIDI track
- Turn your phone left or right — Ableton captures CC3
- Exit MIDI Map Mode
Turning left or right sweeps reverb in and out.
Important: Unsolo all CCs before performing. Tap All On in the Channels section of Audio & MIDI to re-enable all streams.
Hold a note
TonePaths sends CC data, not notes, so you need a sustained note for the synth to sound:
- Enable Computer MIDI Keyboard (press M, or click the keyboard icon in the Control Bar) and hold keys A–L for notes
- Or draw a long MIDI note/chord in a clip in Session or Arrangement view
Now move your phone — the held chord's timbre and space shift with your gesture.
Tips
- Adjust CC ranges after mapping: most DAWs let you set min/max for a mapped CC. Narrow the range for more precise control (e.g., filter cutoff 40–100 instead of 0–127).
- Record automation: arm a track, hit record, and move your phone. CC data records as editable automation curves in most DAWs.
- Multiple tracks: map different CCs to different instruments — CC1 drives a pad filter, CC4 drives a drum effect, CC7 drives an ambient volume swell.