Skip to content


Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
tree: f70228d3fc
Fetching contributors…

Cannot retrieve contributors at this time

375 lines (252 sloc) 14.041 kb
ajm objects changelog
* Version 0.9.2 *
* Upgraded JRuby to version 1.5.5
* Fixed ajm.midi2coll to work with the 0.9 version of ajm.ruby
* Fixed a stack overflow in the ajm.makenote help file
* Version 0.9 *
Changes to ajm.ruby
** Multiple inlets are now supported. This is the first argument to the object,
and number of outlets is the second argument (it was previous the first).
If you were using multiple outlets, you must now add a first argument for
1 inlet. So [mxj ajm.ruby 3] becomes [mxj ajm.ruby 1 3].
The inlet() method reports the current inlet in your Ruby script.
** Evaluation by sending ruby code messages to the object's inlet now needs to be
prepended with the 'eval' message.
So instead of sending [puts 'hello'] you must now send [eval puts 'hello']
Adding a [prepend eval] before ajm.ruby's inlet is a simple way to update
existing patches that relied on the old behavior.
** @listproc is no longer supported. Any input that is a list automatically calls
the inlet() method. Use the 'eval' message to evaluate Ruby code.
** def list(*params) in Ruby has now been replace with def inlet(inlet_index, *params)
There are also in0, in1, ... in9(*params) convenience methods.
See the help patch for examples of usage.
** @evaloutlet's default value has changed from 0 to -1 (no output)
If you rely on evaluating scripts on-the-fly from Max messages, you either
explicit call out0 to send output to the outlet, or expliclty set @evalout 0
(note the preferred name of @evaloutlet is @evalout)
** The @scriptfile attribute is now deprecated in favor of @file
** The @evaloutlet attribute is now deprecated in favor of @evalout
** No gems are included with ajm.ruby anymore
* ajm.ruby now provides much more useful error messages
* unlike the old list() method, the inlet() method uses a splat for it's parameters,
so you can define this method like
def inlet(inlet_index, param1, param2, param3)
def inlet(inlet_index, *params)
to handle any number of parameters.
This is true for the in0, in1, ..., in9 convenience methods too.
* The directory of the @file is added to $LOAD_PATH so you can require
files relative to it.
* @files can be located relative to the current patch
* Double clicking a script that's running a @file will open that file
in the associated editor (based on your OS file associations)
* A 'call' message was introduced, see the "receiving input from Max"
section of the help patch
* A 'send' message was introduced, see the "receiving input from Max"
section of the help patch
* the number of files installed with ajm.ruby has decreased significantly
(we now use jruby-complete.jar instead of an unpacked ruby installation)
* __FILE__ is now set correctly when using @file to load a script
* A @ruby_version attribute was introduced to control the Ruby version on
a per-object basis. Valid values are @ruby_version 1.9 and @ruby_version 1.8
1.8 is the default. 1.9 support is still under development by the JRuby
developers so it may not be completely compatible with MRI Ruby 1.9.
* Ruby symbols now have the ':' prefix when output to Max
* JRuby upgraded to version 1.5.2
* Version 0.8.8 *
Changes to ajm.ruby
* JRuby upgraded to version 1.3.1
* Enabled Ruby 1.9 support
See the ADVANCED RUBY USAGE section of the Notes.txt file for details.
Changes to ajm.seq/ajm.rseq
* The sequence (the value of the @seq attribute) no longer outputs by default
when the object initializes. Automatically outputting was atypical Max
behavior that could cause problems in some patches. To get the old behavior
set the attribute "@autooutputseq 1" or send an "outputseq" message to the
Fixed a bug in the ajm.metro help patches that was causing a stack overflow.
* Version 0.8.6 *
Starting with this release, ajm objects will officially support Max 5 only.
All patches have been updated to Max 5 format.
Many objects depend on Max 5 features like transport and presentation mode.
New Objects
* ajm.metro - a transport-synced metronome that reports time relative to
a given timepoint
* ajm.midi2coll - reads midi files and converts them to a [coll] format that
can be sequenced by ajm.metro
* ajm.makenote - a utility to help play notes with ajm.metro & coll
* ajm.error - print error messages to the Max window
Changes to sequencing objects
* Support for new messages:
- min
- max
- subtractfrom
- invert
See the help file for details.
Changes to MSP objects
* ajm.lfo renamed to ajm.lfo~
* ajm.env renamed to ajm.env~
These renames were done to be more consistent with MSP objects.
If you have patches using the old names, you can copy ajm.lfo~.maxpat
to ajm.lfo.maxpat and ajm.env~.maxpat to ajm.env.maxpat.
Sorry for any inconvenience.
* ajm.env~ now has some basic transport syncing capability
Changes to [ajm.ruby]
* $max_object_map stores references to all ajm.ruby objects
* max_object() lookup method (see help file)
* $max_objects is an array containing all ajm.ruby objects in the current
* added global variable storage system, set_global() and get_global() methods
* added convenience methods inlet_assist() and outlet_assist()
* initialization code externalized to the script file ajm_ruby_initialize.rb
* The $LOAD_PATH no longer includes all folders on Max's search path.
Use this code:
$:.unshift File.dirname($0)
to add the current scriptfile's folder to the $LOAD_PATH so you can require
files relative to the scriptfile.
* introduced to expose configuration options:
- ruby.engine: the RubyEngine to use for evaluating Ruby inside Java
- ruby.initializers: initialization code for ajm.ruby
- ruby.loadpath: additional paths to include on the $LOAD_PATH
* Renamed some variables and methods to be follow standard Ruby naming
- $MaxObject renamed to $max_object
- setLocal() and getLocal() renamed to set_local() and get_local()
The old names are still available for backward compatibility, but they are
now deprecated and will be removed at some point in the future.
* Ruby symbols are converted to Max Strings without a coercion warning
* Fixed a bug outputting arrays with 3 or more levels of nesting
* Experimental support for Sun's Ruby Engine (JSR 223)
Switch the ruby.engine setting in to try it
* JRuby upgraded to version 1.1.5
Note: a bug in this version of JRuby prevented local variable definitions
from being rememebered across separate messages to ajm.ruby. I patched
jruby.jar to fix this, however, in general it is dangerous using local
variables to remember state as explained in the "variable scope
limitations" section of the help file.
* The following gems are included by default:
- midilib
- treetop
- osc
- drp
- smf
Changes to [ajm.busymap]
* attributes to control appearance
@width, @height
@orientation, @ledposition, @reverse
* @pollrate
* exposed the multislider, led, and metro to an inlet
* multislider and led now ignore clicks
* Version 0.8.1 *
Changes to [ajm.ruby]
* varargs support fixed for puts(), print(), and error()
(previously reported as fixed in 0.8, oops!)
* @scriptfile and '@evaloutlet -1' avoid unnecessary conversion to Max Atoms
(prevents pointless "coerced to string" messages in the Max window)
* JRuby upgraded to version 1.1.2
* Version 0.8 *
Changes to [ajm.ruby]
* Upgraded to JRuby 1.1.1 from JRuby 1.1 RC1
Improved performance/memory usage and thousands of compatibility fixes.
See for more info.
* Added scriptfile attribute - load a script from an external file
* The $0 variable will be set to the absolute path of the scriptfile, or nil
if no scriptfile is being used.
* ARGV and $* can be used to access any additonal arguments to scriptfile.
* Added context attribute - supports shared evaluator context between
any sequencer or ajm.ruby objects
* Improved message parsing behavior
- fixed a bug parsing Max symbols containing spaces
- the "text" message was added to better support textedit's one symbol
output mode: [route text] should no longer be used before ajm.ruby
* Improved search path behavior
- Ruby search path now includes any folder on Max's search path.
The search order is:
(1) the java/lib/ruby directory structure (standard libraries)
(2) Max's search path (see Options -> File Preferences)
- Any file on the search path can be loaded/required by filename instead
of the full path.
* Gems can now be loaded. But first they must be installed via a seperate
JRuby installation. See the NOTES section of the README for more info.
* Initialization of the ruby evaluator is deferred until the first script is
evaluated. This speeds up loading of patches with many ruby objects, but
there will be a slight delay when the first script evaluates.
* Added an autoinit attribute - use this to force initialization of the ruby
evaluator when the patch loads, eating the cost of initialization up front.
* Max lists sent to the inlet of [ajm.ruby] call a list() method that takes a
single array as an argument: def list(array) ...
The default implementation passes through the list. Redefine as desired.
* The list() behavior can be disabled by setting @listproc false
* Added methods out0(*params), out1, ..., out9
as shortcuts for outlet(0, *params), etc
* When nested arrays and hashes are coerced to Strings, the String should
be an accurate representation of the datastructure (i.e. you can pass it
to another ajm.ruby and it should evaluate correctly).
* Unnecessary conversions to Atom types are now avoided when evaloutlet < 0
* Long values outside the 32-bit integer range (-2147483648 to 2147483647)
are now coerced to a String when outputting to Max to avoid wraparound.
* The context_destroyed() method is called when the last object in the context
is deleted or a new scriptfile is loaded (which resets the context). This
callback method should be used to do any needed cleanup, such as stopping a
background process like a webserver.
Changes to sequencing objects
* Empty sequences now output " " (a single space) instead of
"" (empty string). This makes the object more usable with pattr.
Pattr does not output anything when it is set to "" (empty string), which
had prevented loading presets with empty sequences.
* The sequencing syntax now supports embedded Ruby code snippets.
ajm.eval and the sequencing objects will evaluate ruby code contained in
{curly braces}. Ruby that evaluates to an array will be treated as a chord.
(This feature is in addition to the ruby and rubyseq commands supported
by the sequencing objects.)
* added context attribute - supports shared Ruby evaluator context between
the sequencer objects and/or ajm.ruby objects
The @autoinit and @verbose attributes from ajm.ruby are now available in
the sequencing objects.
* ajm.rseq used to output the current beat index from the second outlet. This
has been changed to use the current sequenced item index, which is
consistent with the way ajm.seq works. If you need to know the current beat
index, try using a [counter] object.
* ajm.rseq recognizes the special tokens INF and -INF as infinity and negative
infinity. After either of these symbols is encountered, ajm.rseq will not
output anything else until the index is set to an non infinite value.
ajm.rseq2seq distinguishes between INF and -INF by only passing through INF
as a bang. -INF represents a rest like any other negative number.
* The sequencing objects now support the message "text". This is intended for
connecting textedit in "output as one symbol" mode directly to ajm.seq/rseq.
This way, special Max characters (commas, double quotes, semicolons,
backslash) do not need to be escaped so inputting Ruby code snippets is
* The ajm.SQ16 sequencer is obsolete and no longer packaged with these
objects. A newer sequencing application will be released separately.
Changes to [ajm.psui] (pattrstorage UI)
* Supports decoupled queuing (manage your queue somewhere else in the patch):
- psui outputs the queue out the 3rd outlet
- setq message sets the queueu
- updated help file shows an example of usage with the pattr system
Source Code Changes
I continually refactor my code as part of ongoing maintenance. The package
structure of my java objects has changed and should makes more sense now.
In some cases internal Class interfaces have changed, mostly related to Ruby
Jump to Line
Something went wrong with that request. Please try again.