Aug 1, 2015

The quest for the ultimate control surface never ends. This quest has brought me to the Vestax VCM-600, which is very close to what I need. The built-in MIDI Remote Script in Live 9.2 is nice, but there is some functionality I’d like to have, and other functionality I don’t need.

I’ve been able to recreate much of the functionality I want with Max for Live. It works, but it’s clunky. A custom remote script would be much better.

The remote scripts in Live are compiled Python scripts. Julian Bayle has kindly provided a repository of these scripts, decompiled for our convenience. However, it seems that due to the version of Python Live uses and the version of Python that was used to decompile these scripts, there are some syntactical errors that prevent the scripts from compiling properly.

Three scripts for the VCM-600 did not work: MixerComponent.py, TrackEQComponent.py, and ViewTogglerComponent.py. Live’s startup log (~/Library/Preferences/Ableton/Live 9.2/log.txt) recorded similar errors for these scripts:

8800 ms. RemoteScriptError: raise index in range(len(self._track_eqs)) or AssertionError

8800 ms. RemoteScriptError: TypeError
8800 ms. RemoteScriptError: :
8800 ms. RemoteScriptError: exceptions must be classes, instances, or strings (deprecated), not bool

Here’s the stanza in MixerComponent.py containing the line the error points to:

def track_eq(self, index):
        raise index in range(len(self._track_eqs)) or AssertionError
        return self._track_eqs[index]

I know little Python, but after some light reading, it seems that the syntax was incorrect for the version of Python Live 9.2 uses. Using ‘assert’ instead of ‘raise’ solves the problem and the script compiles properly:

def track_eq(self, index):
        #raise index in range(len(self._track_eqs)) or AssertionError
        assert index in range(len(self._track_eqs)) or AssertionError
        return self._track_eqs[index]