v 0.96 -- January 2011
based on abcl v 0.23.0
Mac OSX 10.5/6; Max5
java v 1.6 or higher also required
download and install maxlispj
The [mxj maxlispj] object brings the power and
elegance of the LISP (specifically
programming language into the
real-time music environment. [mxj maxlispj] uses
a java-based implementation of Common Lisp authored originally
by Peter Graves and now maintained by Erik Huelsmann.
The LISP interpreter is completely encapsulated using the
Max/MSP [mxj] java object, thus extending the capabilities of
Max/MSP in the following ways:
This function can be used to build a function returning a list of three
random elements from three different lists:
(defun get3el(l1 l2 l3)
(cons (getel l1)
(cons (getel l2)
(list (getel l3))))
And the delightfully insane thing about LISP is that lists
can be lists of numbers,
lists of strings, lists of functions, lists of lists, etc.
Because LISP is an interpreted language, functions can
be defined and sent into LISP "on the fly" to operate upon Max/MSP
data. The abcl interpreter (driven from Max/MSP) is fast enough
for many extensive LISP operations.
There are a number of
on Common Lisp available.
A fairly common complaint among Max/MSP developers is the lack
of a robust set of string-manipulation and data-structuring utilities.
Obviously, LISP has powerful string-processing capabilities, and
data representation can become as arbitrarily complex as necessary.
The [mxj maxlispj] object will catch most LISP errors and
Full source for both the [mxj maxlispj] object and the
abcl interpreter are available for downloading (see below).
Download and Install
(use the earlier version for
Windows and older Max/MSP installs)
Earlier versions of the [mxj maxlispj] object for older Max, OSX
and Windows machines are available
(7.5 Mbytes download/9 Mbytes on disk)
v 0.96 -- 1/31/2011
This will unpack to a single "maxlispj_0.96_osx_max5/" folder.
Inside this folder will be a 'jar' archive file, "BGabcl.jar"
and a "maxlispj-help-0.96/" sub-folder.
Move or copy the "BGabcl.jar" file to the Max5 java/classes
folder, usually here:
Then edit the "max.java.config.txt" file in the 'Cycling '74/java/'
folder and add the following line:
max.dynamic.class.dir "/Applications/Max5/Cycling '74/java/classes/BGabcl.jar"
Next, move or copy the entire "maxlispj-help-0.96/" folder onto the max-help
search path, suggestion:
NOTE: Be sure to remove any existing "maxlispj/" folders,
"maxlispj-help/" folders, or older "maxlisp" objects from the search path.
Move the entire "maxlispj-help-0.96/" folder
intact -- do not take the maxlispj.maxhelp object
out of the folder!
(25 Kbytes download)
v 0.96 -- 1/31/2011
The java source code for the maxlispj.java class that provides
the link between abcl and Max/MSP. Download the abcl source from the
abcl web site.
(we wouldn't want to call them "bugs", would we?)
- Although [mxj maxlispj] will catch and handle most LISP errors,
it cannot provide the debugging features that traditionally come with
a LISP interpeter (i.e. no interactive debugger, break conditions, etc.).
It is probably best to develop code in a standalone Common Lisp interpreter
and then import the code (the "loadbuf" message to [mxj maxlispj] is
useful) into Max/MSP.
For debugging and development, it is probably best to use the
- [mxj maxlispj] needs to do a lot of initialization when
starting the LISP interpreter. The first [mxj maxlispj] object
instantiated in a patcher may take several seconds
(sometimes 10-20 seconds, sometimes even longer) to load. Be
patient, even if (OSX users) the 'spinning rainbow wheel of death'
appears. All subsequent [mxj maxlispj] objects will appear
quickly as the initialization only has to occur once.
For some reason under OSX 10.6/Max5, the first time the object's
internal buffer is opened, it will also incur a short delay.
Be patient, a lot is going on with this object!
NOTE: One very odd situation can sometimes occur -- if a patcher has
been saved to disk in a session prior to creating
a [mxj maxlispj] object,
the first object instantiated in the saved patcher will take
a fair amount of time (30 seconds to a minute, depending on processor speed)
as it allocates memory. A number of errors will also appear in the
Max window about not finding certain classes,
but the [mxj maxlsipj]
will eventually be created and will function normally. I'm not sure why
- It is possible -- and in fact quite easy -- to write LISP programs
that take a significant amount of time to execute. If the LISP interpreter
takes too much time, Max/MSP will not be happy. This is real time,
- I'm not sure how well [mxj maxlispj] will handle a REALLY
LARGE program. "riff-o-matic" is somewhat substantial, but I'm not
a truly sophisticated LISP hacker.
Final Words on This Web Page
object was written by Brad Garton (hey! that's me!) and supercedes the older
object. [mxj maxlispj] is much less 'brittle', and the earlier
version runs on Windows, too (updated Windows 7 coming soon!).
The integration of java into Max/MSP via the
[mxj] object made this project possible. As always, the
good people on various development mailing lists (especially)
the Cycling '74 java-dev forum
were invaluable. Thanks!
I hope this may be useful for others; I'm
having a blast with it. Let me know what you think!
garton - at - columbia dot edu