Coder Social home page Coder Social logo

abletonosc's Introduction

AbletonOSC: Control Ableton Live 11+ with OSC

AbletonOSC is a MIDI remote script that provides an Open Sound Control (OSC) interface to control Ableton Live 11+. Building on ideas from the older LiveOSC scripts, its aim is to expose the entire Live Object Model API, providing comprehensive control over Live's control interfaces using the same naming structure and object hierarchy as LOM.

It is currently (2022-10-09) a work-in-progress, exposing a few initial APIs.

Installation

To install the script:

  • Clone this repo, or download/unzip and rename AbletonOSC-master to AbletonOSC
  • Move the AbletonOSC folder to the MIDI Remote Scripts folder inside the Ableton application: /Applications/Ableton Live*.app/Contents/App-Resources/MIDI Remote Scripts
  • Restart Live
  • In Preferences > MIDI, add the new AbletonOSC Control Surface that should appear. Live should display a message saying "AbletonOSC: Listening for OSC on port 11000"
  • On macOS, an activity log will be created at /tmp/abletonosc.log

Usage

AbletonOSC listens for OSC messages on port 11000, and sends replies on port 11001.

Application API

Address Query params Response params Description Implemented
/live/test 'ok' Display a confirmation message in Live, and sends an OSC reply to /live/test ✔️
/live/application/get/version major_version, minor_version Query Live's version ✔️

Application status messages

These messages are sent to the client automatically when the application state changes.

Address Response params Description
/live/startup Sent to the client application when AbletonOSC is started

Song API

Address Query params Response params Description
/live/song/start_playing Start session playback
/live/song/stop_playing Stop session playback
/live/song/continue_playing Resume session playback
/live/song/stop_all_clips Stop all clips from playing
/live/song/create_audio_track index Create a new audio track at the specified index (-1 = end of list)
/live/song/create_midi_track index Create a new MIDI track at the specified index (-1 = end of list)
/live/song/create_return_track index Create a new return track at the specified index (-1 = end of list)
/live/song/get/num_scenes num_scenes Query the number of scenes
/live/song/get/num_tracks num_tracks Query the number of tracks
/live/song/create_scene index Create a new scene at the specified index (-1 = end of list)
/live/song/delete_scene scene_index Delete a scene
/live/song/delete_return_track track_index Delete a return track
/live/song/delete_track track_index Delete a track
/live/song/get/is_playing is_playing Query whether the song is currently playing
/live/song/start_listen/is_playing Start a listener that sends a message to /live/song/get/is_playing when is_playing changes
/live/song/stop_listen/is_playing Stop the above listener
/live/song/get/tempo tempo_bpm Query song tempo
/live/song/set/tempo tempo_bpm Set song tempo
/live/song/start_listen/tempo Start a listener that sends a to /live/song/get/tempo tempo changes
/live/song/stop_listen/tempo Stop the above listener
/live/song/get/metronome metronome_on Query metronome on/off
/live/song/set/metronome metronome_on Set metronome on/off
/live/song/start_listen/metronome Start a listener that sends a message to /live/song/get/metronome when metronome changes
/live/song/stop_listen/metronome Stop the above listener

Additional properties are exposed to get, set, start_listen and stop_listen in the same manner:

  • arrangement_overdub, back_to_arranger, clip_trigger_quantization, current_song_time, groove_amount, loop , loop_length, loop_start, midi_recording_quantization, nudge_down, nudge_up, punch_in, punch_out , record_mode

For further information on these properties and their parameters, see documentation for Live Object Model - Song.

Song status messages

These messages are sent to the client automatically when the song state changes.

Address Response params Description
/live/song/beat beat_number Sent to the client application on each beat when the song is playing

Track API

