Whats new in Max for live in Ableton Live 9

by Clint on March 11th 2013

New features in the Live Object Model or "LOM". Please see below in this blog post for a full list of LOM changes.



API: retrieve all notes in a midiclip without selecting



device width: settable



Devices: improved patcher loading time



live.dial: narrower in tiny mode



LiveAPI: get AudioClip file path



LiveAPI: misc improvements & changes



LivePack: resolve file path



MFL devices: all devices are Max Projects. Among many benefits, this now allows developers to include both the Win and Mac versions of externals when Freezing devices to make them cross platform. See the "Max for Live Device Projects" Vignette in the Max doc for full details.



MFL keyboard focus: fixed various issues



MFL parameters: enabled ordering of automatic mapping of on external MIDI controllers



Rye Pluggo MFL device: minor gain improvments



startup: improved Max for Live startup time



textedit: un-focussing device un-focuses textedit



undo events: events during a mouse down are merged into a single event



New Max for Live Devices

The new "Max for Live Essentials" pack includes:



Buffer Shuffler



Convolution Reverb (including a device to create your own IRs!)



Pitchdrop



Device Randomizer



Envelope Follower



LFO



MultiMap



XY Pad



Instant Haus



Mono Sequencer



Note Echo



Envelope



Expression Control



LFO MIDI



DrumSynth



What's new in the Live Object Model (LOM)

The following are new additions to the LOM taken from LOMChanges.pdf by Cycling74. This document only reflect the state of the LOM at the time of writing, for up­to­date documentation and more explanation of these specific properties and functions, please refer to the LOM documentation included in Max for Live.



Application



open_dialog_count ­ Get/listen to the number of dialog boxes shown.



current_dialog_message ­ Text of the current message box; empty if none is shown at the moment.



current_dialog_button_count ­ Number of buttons on the current message box.



press_current_dialog_button(index) ­ Press the button with the given index on the current dialog box.



Application.View



scroll_view for the “Browser” view



toggle_browse() ­ Reveals the device chain, the browser and starts hot swap for the selected device. Calling this function again stops hot swap.



browse_mode ­ True if HotSwap mode is active for any target



Song



create_scene(index) ­ Index determines where the scene is added; it is only valid between 0 and len(song.scenes); ­1 will add the new scene at the end of the list



swing_amount ­ 0.0 ­ 1.0; right now only affects midi recording quantization and direct calls to Clip.quantize(...).



capture_and_insert_scene() ­ Optional argument that can either be 'Song.CaptureMode.all' or 'Song.CaptureMode.all_except_selected'; the latter will capture all playing clips except for the selected one, leaving the slot of the selected track free in the new scene.



create_midi_track(index)



create_audio_track(index)



duplicate_scene(index)



duplicate_track(index)



session_record ­ Get/set/listen to the state of the session overdub button.



arrangement_overdub ­ Get/set/listen to the state of the arrangement overdub button.



session_record_status ­ An integer that changes when the state of Live's new session recording button changes. Can be observed but not set.



create_return_track() ­ Adds a new Return track at the end.



delete_track(track_index) ­ Delete the track in the 'tracks' property at the given index



stop_all_clips now has an optional argument 'quantized' (default is true). Calling the function with false will stop all clips immediately, independent of the launch quantization.



session_automation_record ­ Get/set/listen to the state of the new Automation Arm button in Live



re_enable_automation_enabled ­ Get/listen to the state of the 'Back to Session Automation' button.



re_enable_automation() ­ Trigger 'Back to Session Automation', re­activating automation in all running session clips.



delete_scene(index) ­ Deletes the scene at the given index. Raises an error when there is no scene at given index or the index is invalid.



trigger_session_record (optional: record_length) ­ Starts recording in either the selected slot or the next empty slot, if track is armed. If record_length is provided, the slot will record for the given length in beats. If triggered while recording, it will stop recording and start to play back the clip.



Track



delete_device(device_index) ­ Delete the device in the 'devices' property at the given index



duplicate_clip_slot(index) ­ Works like 'Duplicate' in a clip's context menu;



Track.View



device_insert_mode ­ Get/set/listen to where a device will be inserted when loaded from the browser. Can be 'default' (add device at the end), 'selected_left' (add device to the left of the selected device), or 'selected_right' (add device to the right of the selected device).



ClipSlot



create_clip(length) ­ Length is given in beats, must be bigger than 0.0; can only be called on empty clip slots in MIDI tracks.



delete_clip() ­ Deletes the contained clip



fire(record_length, launch_quantization) ­ The resulting clip will be re­fired after the given record_length; launch_quantization overrides the global quantization if provided.



is_playing, is_recording, will_record_on_start will now return the respective state of the contained clip if there is one (they used to throw errors in that case)



Clip

Reminder: Note format is (pitch, time, duration, velocity, is_muted)



get_notes(from_time, from_pitch, time_span, pitch_span) ­ Returns a list of notes that start in the given area just like get_selected_notes



