Ableton Live MIDI Remote Script / Control Surface

Yes, any help would be appreciated. I’ve noticed these freezes too, but thought that with the latest firmware (3.0.5) they were mostly gone.

It would help if you would collect logs. This should be done as follows:

  • download the latest version of the script (today’s, on GitHub)
  • install MidiPipe, and open the E1.mipi file with it
  • this should create a MidiPipe Output 1; connect the INPUT of the script in Ableton Live to this, and set the output to Electra Controller (Electra Port 1)
  • set DEBUG=5 and E1_LOGGING=True in config.py

This should create log messages (including those sent by the E1) into ~/Library/Preferences/Ableton/Live <version>/Log.txt. If a freeze occurs, send me the tail of that log file containing all events that lead to the error.

4 Likes

The recent 3.0.10 release improves communication with Ableton further. @jhh have you had a chance to test it out?

I worked with the remote script a lot when testing recently. These are two suggestions I would propose. They are just my personal opinions though.

  1. It would be great if selecting a channel strip on the screen would switch the displayed tracks on the controller accordingly.

  2. The “track select” would be geat thing to have on all pages with tracks. Possibly the “transport” control too.

Altogether, it is getting damn good :slight_smile:

2 Likes

I will work on this this weekend

3 Likes

Hi Jaap, @jhh
Thanks so much for making this happen and thanks @martin to solve all related issues.
My e.one is finally ready to be used for music production.
Its getting much more stable.

Cheers

Tim

1 Like

Hi Jaap,

I have an issue, dumping a vst3 device does not shows its name but only the class.

In my dumpfolder I only see PluginDevice.epr and PluginDevice.ccmap

And if I select another plugin it is not dumped.

Should class_display_nameProperty be used for VST’s ?

I found this in the documentation:

Live.PluginDevice.PluginDevice.class_display_nameProperty

  • Return const access to the name of the device’s class name as displayed in Live’s browser and device chain

Live.PluginDevice.PluginDevice.class_nameProperty

  • Return const access to the name of the device’s class.

Live.PluginDevice.PluginDevice.nameProperty

  • Return access to the name of the device.
1 Like

This is a known limitation. See GitHub - xot/ElectraOne: Ableton Live MIDI Remote Script for the Electra One for a way around this.

2 Likes

Hi everybody :wink:!

Thank you for this wonderfull work @jhh.
I have been watching the development of this scrypt since the beginning.
Unfortunately, I don’t have the talent of a developer but I’m very happy to finally learn:
I understood the usefulness of sendMIDI for the speed of midi communication but I can’t know if it’s well configured because I don’t see any difference in speed when loading
ex: The mixer to the Analogue pist

Is there a tutorial/topic for configuring sendMidi with E1 on Windows?
Gert Bevin’s video tutorial for macis a bit obscure obscure to me :upside_down_face:

Thank you for all.

1 Like

Ah I see, will try that out.

Although yesterday while using Ableton I had a crash again. Including the e.one.
Even on the latest firmware. Lost all my work.
I am not sure. Would like to use it but it just doesn’t work for me,

The response and things look better after the new firmware but the crash is a real disappointment.

I am on windows.

Is it working for you guys? Doesn’t Ableton crash?

Hi Bob,

In the config.py you need to setup 2 thing:

# Local directory where dumps are stored (./dumps), user defined
# presets are loaded from (./user-presets), and where to look for the sendmidi
# program.
#
# This is first tried as a directory relative to the user's home directory;
# if that doesn't exist, it is interpreted as an absolute path. If that also
# doesn't exist, then the user home directory is used instead (and ./dumps
# or ./user-presets are not appended to make sure the directory exists).
# (Leading or trailing slash is ignored)
LIBDIR = 'ElectraOne'
# path to the sendmidi command, relative to local library directory (see LIBDIR)
SENDMIDI_CMD = 'lib/sendmidi'

You can download sendmidi here: Releases · gbevin/SendMIDI · GitHub

So the first trick is to find out and set the libdir, enable preset dumps can help. once this appear on the correct place you know where to create: ‘lib/sendmidi’

I haven’t tried it myself yet.

Cheers

Tim

1 Like

Tim,

I am sorry to hear. I am going to give it a test ride on Windows. I kind of tend to spend more testing time on Mac. What Windows and Ableton versions are you using?

Also, let me know if you recall what you were doing before it crashed? Mix, plugin, etc.

Thanks!

1 Like

I can’t test on Windows, unfortunately. Ableton on MacOS never crashed last year while developing the remote script.

I am using the latest version of Ableton 11.
Will switch to sendmidi first.

I was recording with 2 casio SK’1.
Only have a SSL channel strip by default.

My Ableton rarely crashes, only due to the e.one so stopped using it.
I do think Ableton on the Mac is more stable.

The last time the e.one crached and ableton directly after.

If I am correct there was a delay build in for processing sysex that was removed in the latest version.

Hi Bob

Ableton log to check for issues with the remote script.

C:\Users\YourUser\AppData\Roaming\Ableton\Live 11.2.7\Preferences\log.txt

Set:

LIBDIR = 'E:/Ableton User Lib/User Library/Remote Scripts'
USE_FAST_SYSEX_UPLOAD = True
# path to the sendmidi command, relative to local library directory (see LIBDIR)
SENDMIDI_CMD = 'lib/sendmidi.exe'
# so in my case E:/Ableton User Lib/User Library/Remote Scripts/lib/sendmidi.exe exist 

# name of the Electra One port to which to send the SysEx command
E1_CTRL_PORT = 'Electra Controller'

#Run sendmidi.exe list to see the portnames the default is wrong
1 Like

Hmmm looks send midi does not work neither.

