The new look Live API is being redeveloped as LiveLink which is in the process of being integrated into Gridlock. Once this work has been completed the standalone API will once again be available.
The M4L developments I am working on consists of 3 parts, or layers, comprised of the API, the components layer and the device layer.
The API layer is designed to make writing your own devices and components for interacting with Live easier - no direct knowledge of the LOM is needed. At this point in development not all of the LOM is covered, but this will be addressed over time with later releases.
The API (Application Programming Interface) is a low level abstraction that sits on top of the LOM functionality provided in M4L and provides a consistent and intuitive method for receiving updates from and sending updates to Live. This layer is implemented entirely in Javacript using the JS API.
The API can be configured to 'listen' to events happening in Live and notify interested parties when they happen, e.g. A button is pressed, a dial is moved, a track is inserted, a device is removed etc.
The interface uses an OSC style message based system, which supports multiple updates per message for efficient handling. Additional OSC adapters will be provided for comms to and from actual OSC targets, should they not be able to understand the format.
This layer will also abstract the location of devices and components written on top of it allowing these entities to run on remote computers.
Finally, this layer presents a pub/sub (publish/subscribe) interface to the outside world so that components and devices can efficiently subscribe to only the updates that they are interested in when performing their operations.
The components layer provides a number of re-usable components that can be plugged together to provide more complex functionality. These components are written in JS to be as efficient as possible, communicate directly with the API model, and cross as few MAX/JS boundaries as possible. When using the JS callback mechanism, a complete update from Live can be processed without leaving the JS world.
The current out-of-the-box components provided are listed below.
This provides a rotary control for controlling parameters in your Live set. Each control comes with its own min/max settings, a cut and clip button with independent value settings, and a simple ramping/LFO system for simple automation of the control.
Drop down Selector
The drop down selector provides a mechanism of using drop down menus to select a particular entity. Currently supported modes are:
Track - select a track
Track-Device - select a track and a device on the track
Track-Device-Param - select a track, a device, and then a parameter for the device
Track-Clip - select a track and a clip on the track
Scene - select a scene
Scene-clip - select a scene and a clip on the scene
This component combines the first two components to provide the ability to select a parameter in the Live set and attach it to a rotary for controlling the value of that parameter.
When attached to a track the clip display component displays the currently playing clip from that track if there is one, or indicates no clip playing otherwise. The display will update accordingly as the playing slot changes on the track.
The stutter component provides stuttering functionality for a track, allowing a particular beat and stutter amount to be selected. These values can be manipulated in a number of ways with the buttons provided to move the stutter position and length.
This component will display the wave of an audio clip playing on a track, along with current play position and looping points. Due to the warping nature of Live, this will only be available for clips which are pre-warped. A version for midi clips showing the notes will be developed at a later date.
Track Device Display
This component displays the devices placed on a track (up to 8) and allows easy enabling/disabling of the devices, as well as easy viewing of what you have on each track. This will be integrated in later versions with the Rotary Bank for some funky functionality.
Track Clip Display
This component displays all the clips on a track and allows easy launching/stopping of clips on the track. More functionality to come in the future..
This component allows the user to create a bank of Rotary controls, specifying the width and height of the bank (e.g. a bank of controls 3 wide and 4 high). Each control will have the standard functionality provided for the rotary controls, with a few extras on top for selecting parameters directly from the control.
Multi Track Display
Multi Scene Display
The devices layer provides a number of top level devices and examples that pull together the components to provide real-world functionality.
The majority of these use JS to provide the core logic, but I will be developing fully MAX versions in the future to serve as examples.
Each device can be floated so that it can be independently positioned outside of Live, and can also be shrunk down to a minimal form for using up less screen real estate.
Additional common functionality will be added in the future, e.g. device preset system.
The current devices provided are listed below.
3 Selector Rotary Control
This simple device hooks up 3 parameter selectors to allow you to control 3 parameters on a live set. As with all the devices and components, they are plug and play, so if you want to edit the device to control 10 parameters then its very simple to do.
4 Channel Stutter Device
Stutter rack for controlling the stutter on 4 tracks simultaneously. The stutter device uses the track selector, clip display, and stutter control components all pulled in to work together.
Clip Ops Device
Some basic clip operations that can be used on all clips, or all currently playing clips.
There is one instance of the controller in each set. This is the core of the system and maintains all of the data in the object model and is the central comms module. This module scans the set on first load and is then updated with the users actions though out the operation of the set.
- Complete access to all of LOM functionality
- Support remoting of devices to other computers
- Provide integrated intelligent controller support - this will include hardware controllers (Launchpad and Push first), plus also hookup to Lemur and other OSC based apps.
- Grouping - select a number of tracks, clips etc and perform simultaneous operations on them
- Auto play - auto play of clips dropped onto a track - will be linked with cueing options to immediately cue the track if desired and un-cue other tracks. Will provide quick reset to then out it into your previous cued tracks.
This will provide quantisation to the operations of a device, e.g. Being able to execute stutter commands on a beat rather than immediately, perform a preset load at the end of a 4 bar segment, etc.
Undo all actions performed since a manually set point, or since the last preset was loaded
Preset system for storing and restoring Live set states. This will be expanded to per device/component operation at a later date
Select specific parameters for a rotary control which activate/deactivate depending on the presence of a plugin, e.g. Build your own device which has a EQ Three lo gain and hi gain control on it. These will only activate and be available when you drop an EQ Three on the track
Allow button access to these elements of a track
Show the output levels of a track
Looper - big brother to the stutter control allowing finer grained control and additional functionality
Recorder - one click recording of what is currently playing onto a specified track with synced launch
The system is still currently under development and at this time is in the second iteration of beta testing. If you wish to be involved in this stage then please use the subscribe link below and I will add you to the beta distribution. Beta testers will be eligible for a discount on the list price once the first release is officially available, but up until then you are free to use the system for your own purposes, with restrictions as indicated in the license.txt file available with the distribution.
I have not yet decided on pricing and bundling of the release, so a base release may not include everything documented above.
Documentation is somewhat lacking at the moment, but the bundled components and devices should suffice during the beta test process. You can always mail me at firstname.lastname@example.org with any questions.
I will add some demo videos to the site when I get some time.
Thanks for reading, and I hope you'd like to come on board!