remove_notes(from_time, from_pitch, time_span, pitch_span) ­ Deletes all notes that start in the given area



set_notes(list_of_notes) ­ Will apply the given notes to the clip, overwriting existing notes Note: Accessing these properties if is_midi_clip is false will generate an error



duplicate_loop ­ Makes the loop two times longer by moving loop_end to the right, and duplicates both the notes and the envelopes. If the clip is not looped, the clip start/end range is duplicated. The function has no parameters. Available for MIDI clips only.



is_overdubbing ­ Get/listen to whether the clip is overdubbing



file_path ­ Get the location of the audio file represented by the clip Note: Accessing this property will generate an error if is_audio_clip is false



quantize(quantization_grid, amount) ­ Quantizes all notes in the clip to the quantization_grid (one of Live.Song.RecordingQuantization) taking the song's swing_amount into account; throws a runtime error if called on an audio clip.



start_marker ­ Get/set/listen to the clip's start marker in beats, independent of the loop state. Raises an error if set behind the end marker.



start_time ­ The time the clip has been started, relative to the global song time, the value is in beats



end_marker ­ Get/set/listen to the clip's end marker in beats, independent of the loop state. Raises an error if set before the start marker.



gain ­ Get/set/listen to the clip's gain setting; range is 0.0 to 1.0. Raises an error if called on a MIDI clip.



gain_display_string ­ Get the clip's gain display value as a string (e.g., “1.3 dB”). Raises an error if called on a MIDI clip.



available_warp_modes ­ Returns the list of indexes of the warp modes available for the clip; Raises an error if called on a MIDI clip.



warp_mode ­ Get/set/listen to the clip's warp mode as an integer index. Raises an error if called on a MIDI clip. Note: Available warp modes are 0(Beats), 1(Tones), 2(Texture), 3(Repitch), 4(Complex), 5(Rex), 6(ComplexPro).



clear_envelope(device_parameter) ­ Removes the clip's automation for the given parameter.



clear_all_envelopes ­ Removes all automation in the clip.



has_envelopes ­ Get/listen to whether the clip has any automation.



quantize_pitch(pitch, quantization_grid, amount) ­ Same as quantize(quantization_grid, amount), but only for notes in the given pitch.



Clip.View



grid_is_triplet ­ Get/set whether the clip is displayed with a triplet grid



grid_quantization ­ The grid quantization; possible values can be found in Live.Clip.GridQuantization



show_loop ­ If the clip is visible in Live's detail view, this function will make the current loop visible there



Device



can_have_drum_pads (only true for drum racks)



drum_pads ­ Read­/listenable list of all 128 DrumPads for the top most drum rack, inner drum racks return a list of 0 entries).



visible_drum_pads ­ Read­/listenable list of all 16 visible DrumPads for the top most drum rack, inner drum racks return a list of 0 entries).



class_display_name ­ Get the device's original name (e.g., Operator, Auto Filter).



type ­ The device's type. Possible types are 0(undefined), 1(instrument), 2(audio_effect), 3(midi_effect).



Device.View (read­only, of type Live.Device.Device.View)



drum_pads_scroll_position (int) ­ Lowest row of pads visible, range: 0 ­ 28 Note: Accessing this property will generate an error if can_have_drum_pads is false or the drum rack is nested



selected_chain ­ The currently selected Chain (only available in instrument racks)



selected_drum_pad ­ The currently selected DrumPad (only available in drum racks)



DrumPad



chains ­ Read­/listenable list of contained chains



name ­ Read/listenable



note ­ Read­only



mute ­ Read­/write­/listenable



solo ­ Read­/write­/listenable, exclusivity needs to be maintained manually, same as in tracks



name ­ Read­/listenable



Chain



delete_device(device_index) ­ Delete the device in the 'devices' property at the given index.



Added has_audio_input, has_audio_output, has_midi_input, and has_midi_output all read­only.



Scene



fire and fire_as_selected now have an optional argument 'force_legato' (default is false). Calling these functions with true will launch all clips immediately in legato, independent of their launch mode.



fire(force_legato, can_select_scene_on_launch) now has a second parameter can_select_scene_on_launch (default is True). If set to False/0, the scene is fired without selecting it.



is_empty ­ Is true if none of the slots in the scene is filled.



Push

The Push control surface now has functions that allow Max for Live to use its controls more easily.



get_control_names() ­ Returns the list of alls controls' names.



get_control(name) ­ Returns the control with the given name.



grab_control(control) ­ Releases all Push functionality from the control so that it can be used exclusively from Max for Live.



Ableton Live 9 is finally shipping! Of the many new and cool features, the inclusion of Max for Live into Live 9 Suite is a welcome addition that is driving many new users to the world of Max for Live and our community at maxforlive.com . The fact that M4L is now free if you own the Suite isn't the only new thing though. Check out a full list of new things in Max for Live in Live 9! (Note M4L in Live 9 requires Max 6.1 or greater is installed).From Cycling74