2023-01-19T10:43:57.200067: info: RemoteScriptMessage: E1 (debug): - Fast uploading of presets not supported (command not found), reverting to slow method.

I tried paths in python like:

r'C:\mydir'
'C:\\mydir'
'C:/mydir'

Further more while testing Ableton Crashed. the e.one as well and after re-connecting windows does not recognise the unit.

Currently I am not able to use the e.one with Ableton at all. It keeps crashing.

I do not understand. I tried this suggestion.
First of all I do not have issues to controll a vst3
The issue is that the script does not fetch the correct name.
So I will never be able to make a template. As all vst3 devices have the same name now. ( class name is think )
When using an audio rack there is the same issue.

I think if you use the correct way you should get the real device name

In this case “bx_console SSL 4000 E”

image

My Ableton Push does not have issues with this and displays a truncated version.
“bxcns1S”

So I am pretty sure this is not a limitation by Ableton but the device name should be implemented differently. Not using class name, but:

Live.PluginDevice.PluginDevice.nameProperty
Return access to the name of the device.

  • Return const access to the name of the device’s class name as displayed in Live’s browser and device chain

Now PluginDevice is the class name not the “name”

Fixing this will be a big improvement.
Because it will allow for making templates for vst devices.

“”“Construct an Electra One JSON preset and a corresponding
dictionary for the mapping to MIDI CC values, for the given device.
Use get_preset() for the contructed object to obtain the result.
Inclusion and order of parameters is controlled by the
ORDER parameter
- c_instance: controller instance parameter as passed by Live
- device: device whose parameters must be dumped; Live.Device.Device
“””

I see Live.Device.Device, but for Plugins we need Live.PluginDevice

#native ableton devices
Live.Device.Device.name
#plugins
Live.PluginDevice.PluginDevice.name
#max devices
Live.MaxDevice.MaxDevice

Is anyone on Windows using the sendmidi.exe successfully?
Or is the single client driver the issue here?

So few hours of testing. My e.one keeps crashing, then the device is not detected in windows.
Even re-connecting de e.one does not solve it.
A reboot helps but is very inconvenient and the issue comes back.

The last situation the e.one worked a bit in ableton.
Then I closed ableton and opened the browser.
Device not detected again…

Windows has stopped this device because it has reported problems. (Code 43)

A request for the USB device descriptor failed.

@martin how can I completely reset my device?

Just an update on this one. I have Ableton remote script running on Windows 11 and Ableton 11.1.6 and it works just fine.

In the same time I am working with @Flyweight on the issue he is experiencing. So far we are more on the level of USB driver and low-level communication.

The problem is the following: Device, PluginDevice and MaxDevice all have (the same) three fields:

  • name
  • class_name
  • class_display_name
    The problem is that Ableton uses ‘name’ for the specific preset (ie Ableton parameter settings) selected for a device. Eg the Max Audio Effect “Pitch hack” has the (useless) class name “MxDeviceAudioEffect” the (similarly useless) class display name " Max Audio Effect" and when selecting the preset “Deep” it has name “Deep”. I.e. none of the three fields can be relied upon to retrieve the device name.
1 Like

what does this setting change in how the Script works? is there an advantage over the “basic setting”?

Ah ok but I have an older version where I think I was playing with and it does work.

See the dumps are vst, vst3, midifx, max device

Only problem is I do not know what I did to make it work. Not even sure i did fix this or it was just working in the past.

    def dump_presetinfo(self,device,preset_info):
        """Dump the presetinfo: an ElectraOne JSON preset, and the MIDI CC map
        """
        device_name = get_device_name(device)
        s = preset_info.get_preset()
        home = os.path.expanduser('~')
        path = f'{ LOCALDIR }/dumps'
        if not os.path.exists(path):
            path = home
        self.debug(f'dumping device: { device_name }.')
        self.debug(f'name {device.name} display name {device.class_display_name}')
        fname = f'{ path }/{ device.name }.json'
        with open(fname,'w') as f:            
            f.write(s)
        fname = f'{ path }/{ device.name }.ccmap'
        with open(fname,'w') as f:
            comma = False
            f.write('{')
            for p in device.parameters:
                name = p.original_name
                cc = preset_info.get_cc_for_parameter(name)
                # also dump unassigned parameters (with value None)
                if comma:
                    f.write(',')
                comma = True
                f.write(f"'{ name }': { cc }\n")
            f.write('}')

Yes, it ‘works’ if you do not change the default preset of a device. Then ‘name’ equals the device name (not the preset selected for it)

That particular piece of code is not the most recent, btw.

Ah I see now.
When I have a max device and then select a preset, the dump has that preset name.
I will first fix the sendmidi and dump dir.
I just added a device to a audio rack and save it as SSL.
If I am correct then the json preset will be called SSL as well.

But still for vst’s it would be great to have. On windows there are no presets for vst and vst3.

How do I get the parameters to appear on the e.cone?
I only see 16 macro’s and a chain selector.
So I am either doing something wrong or there is a difference between mac and windows.

VST or AU plugins
VST or AU plugin parameters can also be managed, but this needs to be done in a slightly roundabout way in order to ensure the mappings are properly saved within Ableton.

Depending on the plugin, first create an audio or instrument rack. Then add the plugin to the rack. To manage the parameters within the plugin, click on the expand (triangle down) button in the title bar of the plugin to expose the 'Configure' button. Click on it and follow the instructions to add plugin parameters to the configuration panel. To save this configuration, save the enclosing rack configuration: saving the plugin state itself does not save the configuration of parameters! You don't need to bother about the macros, although it might be useful to assign them such that the most important parameters of the plugin are mapped on a single preset page.

What is meant by:
“Click on it and follow the instructions to add plugin parameters to the configuration panel.”

All parameters are always visible when I select “configure” on vst and vst3