https://github.com/lucianoiam/live_rpyc
Create Ableton Live control surfaces that run on an external Python interpreter
https://github.com/lucianoiam/live_rpyc
ableton ableton-live control-surface python rpyc
Last synced: 5 months ago
JSON representation
Create Ableton Live control surfaces that run on an external Python interpreter
- Host: GitHub
- URL: https://github.com/lucianoiam/live_rpyc
- Owner: lucianoiam
- License: gpl-3.0
- Created: 2019-08-07T09:37:29.000Z (almost 7 years ago)
- Default Branch: master
- Last Pushed: 2024-09-27T09:42:36.000Z (over 1 year ago)
- Last Synced: 2025-07-14T15:13:39.258Z (11 months ago)
- Topics: ableton, ableton-live, control-surface, python, rpyc
- Language: Python
- Homepage:
- Size: 81.1 KB
- Stars: 27
- Watchers: 5
- Forks: 3
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# live_rpyc
This package allows interfacing with the LOM (Live Object Model - [docs here](https://structure-void.com/PythonLiveAPI_documentation/Live11.0.xml)) from a separate Python interpreter running outside the Ableton Live process.
It consists in a MIDI Remote Script that accepts [RPyC](https://github.com/tomerfiliba/rpyc) connections, bootstrap client code and some helper functions.
Tested on Mac and Windows versions of Live 11, 10 and 9.
Based on code from https://github.com/bkillenit/AbletonAPI
## Quick start
- Make sure your Python interpreter version matches Live's built-in interpreter version, otherwise RPyC cannot work properly.
- Copy LiveRPyC to Live's MIDI Remote Scripts directory
- Enable LiveRPyC in Live → Preferences → MIDI → Control Surfaces
- Run `client.py` to check everything works
## Example client code
```Python
from live_rpyc import client
def current_song_time_listener():
print(song.get_current_beats_song_time())
Live = client.connect()
live_app = Live.Application.get_application()
song = live_app.get_document()
print('Connected to Ableton Live {}.{}.{}'.format(live_app.get_major_version(),
live_app.get_minor_version(), live_app.get_bugfix_version()))
client.bind(song.add_current_song_time_listener, song.remove_current_song_time_listener,
current_song_time_listener)
client.start_thread()
try:
input('Try playing/pausing Live or press Enter to exit\n')
except:
pass
client.disconnect()
```