livepilot 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +33 -0
- package/LICENSE +21 -0
- package/README.md +409 -0
- package/bin/livepilot.js +390 -0
- package/installer/install.js +95 -0
- package/installer/paths.js +79 -0
- package/mcp_server/__init__.py +2 -0
- package/mcp_server/__main__.py +5 -0
- package/mcp_server/connection.py +210 -0
- package/mcp_server/memory/__init__.py +5 -0
- package/mcp_server/memory/technique_store.py +296 -0
- package/mcp_server/server.py +87 -0
- package/mcp_server/tools/__init__.py +1 -0
- package/mcp_server/tools/arrangement.py +407 -0
- package/mcp_server/tools/browser.py +86 -0
- package/mcp_server/tools/clips.py +218 -0
- package/mcp_server/tools/devices.py +256 -0
- package/mcp_server/tools/memory.py +198 -0
- package/mcp_server/tools/mixing.py +121 -0
- package/mcp_server/tools/notes.py +269 -0
- package/mcp_server/tools/scenes.py +89 -0
- package/mcp_server/tools/tracks.py +175 -0
- package/mcp_server/tools/transport.py +117 -0
- package/package.json +37 -0
- package/plugin/agents/livepilot-producer/AGENT.md +62 -0
- package/plugin/commands/beat.md +18 -0
- package/plugin/commands/memory.md +22 -0
- package/plugin/commands/mix.md +15 -0
- package/plugin/commands/session.md +13 -0
- package/plugin/commands/sounddesign.md +16 -0
- package/plugin/plugin.json +19 -0
- package/plugin/skills/livepilot-core/SKILL.md +208 -0
- package/plugin/skills/livepilot-core/references/ableton-workflow-patterns.md +831 -0
- package/plugin/skills/livepilot-core/references/device-atlas/00-index.md +110 -0
- package/plugin/skills/livepilot-core/references/device-atlas/distortion-and-character.md +687 -0
- package/plugin/skills/livepilot-core/references/device-atlas/drums-and-percussion.md +753 -0
- package/plugin/skills/livepilot-core/references/device-atlas/dynamics-and-punch.md +525 -0
- package/plugin/skills/livepilot-core/references/device-atlas/eq-and-filtering.md +402 -0
- package/plugin/skills/livepilot-core/references/device-atlas/midi-tools.md +963 -0
- package/plugin/skills/livepilot-core/references/device-atlas/movement-and-modulation.md +874 -0
- package/plugin/skills/livepilot-core/references/device-atlas/space-and-depth.md +571 -0
- package/plugin/skills/livepilot-core/references/device-atlas/spectral-and-weird.md +714 -0
- package/plugin/skills/livepilot-core/references/device-atlas/synths-native.md +953 -0
- package/plugin/skills/livepilot-core/references/m4l-devices.md +352 -0
- package/plugin/skills/livepilot-core/references/memory-guide.md +107 -0
- package/plugin/skills/livepilot-core/references/midi-recipes.md +402 -0
- package/plugin/skills/livepilot-core/references/mixing-patterns.md +578 -0
- package/plugin/skills/livepilot-core/references/overview.md +209 -0
- package/plugin/skills/livepilot-core/references/sound-design.md +392 -0
- package/remote_script/LivePilot/__init__.py +42 -0
- package/remote_script/LivePilot/arrangement.py +693 -0
- package/remote_script/LivePilot/browser.py +424 -0
- package/remote_script/LivePilot/clips.py +211 -0
- package/remote_script/LivePilot/devices.py +596 -0
- package/remote_script/LivePilot/diagnostics.py +198 -0
- package/remote_script/LivePilot/mixing.py +194 -0
- package/remote_script/LivePilot/notes.py +339 -0
- package/remote_script/LivePilot/router.py +74 -0
- package/remote_script/LivePilot/scenes.py +99 -0
- package/remote_script/LivePilot/server.py +293 -0
- package/remote_script/LivePilot/tracks.py +268 -0
- package/remote_script/LivePilot/transport.py +151 -0
- package/remote_script/LivePilot/utils.py +123 -0
- package/requirements.txt +2 -0
|
@@ -0,0 +1,209 @@
|
|
|
1
|
+
# LivePilot Architecture & Tool Reference
|
|
2
|
+
|
|
3
|
+
LivePilot is an MCP server that controls Ableton Live 12 in real-time through 104 tools across 10 domains. This document maps every tool to what it actually does in Ableton, so you know exactly which tool to reach for.
|
|
4
|
+
|
|
5
|
+
## Architecture
|
|
6
|
+
|
|
7
|
+
```
|
|
8
|
+
AI Client ──MCP──► FastMCP Server ──TCP/9878──► Remote Script (inside Ableton)
|
|
9
|
+
(validates) (executes on main thread)
|
|
10
|
+
```
|
|
11
|
+
|
|
12
|
+
- **MCP Server** validates inputs (ranges, types) before sending
|
|
13
|
+
- **Remote Script** runs inside Ableton's Python environment, executes on the main thread via `schedule_message`
|
|
14
|
+
- **Protocol**: JSON over TCP, newline-delimited. Every command gets a response.
|
|
15
|
+
- **Thread safety**: All Live Object Model (LOM) access happens on Ableton's main thread
|
|
16
|
+
|
|
17
|
+
## The 104 Tools — What Each One Does
|
|
18
|
+
|
|
19
|
+
### Transport (12) — Playback, tempo, global state, diagnostics
|
|
20
|
+
|
|
21
|
+
| Tool | What it does | Key params |
|
|
22
|
+
|------|-------------|------------|
|
|
23
|
+
| `get_session_info` | Returns tempo, time sig, playing state, track count, scene count, song length | — |
|
|
24
|
+
| `set_tempo` | Changes BPM | `tempo` (20-999) |
|
|
25
|
+
| `set_time_signature` | Changes time signature | `numerator` (1-99), `denominator` (1,2,4,8,16) |
|
|
26
|
+
| `start_playback` | Starts from current position | — |
|
|
27
|
+
| `stop_playback` | Stops playback | — |
|
|
28
|
+
| `continue_playback` | Resumes from where it stopped | — |
|
|
29
|
+
| `toggle_metronome` | Toggles click on/off | — |
|
|
30
|
+
| `set_session_loop` | Sets loop region | `loop_start` (beats), `loop_length` (beats) |
|
|
31
|
+
| `undo` | Undoes last action | — |
|
|
32
|
+
| `redo` | Redoes last undone action | — |
|
|
33
|
+
| `get_recent_actions` | Returns log of recent commands sent to Ableton (newest first) | `limit` (1-50, default 20) |
|
|
34
|
+
| `get_session_diagnostics` | Analyzes session for issues: armed tracks, solo leftovers, unnamed tracks, empty clips | — |
|
|
35
|
+
|
|
36
|
+
### Tracks (14) — Create, delete, configure, group tracks
|
|
37
|
+
|
|
38
|
+
| Tool | What it does | Key params |
|
|
39
|
+
|------|-------------|------------|
|
|
40
|
+
| `get_track_info` | Returns clips, devices, mixer state, group/fold info for one track | `track_index` (0-based) |
|
|
41
|
+
| `create_midi_track` | Creates a new MIDI track | `index` (-1=end), `name`, `color` (0-69) |
|
|
42
|
+
| `create_audio_track` | Creates a new audio track | `index` (-1=end), `name`, `color` (0-69) |
|
|
43
|
+
| `create_return_track` | Creates a new return track | — |
|
|
44
|
+
| `delete_track` | Deletes a track | `track_index` |
|
|
45
|
+
| `duplicate_track` | Duplicates track with all contents | `track_index` |
|
|
46
|
+
| `set_track_name` | Renames a track | `track_index`, `name` |
|
|
47
|
+
| `set_track_color` | Sets track color | `track_index`, `color_index` (0-69) |
|
|
48
|
+
| `set_track_mute` | Mutes/unmutes | `track_index`, `muted` (bool) |
|
|
49
|
+
| `set_track_solo` | Solos/unsolos | `track_index`, `soloed` (bool) |
|
|
50
|
+
| `set_track_arm` | Arms/disarms for recording | `track_index`, `armed` (bool) |
|
|
51
|
+
| `stop_track_clips` | Stops all playing clips on track | `track_index` |
|
|
52
|
+
| `set_group_fold` | Folds/unfolds a group track | `track_index`, `folded` (bool) |
|
|
53
|
+
| `set_track_input_monitoring` | Sets input monitoring state | `track_index`, `state` (0=In, 1=Auto, 2=Off) |
|
|
54
|
+
|
|
55
|
+
### Clips (11) — Clip lifecycle, properties, warp
|
|
56
|
+
|
|
57
|
+
| Tool | What it does | Key params |
|
|
58
|
+
|------|-------------|------------|
|
|
59
|
+
| `get_clip_info` | Returns clip name, length, loop settings, playing state, is_midi/is_audio, warp info | `track_index`, `clip_index` |
|
|
60
|
+
| `create_clip` | Creates empty MIDI clip | `track_index`, `clip_index`, `length` (beats) |
|
|
61
|
+
| `delete_clip` | Removes a clip from its slot | `track_index`, `clip_index` |
|
|
62
|
+
| `duplicate_clip` | Copies clip to next slot | `track_index`, `clip_index` |
|
|
63
|
+
| `fire_clip` | Launches a clip | `track_index`, `clip_index` |
|
|
64
|
+
| `stop_clip` | Stops a playing clip | `track_index`, `clip_index` |
|
|
65
|
+
| `set_clip_name` | Renames a clip | `track_index`, `clip_index`, `name` |
|
|
66
|
+
| `set_clip_color` | Sets clip color | `track_index`, `clip_index`, `color_index` (0-69) |
|
|
67
|
+
| `set_clip_loop` | Configures loop region | `track_index`, `clip_index`, `loop_start`, `loop_end`, `looping` |
|
|
68
|
+
| `set_clip_launch` | Sets launch mode and quantization | `track_index`, `clip_index`, `launch_mode`, `quantization` |
|
|
69
|
+
| `set_clip_warp_mode` | Sets warp mode for audio clips | `track_index`, `clip_index`, `mode` (0=Beats,1=Tones,2=Texture,3=Re-Pitch,4=Complex,6=Complex Pro) |
|
|
70
|
+
|
|
71
|
+
### Notes (8) — MIDI note manipulation (Live 12 API)
|
|
72
|
+
|
|
73
|
+
| Tool | What it does | Key params |
|
|
74
|
+
|------|-------------|------------|
|
|
75
|
+
| `add_notes` | Adds MIDI notes to a clip | `track_index`, `clip_index`, `notes` (array) |
|
|
76
|
+
| `get_notes` | Reads all notes in a region | `track_index`, `clip_index`, `start_time`, `length` |
|
|
77
|
+
| `remove_notes` | Removes notes in a region | `track_index`, `clip_index`, `start_time`, `pitch_start`, etc. |
|
|
78
|
+
| `remove_notes_by_id` | Removes specific notes by ID | `track_index`, `clip_index`, `note_ids` |
|
|
79
|
+
| `modify_notes` | Changes existing notes (pitch, time, velocity, probability) | `track_index`, `clip_index`, `modifications` |
|
|
80
|
+
| `duplicate_notes` | Copies notes in a region | `track_index`, `clip_index`, region params |
|
|
81
|
+
| `transpose_notes` | Shifts pitch of notes in a region | `track_index`, `clip_index`, `semitones`, region params |
|
|
82
|
+
| `quantize_clip` | Snaps notes to grid | `track_index`, `clip_index`, `grid` (int 0-8: 0=None,1=1/4,2=1/8,5=1/16,8=1/32), `amount` (0-1) |
|
|
83
|
+
|
|
84
|
+
**Note format** (for `add_notes`):
|
|
85
|
+
```json
|
|
86
|
+
{"pitch": 60, "start_time": 0.0, "duration": 0.5, "velocity": 100, "mute": false}
|
|
87
|
+
```
|
|
88
|
+
|
|
89
|
+
**Extended note fields** (returned by `get_notes`):
|
|
90
|
+
- `note_id` — unique identifier for modify/remove operations
|
|
91
|
+
- `probability` — 0.0-1.0, per-note trigger probability (Live 12)
|
|
92
|
+
- `velocity_deviation` — -127.0 to 127.0
|
|
93
|
+
- `release_velocity` — 0.0-127.0
|
|
94
|
+
|
|
95
|
+
### Devices (12) — Instruments, effects, racks
|
|
96
|
+
|
|
97
|
+
| Tool | What it does | Key params |
|
|
98
|
+
|------|-------------|------------|
|
|
99
|
+
| `get_device_info` | Returns device name, class, active state, all parameters | `track_index`, `device_index` |
|
|
100
|
+
| `get_device_parameters` | Lists all parameters with values and ranges | `track_index`, `device_index` |
|
|
101
|
+
| `set_device_parameter` | Sets a single parameter | `track_index`, `device_index`, `parameter_index`, `value` |
|
|
102
|
+
| `batch_set_parameters` | Sets multiple parameters at once | `track_index`, `device_index`, `parameters` (array) |
|
|
103
|
+
| `toggle_device` | Enables/disables a device | `track_index`, `device_index` |
|
|
104
|
+
| `delete_device` | Removes a device from the chain | `track_index`, `device_index` |
|
|
105
|
+
| `load_device_by_uri` | Loads a device by browser URI | `track_index`, `uri` |
|
|
106
|
+
| `find_and_load_device` | Searches browser and loads first match | `track_index`, `name` |
|
|
107
|
+
| `get_rack_chains` | Lists chains in an Instrument/Effect Rack | `track_index`, `device_index` |
|
|
108
|
+
| `set_simpler_playback_mode` | Switches Simpler mode (Classic/One-Shot/Slice) | `track_index`, `device_index`, `playback_mode` (0/1/2), `slice_by`, `sensitivity` |
|
|
109
|
+
| `set_chain_volume` | Sets volume of a rack chain | `track_index`, `device_index`, `chain_index`, `volume` |
|
|
110
|
+
| `get_device_presets` | Lists presets for a device (audio effects, instruments, MIDI effects) | `device_name` |
|
|
111
|
+
|
|
112
|
+
### Scenes (8) — Scene management
|
|
113
|
+
|
|
114
|
+
| Tool | What it does | Key params |
|
|
115
|
+
|------|-------------|------------|
|
|
116
|
+
| `get_scenes_info` | Lists all scenes with names, tempo, and color | — |
|
|
117
|
+
| `create_scene` | Creates a new scene | `index` (-1=end) |
|
|
118
|
+
| `delete_scene` | Deletes a scene | `scene_index` |
|
|
119
|
+
| `duplicate_scene` | Duplicates a scene | `scene_index` |
|
|
120
|
+
| `fire_scene` | Launches all clips in a scene | `scene_index` |
|
|
121
|
+
| `set_scene_name` | Renames a scene | `scene_index`, `name` |
|
|
122
|
+
| `set_scene_color` | Sets scene color | `scene_index`, `color_index` (0-69) |
|
|
123
|
+
| `set_scene_tempo` | Sets tempo that triggers when scene fires | `scene_index`, `tempo` (20-999 BPM) |
|
|
124
|
+
|
|
125
|
+
### Mixing (8) — Levels, panning, routing
|
|
126
|
+
|
|
127
|
+
| Tool | What it does | Key params |
|
|
128
|
+
|------|-------------|------------|
|
|
129
|
+
| `set_track_volume` | Sets track volume | `track_index`, `volume` (0.0-1.0, where 0.85≈0dB) |
|
|
130
|
+
| `set_track_pan` | Sets stereo position | `track_index`, `pan` (-1.0 left to 1.0 right) |
|
|
131
|
+
| `set_track_send` | Sets send level to return track | `track_index`, `send_index`, `value` (0.0-1.0) |
|
|
132
|
+
| `get_return_tracks` | Lists all return tracks | — |
|
|
133
|
+
| `get_master_track` | Returns master track info | — |
|
|
134
|
+
| `set_master_volume` | Sets master output level | `volume` (0.0-1.0) |
|
|
135
|
+
| `get_track_routing` | Returns input/output routing config | `track_index` |
|
|
136
|
+
| `set_track_routing` | Configures input/output routing | `track_index`, routing params |
|
|
137
|
+
|
|
138
|
+
### Browser (4) — Finding and loading presets/devices
|
|
139
|
+
|
|
140
|
+
| Tool | What it does | Key params |
|
|
141
|
+
|------|-------------|------------|
|
|
142
|
+
| `get_browser_tree` | Returns top-level browser categories | — |
|
|
143
|
+
| `get_browser_items` | Lists items in a browser path | `path` |
|
|
144
|
+
| `search_browser` | Searches the browser | `query` |
|
|
145
|
+
| `load_browser_item` | Loads a browser item onto a track — **`uri` MUST come from `search_browser` results, NEVER invented** | `track_index`, `uri` |
|
|
146
|
+
|
|
147
|
+
### Arrangement (19) — Timeline, recording, cue points, arrangement notes
|
|
148
|
+
|
|
149
|
+
| Tool | What it does | Key params |
|
|
150
|
+
|------|-------------|------------|
|
|
151
|
+
| `get_arrangement_clips` | Lists clips in arrangement view | `track_index` |
|
|
152
|
+
| `create_arrangement_clip` | Duplicates session clip into arrangement at a beat position | `track_index`, `clip_slot_index`, `start_time`, `length` |
|
|
153
|
+
| `add_arrangement_notes` | Adds MIDI notes to an arrangement clip | `track_index`, `clip_index`, `notes` |
|
|
154
|
+
| `get_arrangement_notes` | Reads notes from an arrangement clip | `track_index`, `clip_index`, region params |
|
|
155
|
+
| `remove_arrangement_notes` | Removes notes in a region of an arrangement clip | `track_index`, `clip_index`, region params |
|
|
156
|
+
| `remove_arrangement_notes_by_id` | Removes specific notes by ID | `track_index`, `clip_index`, `note_ids` |
|
|
157
|
+
| `modify_arrangement_notes` | Modifies notes by ID (pitch, time, velocity, probability) | `track_index`, `clip_index`, `modifications` |
|
|
158
|
+
| `duplicate_arrangement_notes` | Copies notes by ID with optional time offset | `track_index`, `clip_index`, `note_ids`, `time_offset` |
|
|
159
|
+
| `transpose_arrangement_notes` | Transposes notes in an arrangement clip | `track_index`, `clip_index`, `semitones`, region params |
|
|
160
|
+
| `set_arrangement_clip_name` | Renames an arrangement clip | `track_index`, `clip_index`, `name` |
|
|
161
|
+
| `set_arrangement_automation` | Writes automation envelope to an arrangement clip | `track_index`, `clip_index`, `parameter_type`, `points` |
|
|
162
|
+
| `back_to_arranger` | Switches playback from session back to arrangement | — |
|
|
163
|
+
| `jump_to_time` | Moves playhead to a beat position | `beat_time` (beats) |
|
|
164
|
+
| `capture_midi` | Captures recently played MIDI | — |
|
|
165
|
+
| `start_recording` | Starts recording (session or arrangement) | `arrangement` (bool) |
|
|
166
|
+
| `stop_recording` | Stops all recording | — |
|
|
167
|
+
| `get_cue_points` | Lists all cue markers | — |
|
|
168
|
+
| `jump_to_cue` | Jumps to a cue point by index | `cue_index` |
|
|
169
|
+
| `toggle_cue_point` | Creates/removes cue point at current position | — |
|
|
170
|
+
|
|
171
|
+
### Memory (8) — Technique library persistence
|
|
172
|
+
|
|
173
|
+
| Tool | What it does | Key params |
|
|
174
|
+
|------|-------------|------------|
|
|
175
|
+
| `memory_learn` | Saves a technique with stylistic qualities | `name`, `type`, `qualities`, `payload`, `tags` |
|
|
176
|
+
| `memory_recall` | Searches library by text and filters | `query`, `type`, `tags`, `limit` |
|
|
177
|
+
| `memory_get` | Fetches full technique including payload | `technique_id` |
|
|
178
|
+
| `memory_replay` | Returns technique with replay plan for agent | `technique_id`, `adapt` (bool) |
|
|
179
|
+
| `memory_list` | Browses library with filtering/sorting | `type`, `tags`, `sort_by`, `limit` |
|
|
180
|
+
| `memory_favorite` | Stars and/or rates a technique | `technique_id`, `favorite`, `rating` (0-5) |
|
|
181
|
+
| `memory_update` | Updates name, tags, or qualities | `technique_id`, `name`, `tags`, `qualities` |
|
|
182
|
+
| `memory_delete` | Removes technique (backs up first) | `technique_id` |
|
|
183
|
+
|
|
184
|
+
## Units & Ranges Quick Reference
|
|
185
|
+
|
|
186
|
+
| Concept | Unit/Range | Notes |
|
|
187
|
+
|---------|-----------|-------|
|
|
188
|
+
| Tempo | 20-999 BPM | — |
|
|
189
|
+
| Volume | 0.0-1.0 | 0.85 ≈ 0dB, 0.0 = -inf |
|
|
190
|
+
| Pan | -1.0 to 1.0 | -1 = full left, 0 = center |
|
|
191
|
+
| Time/Position | Beats (float) | 1.0 = quarter note at any tempo |
|
|
192
|
+
| Clip length | Beats (float) | 4.0 = 1 bar at 4/4 |
|
|
193
|
+
| Pitch | 0-127 (MIDI) | 60 = C3 (middle C) |
|
|
194
|
+
| Velocity | 1-127 | 1 = softest, 127 = loudest |
|
|
195
|
+
| Probability | 0.0-1.0 | 1.0 = always triggers |
|
|
196
|
+
| Color index | 0-69 | Ableton's fixed palette |
|
|
197
|
+
| Track index | 0-based | Negative for return tracks (-1=A, -2=B), -1000 for master |
|
|
198
|
+
| Grid (quantize) | Integer enum (0-8) | 0=None, 1=1/4, 2=1/8, 3=1/8T, 4=1/8+T, 5=1/16, 6=1/16T, 7=1/16+T, 8=1/32 |
|
|
199
|
+
| Time signature | num/denom | denom must be power of 2 |
|
|
200
|
+
|
|
201
|
+
## Common Patterns
|
|
202
|
+
|
|
203
|
+
**"Read before write"** — Always `get_session_info` or `get_track_info` before making changes.
|
|
204
|
+
|
|
205
|
+
**"Verify after write"** — Re-read state after mutations to confirm the change took effect.
|
|
206
|
+
|
|
207
|
+
**"Undo is your safety net"** — The `undo` tool reverts the last operation. Mention it to users.
|
|
208
|
+
|
|
209
|
+
**"One step at a time"** — Don't batch unrelated operations. Verify between steps.
|
|
@@ -0,0 +1,392 @@
|
|
|
1
|
+
# Sound Design — Instruments, Effects & Recipes
|
|
2
|
+
|
|
3
|
+
Ableton Live's stock instruments and effects with key parameters, typical values, and sound design starting points. Use these as launch pads — every sound should be shaped by context.
|
|
4
|
+
|
|
5
|
+
## Stock Instruments
|
|
6
|
+
|
|
7
|
+
### Analog (Subtractive Synth)
|
|
8
|
+
Two oscillators + noise → two filters → two amplifiers. Classic analog-modeled subtractive synthesis.
|
|
9
|
+
|
|
10
|
+
**Key parameters:**
|
|
11
|
+
- `Osc1 Shape` / `Osc2 Shape` — Saw, Square/Pulse, Sine, Noise
|
|
12
|
+
- `Osc1 Octave` / `Osc2 Octave` — -3 to +3
|
|
13
|
+
- `Osc2 Detune` — Fine detune for thickness (-1.0 to 1.0 semitones)
|
|
14
|
+
- `Filter1 Type` — LP12, LP24, BP, HP, Notch
|
|
15
|
+
- `Filter1 Freq` — Cutoff frequency (20 Hz - 20 kHz)
|
|
16
|
+
- `Filter1 Res` — Resonance (0 to 1.0)
|
|
17
|
+
- `Fil1 Env Amount` — Filter envelope depth
|
|
18
|
+
- `Amp1 Attack` / `Decay` / `Sustain` / `Release` — ADSR envelope
|
|
19
|
+
- `LFO1 Rate` / `Amount` — Modulation speed and depth
|
|
20
|
+
|
|
21
|
+
### Wavetable (Wavetable Synth)
|
|
22
|
+
Two wavetable oscillators with continuous morphing, sub oscillator, and powerful modulation.
|
|
23
|
+
|
|
24
|
+
**Key parameters:**
|
|
25
|
+
- `Osc 1 Pos` — Wavetable position (0-1, morphs through waveforms)
|
|
26
|
+
- `Osc 1 Effect` — FM, Classic, Modern, formant effects on the wavetable
|
|
27
|
+
- `Sub Osc` — Sub oscillator (-2 to 0 octaves, sine/triangle)
|
|
28
|
+
- `Filter Type` — LP/HP/BP with various slopes
|
|
29
|
+
- `Filter Freq` — Cutoff
|
|
30
|
+
- `Filter Res` — Resonance
|
|
31
|
+
- `Mod Matrix` — Map any source (LFO, envelope, velocity, etc.) to any parameter
|
|
32
|
+
- `Unison Voices` — 1-8 voices for supersaw/thick sounds
|
|
33
|
+
- `Unison Amount` — Detune spread between voices
|
|
34
|
+
|
|
35
|
+
### Operator (FM Synth)
|
|
36
|
+
Four oscillators (operators) that can modulate each other's frequency. 11 algorithms define the routing.
|
|
37
|
+
|
|
38
|
+
**Key parameters:**
|
|
39
|
+
- `Algorithm` — Routing topology (1-11). Algorithm 1 = all serial (most harmonics). Algorithm 11 = all parallel (additive).
|
|
40
|
+
- `Osc A-D Coarse` — Frequency ratio (0.5, 1, 2, 3... harmonic ratios)
|
|
41
|
+
- `Osc A-D Level` — Output level / modulation amount
|
|
42
|
+
- `Osc A-D Waveform` — Sine, Saw, Square, Triangle, Noise
|
|
43
|
+
- `Filter Freq` / `Res` — Global filter
|
|
44
|
+
- `LFO Rate` / `Amount` — Vibrato, tremolo
|
|
45
|
+
- `ADSR per operator` — Each operator has its own envelope
|
|
46
|
+
|
|
47
|
+
### Drift (Analog-Modeled)
|
|
48
|
+
Simple, characterful analog synth with built-in instability and warmth.
|
|
49
|
+
|
|
50
|
+
**Key parameters:**
|
|
51
|
+
- `Shape` — Oscillator shape (continuous morph)
|
|
52
|
+
- `Drift` — Amount of analog-style instability
|
|
53
|
+
- `Filter` — Low-pass filter with resonance
|
|
54
|
+
- `Envelope` — Attack/Decay/Sustain/Release
|
|
55
|
+
- `Voice Mode` — Mono, Poly, Unison
|
|
56
|
+
- `Modulation` — Built-in LFO and envelope routing
|
|
57
|
+
|
|
58
|
+
### Simpler (Sample Player)
|
|
59
|
+
One-shot or looped sample playback with filter, envelope, LFO, and warp modes.
|
|
60
|
+
|
|
61
|
+
**Key parameters:**
|
|
62
|
+
- `Mode` — Classic (one-shot), One-Shot, Slicing
|
|
63
|
+
- `Start` / `End` — Sample region
|
|
64
|
+
- `Loop` — On/off, loop start/length
|
|
65
|
+
- `Filter Type` / `Freq` / `Res` — Sample filtering
|
|
66
|
+
- `Amp Envelope` — ADSR for amplitude
|
|
67
|
+
- `Warp` — Time-stretch sample to tempo
|
|
68
|
+
- `Voices` — Polyphony count
|
|
69
|
+
- `Spread` — Stereo spread for polyphonic voices
|
|
70
|
+
|
|
71
|
+
### Drum Rack
|
|
72
|
+
Container that maps samples/instruments to MIDI notes (pads). Each pad is a chain.
|
|
73
|
+
|
|
74
|
+
**Key concepts:**
|
|
75
|
+
- 128 pads (MIDI 0-127), typically using 36-51 (C1-D#2)
|
|
76
|
+
- **Choke groups**: Assign pads to same group — triggering one silences others (e.g., open/closed hi-hat)
|
|
77
|
+
- Each pad has its own chain: sample player + effects
|
|
78
|
+
- **Macro knobs**: 8 knobs that can control parameters across multiple chains
|
|
79
|
+
- Sends A/B per pad for internal effects routing
|
|
80
|
+
|
|
81
|
+
### Other Instruments
|
|
82
|
+
- **Sampler** — Advanced multi-sample instrument with zones, layers, modulation matrix
|
|
83
|
+
- **Tension** — Physical modeling of strings (pluck, bow, hammer)
|
|
84
|
+
- **Collision** — Physical modeling of mallet instruments (bars, membranes, plates)
|
|
85
|
+
- **Electric** — Electric piano modeling (tine, reed, pickup, damper)
|
|
86
|
+
- **Meld** — MPE-capable synth with two engines and a mixer
|
|
87
|
+
|
|
88
|
+
## Stock Audio Effects
|
|
89
|
+
|
|
90
|
+
### Dynamics
|
|
91
|
+
|
|
92
|
+
**Compressor**
|
|
93
|
+
- `Threshold` — Level where compression starts (dB)
|
|
94
|
+
- `Ratio` — Compression ratio (1:1 to inf:1)
|
|
95
|
+
- `Attack` — How fast compression engages (0.01-300ms)
|
|
96
|
+
- `Release` — How fast compression releases (1-3000ms)
|
|
97
|
+
- `Knee` — Soft/hard knee transition
|
|
98
|
+
- `Makeup` / `Output Gain` — Compensate for gain reduction
|
|
99
|
+
- `Sidechain` — External input for ducking (key for pumping effects)
|
|
100
|
+
- **Modes**: Peak, RMS, Expand, OTT-style multiband (Compressor modes)
|
|
101
|
+
|
|
102
|
+
**Glue Compressor**
|
|
103
|
+
Bus-style compressor modeled on classic mix bus compressors.
|
|
104
|
+
- `Threshold`, `Ratio` (2, 4, 10), `Attack`, `Release`
|
|
105
|
+
- `Range` — Limits maximum compression
|
|
106
|
+
- `Dry/Wet` — Parallel compression in one device
|
|
107
|
+
- **Best for**: Drum bus, mix bus, gluing groups together
|
|
108
|
+
|
|
109
|
+
**Limiter**
|
|
110
|
+
- `Gain` — Input gain before limiting
|
|
111
|
+
- `Ceiling` — Maximum output level
|
|
112
|
+
- `Release` — Auto or manual
|
|
113
|
+
- **Use for**: Final output protection, loudness maximizing
|
|
114
|
+
|
|
115
|
+
**Gate**
|
|
116
|
+
- `Threshold` — Level below which audio is muted
|
|
117
|
+
- `Attack` / `Hold` / `Release` — Gate timing
|
|
118
|
+
- `Return` — Hysteresis (how far below threshold to close)
|
|
119
|
+
- **Use for**: Removing bleed, tightening drums, creative gating
|
|
120
|
+
|
|
121
|
+
**Multiband Dynamics**
|
|
122
|
+
Three frequency bands, each with its own compressor/expander.
|
|
123
|
+
- `Low` / `Mid` / `High` — Frequency crossover points
|
|
124
|
+
- Per-band: `Threshold Above/Below`, `Ratio`, `Attack`, `Release`
|
|
125
|
+
- **Use for**: Mastering, de-essing, frequency-specific dynamics
|
|
126
|
+
|
|
127
|
+
### EQ & Filters
|
|
128
|
+
|
|
129
|
+
**EQ Eight**
|
|
130
|
+
8-band parametric EQ — the workhorse.
|
|
131
|
+
- Per band: `Frequency`, `Gain` (dB), `Q` (bandwidth)
|
|
132
|
+
- Filter types: LP, HP, Bell, Notch, Low Shelf, High Shelf
|
|
133
|
+
- Various slopes: 12dB, 24dB, 48dB per octave
|
|
134
|
+
- `Oversampling` — Reduce aliasing at high frequencies
|
|
135
|
+
|
|
136
|
+
**Auto Filter**
|
|
137
|
+
Resonant filter with LFO, envelope follower, and sidechain.
|
|
138
|
+
- `Filter Type` — LP/HP/BP/Notch, various slopes
|
|
139
|
+
- `Frequency` — Cutoff
|
|
140
|
+
- `Resonance` — Q factor
|
|
141
|
+
- `LFO Amount` / `Rate` / `Shape` — Filter movement
|
|
142
|
+
- `Envelope Amount` / `Attack` / `Release` — Envelope follower
|
|
143
|
+
- **Use for**: Sweeps, wobbles, auto-wah, rhythmic filtering
|
|
144
|
+
|
|
145
|
+
**Channel EQ**
|
|
146
|
+
Simple 3-band EQ for quick tonal shaping.
|
|
147
|
+
- `Low`, `Mid`, `High` — Gain knobs
|
|
148
|
+
- `Mid Freq` — Sweepable mid frequency
|
|
149
|
+
|
|
150
|
+
### Time-Based
|
|
151
|
+
|
|
152
|
+
**Reverb**
|
|
153
|
+
- `Decay Time` — Reverb tail length (0.2-60s)
|
|
154
|
+
- `Pre Delay` — Delay before reverb starts (0-500ms)
|
|
155
|
+
- `Room Size` — Early reflection size
|
|
156
|
+
- `Diffusion` — Density of reflections
|
|
157
|
+
- `High/Low Cut` — EQ the reverb tail
|
|
158
|
+
- `Dry/Wet` — Mix (100% wet on return tracks)
|
|
159
|
+
- `Freeze` — Infinite sustain of current reverb
|
|
160
|
+
- **Types**: Room (short, 0.5-1.5s), Hall (medium, 1.5-4s), Cathedral (long, 4-10s+)
|
|
161
|
+
|
|
162
|
+
**Delay**
|
|
163
|
+
- `Time Left/Right` — Delay time (sync or ms)
|
|
164
|
+
- `Feedback` — How much repeats (0-100%)
|
|
165
|
+
- `Filter` — LP/HP on feedback path
|
|
166
|
+
- `Dry/Wet` — Mix
|
|
167
|
+
- `Ping Pong` — Alternates between L/R
|
|
168
|
+
- **Common sync values**: 1/4, 1/8, 3/16 (dotted eighth), 1/4T (triplet)
|
|
169
|
+
|
|
170
|
+
**Echo** (combines delay + reverb + modulation)
|
|
171
|
+
- `Left/Right Time` — Delay times
|
|
172
|
+
- `Feedback` — Repeat amount
|
|
173
|
+
- `Reverb Level` — Built-in reverb
|
|
174
|
+
- `Modulation` — Chorus-like movement in delay
|
|
175
|
+
- `Ducking` — Delays get quieter when input is playing
|
|
176
|
+
- `Gate` — Rhythmic gating of the echo tail
|
|
177
|
+
|
|
178
|
+
### Distortion & Saturation
|
|
179
|
+
|
|
180
|
+
**Saturator**
|
|
181
|
+
- `Drive` — Amount of saturation
|
|
182
|
+
- `Curve Type` — Analog Clip, Soft Sine, Medium Curve, Hard Curve, Sinoid Fold, Digital Clip
|
|
183
|
+
- `Output` — Compensate volume
|
|
184
|
+
- `Dry/Wet` — Parallel blend
|
|
185
|
+
- **Soft Sine**: Warm, subtle. **Sinoid Fold**: Aggressive harmonics. **Analog Clip**: Tape-like.
|
|
186
|
+
|
|
187
|
+
**Overdrive**
|
|
188
|
+
- `Drive` — Distortion amount
|
|
189
|
+
- `Tone` — Brightness
|
|
190
|
+
- `Dynamics` — Preserves or compresses dynamics
|
|
191
|
+
- **Use for**: Guitar-amp style warmth, bass grit
|
|
192
|
+
|
|
193
|
+
**Erosion**
|
|
194
|
+
- Adds digital artifacts: noise, sine wave modulation
|
|
195
|
+
- `Amount`, `Frequency`, `Width`
|
|
196
|
+
- **Use for**: Lo-fi, bitcrushed textures, digital degradation
|
|
197
|
+
|
|
198
|
+
**Redux**
|
|
199
|
+
- `Downsample` — Reduces sample rate (aliasing)
|
|
200
|
+
- `Bit Reduction` — Reduces bit depth (quantization noise)
|
|
201
|
+
- **Use for**: 8-bit sounds, lo-fi, retro textures
|
|
202
|
+
|
|
203
|
+
### Modulation
|
|
204
|
+
|
|
205
|
+
**Chorus-Ensemble**
|
|
206
|
+
- `Rate 1/2` — LFO speeds
|
|
207
|
+
- `Amount 1/2` — Modulation depths
|
|
208
|
+
- `Feedback` — Flanging intensity
|
|
209
|
+
- `Dry/Wet` — Mix
|
|
210
|
+
- **Use for**: Thickening, stereo width, classic chorus
|
|
211
|
+
|
|
212
|
+
**Phaser-Flanger**
|
|
213
|
+
- `Rate` — LFO speed
|
|
214
|
+
- `Amount` — Modulation depth
|
|
215
|
+
- `Feedback` — Intensity/resonance
|
|
216
|
+
- **Phaser**: Sweeping notches. **Flanger**: Jet/whoosh effect.
|
|
217
|
+
|
|
218
|
+
**Frequency Shifter**
|
|
219
|
+
- `Frequency` — Shift amount in Hz (not semitones — inharmonic)
|
|
220
|
+
- `Drive` — Input gain
|
|
221
|
+
- `Dry/Wet` — Mix
|
|
222
|
+
- **Use for**: Metallic textures, detuned unease, ring-mod effects
|
|
223
|
+
|
|
224
|
+
### Utility
|
|
225
|
+
|
|
226
|
+
**Utility**
|
|
227
|
+
Essential for mixing — should be on every track during mix.
|
|
228
|
+
- `Gain` — Volume trim (-inf to +35dB)
|
|
229
|
+
- `Width` — Stereo width (0=mono, 100=normal, 200=wide)
|
|
230
|
+
- `Bass Mono` — Make frequencies below X Hz mono
|
|
231
|
+
- `Bass Mono Freq` — Cutoff for mono bass (typically 120-200 Hz)
|
|
232
|
+
- `Mute` — Kill switch
|
|
233
|
+
- `Phase Invert L/R` — Flip phase
|
|
234
|
+
- `Channel Mode` — Left, Right, Both, Swap
|
|
235
|
+
|
|
236
|
+
## Sound Design Recipes
|
|
237
|
+
|
|
238
|
+
These are starting points — load the instrument with `find_and_load_device`, then use `batch_set_parameters` to set values. Always `get_device_parameters` first to see exact parameter names.
|
|
239
|
+
|
|
240
|
+
### Sub Bass (Analog)
|
|
241
|
+
Deep, clean low-end foundation.
|
|
242
|
+
```
|
|
243
|
+
Oscillator 1: Sine wave
|
|
244
|
+
Oscillator 2: Off
|
|
245
|
+
Filter: LP24, cutoff ~200 Hz, no resonance
|
|
246
|
+
Amp Envelope: Attack 0ms, Decay 0ms, Sustain 100%, Release 100ms
|
|
247
|
+
Note range: C0-C2 (MIDI 24-48)
|
|
248
|
+
```
|
|
249
|
+
- Mono mode (one voice)
|
|
250
|
+
- Velocity sensitivity low/off for consistent level
|
|
251
|
+
|
|
252
|
+
### Reese Bass (Analog or Wavetable)
|
|
253
|
+
Thick, detuned, evolving bass for DnB/dubstep.
|
|
254
|
+
```
|
|
255
|
+
Oscillator 1: Saw wave
|
|
256
|
+
Oscillator 2: Saw wave, detune +5-15 cents
|
|
257
|
+
Filter: LP24, cutoff ~500 Hz, resonance 20%
|
|
258
|
+
Filter Envelope: moderate amount, medium attack (50-200ms)
|
|
259
|
+
Unison: 2-4 voices, moderate spread
|
|
260
|
+
```
|
|
261
|
+
- Automate filter cutoff for movement
|
|
262
|
+
- Layer with clean sub (separate track) for low-end clarity
|
|
263
|
+
|
|
264
|
+
### Pad (Wavetable or Analog)
|
|
265
|
+
Warm, evolving background texture.
|
|
266
|
+
```
|
|
267
|
+
Oscillator: Soft wavetable or saw + triangle
|
|
268
|
+
Unison: 4-8 voices, wide spread
|
|
269
|
+
Filter: LP, cutoff ~2 kHz, low resonance
|
|
270
|
+
Amp Envelope: Attack 200-800ms, Decay 0, Sustain 100%, Release 500-2000ms
|
|
271
|
+
LFO → Filter Cutoff: slow rate (0.1-0.5 Hz), subtle amount
|
|
272
|
+
```
|
|
273
|
+
- Add Chorus-Ensemble for extra width
|
|
274
|
+
- Add Reverb (hall, 3-5s decay, 30-50% wet)
|
|
275
|
+
- Velocity → filter cutoff for expressiveness
|
|
276
|
+
|
|
277
|
+
### Pluck (Analog or Wavetable)
|
|
278
|
+
Short, percussive melodic sound.
|
|
279
|
+
```
|
|
280
|
+
Oscillator: Saw or square
|
|
281
|
+
Filter: LP24, cutoff ~1 kHz, moderate resonance (30-50%)
|
|
282
|
+
Filter Envelope: Amount high, Attack 0, Decay 100-300ms, Sustain 0%, Release 50ms
|
|
283
|
+
Amp Envelope: Attack 0, Decay 200-400ms, Sustain 0%, Release 100ms
|
|
284
|
+
```
|
|
285
|
+
- Short decay = harp-like. Longer decay = guitar-like.
|
|
286
|
+
- Add short reverb (room, 0.5-1s) for space
|
|
287
|
+
|
|
288
|
+
### Lead (Analog or Operator)
|
|
289
|
+
Cutting melodic line that sits on top of the mix.
|
|
290
|
+
```
|
|
291
|
+
Oscillator: Square or saw
|
|
292
|
+
Filter: LP or BP, cutoff ~3 kHz, moderate resonance
|
|
293
|
+
Amp Envelope: Attack 5-20ms, Decay 200ms, Sustain 70%, Release 200ms
|
|
294
|
+
Portamento/Glide: On (50-100ms) for mono mode
|
|
295
|
+
```
|
|
296
|
+
- Add Delay (1/8 or dotted 1/8, 30% feedback, 20% wet)
|
|
297
|
+
- Add subtle Reverb (plate, 1-2s)
|
|
298
|
+
- Use Saturator lightly for presence
|
|
299
|
+
|
|
300
|
+
### Supersaw (Wavetable)
|
|
301
|
+
Classic trance/EDM lead/pad.
|
|
302
|
+
```
|
|
303
|
+
Oscillator: Saw wavetable
|
|
304
|
+
Unison: 7-8 voices
|
|
305
|
+
Unison Amount: High (wide detune)
|
|
306
|
+
Filter: LP, cutoff ~5 kHz, low resonance
|
|
307
|
+
Amp Envelope: Attack 2ms, Sustain 100%, Release 300ms
|
|
308
|
+
```
|
|
309
|
+
- Layer with sub sine one octave below
|
|
310
|
+
- Chorus or Ensemble for extra width
|
|
311
|
+
- Stereo Delay (1/8 L, dotted 1/8 R)
|
|
312
|
+
|
|
313
|
+
### Texture / Ambient (Wavetable + Effects)
|
|
314
|
+
Evolving atmospheric sound.
|
|
315
|
+
```
|
|
316
|
+
Oscillator: Complex wavetable, automate position slowly
|
|
317
|
+
Filter: BP, slowly sweeping frequency
|
|
318
|
+
Amp Envelope: Slow attack (500ms-2s), long release (3-5s)
|
|
319
|
+
LFO: Multiple slow LFOs mapped to position, filter, pitch (subtle)
|
|
320
|
+
```
|
|
321
|
+
- Heavy Reverb (5-10s decay, high diffusion, 80-100% wet)
|
|
322
|
+
- Delay with high feedback (60-80%), filtered
|
|
323
|
+
- Frequency Shifter at very small values (+/- 1-5 Hz) for movement
|
|
324
|
+
- Grain Delay for granular textures
|
|
325
|
+
|
|
326
|
+
### 808 Bass (Simpler or Drum Rack)
|
|
327
|
+
Pitched sub with distortion for trap/hip-hop.
|
|
328
|
+
```
|
|
329
|
+
Sample: 808 kick or sine with fast pitch envelope
|
|
330
|
+
Amp Envelope: Attack 0, Decay 1-3s (long tail), Sustain 0%
|
|
331
|
+
Tuning: Tune to song key
|
|
332
|
+
```
|
|
333
|
+
- Add Saturator (soft sine or analog clip) for upper harmonics
|
|
334
|
+
- Set Simpler to mono
|
|
335
|
+
- Duration determines how long the 808 rings
|
|
336
|
+
|
|
337
|
+
## Device Chain Patterns
|
|
338
|
+
|
|
339
|
+
### Standard Insert Chain (on a track)
|
|
340
|
+
```
|
|
341
|
+
EQ Eight (surgical cuts) → Compressor → Saturator (subtle) → EQ Eight (tonal shaping) → Utility (final trim)
|
|
342
|
+
```
|
|
343
|
+
|
|
344
|
+
### Vocal Chain
|
|
345
|
+
```
|
|
346
|
+
EQ Eight (HP at 80 Hz, cut mud at 300 Hz) → Compressor (4:1, medium attack) → De-esser (Multiband Dynamics, high band) → EQ Eight (presence boost at 3-5 kHz) → Reverb (20-30% wet, plate)
|
|
347
|
+
```
|
|
348
|
+
|
|
349
|
+
### Drum Bus Chain
|
|
350
|
+
```
|
|
351
|
+
EQ Eight (HP at 30 Hz) → Glue Compressor (4:1, 10ms attack, 100ms release) → Saturator (subtle drive for warmth) → Utility (trim)
|
|
352
|
+
```
|
|
353
|
+
|
|
354
|
+
### Parallel Compression Setup
|
|
355
|
+
Using Audio Effect Rack:
|
|
356
|
+
- Chain A: Dry (no processing)
|
|
357
|
+
- Chain B: Compressor (heavy — 10:1, fast attack, fast release, low threshold) → balance chain volume
|
|
358
|
+
|
|
359
|
+
Or using Return track:
|
|
360
|
+
1. `create_return_track` for parallel compression
|
|
361
|
+
2. Add Compressor with extreme settings on the return
|
|
362
|
+
3. Use `set_track_send` to feed signal to the return
|
|
363
|
+
4. Blend return level to taste
|
|
364
|
+
|
|
365
|
+
### Sidechain Ducking Setup
|
|
366
|
+
1. Load Compressor on the track to be ducked (bass, pads)
|
|
367
|
+
2. Enable Sidechain in Compressor
|
|
368
|
+
3. Route kick track to sidechain input
|
|
369
|
+
4. Settings: Ratio 4:1-inf:1, Attack 0.1ms, Release 50-200ms, Threshold low
|
|
370
|
+
5. Adjust release to match tempo (longer for slower tempos)
|
|
371
|
+
|
|
372
|
+
## Creative Effects Techniques
|
|
373
|
+
|
|
374
|
+
### Reverb Freeze
|
|
375
|
+
Set Reverb's Freeze parameter to capture and infinitely sustain the current sound. Automate on/off for dramatic transitions.
|
|
376
|
+
|
|
377
|
+
### Delay Feedback Washes
|
|
378
|
+
Automate Delay feedback above 100% briefly — the delay builds and self-oscillates. Pull back before it gets out of control. Great for transitions.
|
|
379
|
+
|
|
380
|
+
### Beat Repeat (Stock Effect)
|
|
381
|
+
Repeats/stutters incoming audio rhythmically.
|
|
382
|
+
- `Grid` — Repeat size (1/4 to 1/32)
|
|
383
|
+
- `Chance` — Probability of repeating
|
|
384
|
+
- `Gate` — How long the repeat runs
|
|
385
|
+
- Great for glitch, fills, and transitions
|
|
386
|
+
|
|
387
|
+
### Grain Delay
|
|
388
|
+
Granular delay that can pitch-shift and scatter audio.
|
|
389
|
+
- `Pitch` — Transpose the grains
|
|
390
|
+
- `Spray` — Randomize grain position
|
|
391
|
+
- `Frequency` — Grain rate
|
|
392
|
+
- Great for ambient textures and otherworldly effects
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
"""
|
|
2
|
+
LivePilot - Ableton Live 12 AI Copilot Remote Script.
|
|
3
|
+
|
|
4
|
+
Entry point for the ControlSurface. Ableton calls create_instance(c_instance)
|
|
5
|
+
when this script is selected in Preferences > Link, Tempo & MIDI.
|
|
6
|
+
"""
|
|
7
|
+
|
|
8
|
+
from _Framework.ControlSurface import ControlSurface
|
|
9
|
+
from .server import LivePilotServer
|
|
10
|
+
from . import transport # noqa: F401 — registers transport handlers
|
|
11
|
+
from . import tracks # noqa: F401 — registers track handlers
|
|
12
|
+
from . import clips # noqa: F401 — registers clip handlers
|
|
13
|
+
from . import notes # noqa: F401 — registers note handlers
|
|
14
|
+
from . import devices # noqa: F401 — registers device handlers
|
|
15
|
+
from . import scenes # noqa: F401 — registers scene handlers
|
|
16
|
+
from . import mixing # noqa: F401 — registers mixing handlers
|
|
17
|
+
from . import browser # noqa: F401 — registers browser handlers
|
|
18
|
+
from . import arrangement # noqa: F401 — registers arrangement handlers
|
|
19
|
+
from . import diagnostics # noqa: F401 — registers diagnostics handler
|
|
20
|
+
|
|
21
|
+
|
|
22
|
+
def create_instance(c_instance):
|
|
23
|
+
"""Factory function called by Ableton Live."""
|
|
24
|
+
return LivePilot(c_instance)
|
|
25
|
+
|
|
26
|
+
|
|
27
|
+
class LivePilot(ControlSurface):
|
|
28
|
+
"""Main ControlSurface that starts the LivePilot TCP server."""
|
|
29
|
+
|
|
30
|
+
def __init__(self, c_instance):
|
|
31
|
+
ControlSurface.__init__(self, c_instance)
|
|
32
|
+
self._server = LivePilotServer(self)
|
|
33
|
+
self._server.start()
|
|
34
|
+
self.log_message("LivePilot v1.0.0 initialized")
|
|
35
|
+
self.show_message("LivePilot: Listening on port 9878")
|
|
36
|
+
|
|
37
|
+
def disconnect(self):
|
|
38
|
+
"""Called by Ableton when the script is unloaded."""
|
|
39
|
+
if self._server:
|
|
40
|
+
self._server.stop()
|
|
41
|
+
self.log_message("LivePilot disconnected")
|
|
42
|
+
ControlSurface.disconnect(self)
|