Address Query params Response params Description
/live/track/stop_all_clips track_id Stop all clips on track
/live/track/get/color track_id color Query track color
/live/track/set/color track_id, color Set track color
/live/track/get/mute track_id mute Query track mute on/off
/live/track/set/mute track_id, mute Set track mute on/off
/live/track/get/solo track_id solo Query track solo on/off
/live/track/set/solo track_id, solo Set track solo on/off
/live/track/get/name track_id name Query track name
/live/track/set/name track_id, name Set track name
/live/track/get/volume track_id volume Query track volume
/live/track/set/volume track_id, volume Set track volume
/live/track/get/panning track_id panning Query track panning
/live/track/set/panning track_id, panning Set track panning
/live/track/get/send track_id, send_id value Query track send
/live/track/set/send track_id, send_id, value Set track send
/live/track/get/clips/name track_id [name, ....] Query all clip names on track
/live/track/get/clips/length track_id [length, ...] Query all clip lengths on track
/live/track/get/num_devices track_id num_devices Query the number of devices on the track
/live/track/get/devices/name track_id [name, ...] Query all device names on track
/live/track/get/devices/type track_id [type, ...] Query all devices types on track
/live/track/get/devices/class_name track_id [class, ...] Query all device class names on track

See Device API for details on type/class_name.


Clip Slot API

Address Query params Response params Description
/live/clip_slot/create_clip track_id, clip_id, length Create a clip in the slot
/live/clip_slot/delete_clip track_id, clip_id Delete the clip in the slot
/live/clip_slot/get/has_clip track_id, clip_id Query whether the slot has a clip
/live/clip_slot/get/has_stop_button track_id, clip_id has_stop_button Query whether the slot has a stop button
/live/clip_slot/set/has_stop_button track_id, clip_id, has_stop_button Add or remove stop button

Clip API

Address Query params Response params Description
/live/clip/fire track_id, clip_id Start clip playback
/live/clip/stop track_id, clip_id Stop clip playback
/live/clip/add_new_note track_id, clip_id, pitch, start_time, duration, velocity, mute Add a new MIDI note to a clip. pitch is MIDI note index, start_time and duration are floats in beats, velocity is MIDI velocity index, mute is on/off
/live/clip/get/color track_id, clip_id color Get clip color
/live/clip/set/color track_id, clip_id, color Set clip color
/live/clip/get/name track_id, clip_id name Get clip name
/live/clip/set/name track_id, clip_id, name Set clip name
/live/clip/get/gain track_id, clip_id gain Get clip gain
/live/clip/set/gain track_id, clip_id, gain Set clip gain
/live/clip/get/pitch_coarse track_id, clip_id semitones Get clip coarse re-pitch
/live/clip/set/pitch_coarse track_id, clip_id, semitones Set clip coarse re-pitch
/live/clip/get/pitch_fine track_id, clip_id cents Get clip fine re-pitch
/live/clip/set/pitch_fine track_id, clip_id, cents Set clip fine re-pitch
/live/clip/get/file_path track_id, clip_id file_path Get clip file path
/live/clip/get/is_audio_clip track_id, clip_id is_audio_clip Query whether clip is audio
/live/clip/get/is_midi_clip track_id, clip_id is_midi_clip Query whether clip is MIDI
/live/clip/get/is_playing track_id, clip_id is_playing Query whether clip is playing
/live/clip/get/is_recording track_id, clip_id is_recording Query whether clip is recording

Device API

Address Query params Response params Description
/live/device/get/name track_id, device_id Get device name
/live/device/get/class_name track_id, device_id Get device class_name
/live/device/get/type track_id, device_id Get device type
/live/device/get/num_parameters track_id, device_id num_parameters Get the number of parameters exposed by the device
/live/device/get/parameters/name track_id, device_id [name, ...] Get the list of parameter names exposed by the device
/live/device/get/parameters/value track_id, device_id [value, ...] Get the device parameter values
/live/device/get/parameters/min track_id, device_id [value, ...] Get the device parameter minimum values
/live/device/get/parameters/max track_id, device_id [value, ...] Get the device parameter maximum values
/live/device/set/parameters/value track_id, device_id, value, value ... Set the device parameter values
/live/device/get/parameter/value track_id, device_id, parameter_id value Get a device parameter value
/live/device/set/parameter/value track_id, device_id, parameter_id, value Set a device parameter value

For devices:

  • name is the human-readable name
  • type is 0 = audio_effect, 1 = instrument, 2 = midi_effect
  • class_name is the Live instrument/effect name, e.g. Operator, Reverb. For external plugins and racks, can be AuPluginDevice, PluginDevice, InstrumentGroupDevice...

Acknowledgements

Thanks to Stu Fisher (and other authors) for LiveOSC, the spiritual predecessor to this library. Thanks to Julien Bayle and NSUSpray for providing XML API docs, based on original work by Hans Petrov.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.