jMax jMax Release Notes



Release notes for jMax 2.5.1

Platforms

This release contains a first port to Mac OS X:

On Linux, FTS has a watchdog that prevents FTS from locking the CPU.

Audio and MIDI configuration

After the classes alsaaudioport and ossaudioport for the audio configuration a class alsarawmidiport was introduced for the MIDI configuartion on the ALSA/Linux platform.

User interface

The DSP calculation can be switched on an of by the keyboard short cut Control/SpaceBar.

In the case of a jMax server fault an error message is written to a log file. A short messsage indicating the log file is printed to the console window. The error window has been removed.

Object set

The classes clock and at of the ISPW packages where removed. It is no more possible to give a clock as first argument of the timing objects such as metro or delay as it was before.

The object at dsp_msec 0, or at dsp_tick 0, which is used in some patches in order to obtain a trigger at the instant of the DSP calculation being switched on must be replaced by an object dsp connected to an object select 1 or sel 1.

In the signal package the classes play~ and rec~ where added (see the help patches).

Two new objects have been introduced to the toolbar: an oscilloscope and an object to display numerical values or vectors of values in a scrolling display.

The object writesf~ has been fixed.

API changes

The API for clocks (fts_clock_t) alarms (fts_alarm_t) and (fts_timer_t) timers has changed. Only the deprecated alarm functions as fts_alarm_arm() (removed) are emulated by a set of macros.

The API of the DSP subsystem has changed. Deprecated functions as dsp_sig_inlet() (now fts_dsp_declare_inlet()) are emulated by a set of macros.

The function fts_get_time() (sched.h) was introduced to obtain the FTS system time (in msecs).

The hashtables have been reimplemented (see hashtable.h). The hashtable API has changed.

Three modules have been added to the doxygen generated API documentation (see doc/api/html/index.html):

The scheduler API has changed (see sched.h).

Bug fixes

A major bug for DSP objects with multiple outlets (all outlets had the same signal) is fixed.

The classes ==, !=, etc. can be instantiated without double-quotes. The problems with decimal points and commas for some non-english Linux/Java installations are fixed.



Release notes for jMax 2.5.0

Java 2

jMax is now fully Java 2 compliant: to run or compile it, you must use a Java 2 virtual machine (recommended are IBM, Sun or Blackdown JDK 1.3 or higher).

Makefiles

The Makefiles have changed in order to be simpler for developing objects.

A typical Makefile for a package is:

JMAXDISTDIR= ../../..
PACKAGEROOT = ..
MORESOLIBS=-lasound
PACKAGELIB=$(LIBDIR)/libalsa.so

include $(JMAXDISTDIR)/Makefiles/Makefile.package

Include files

The include files tree has been changed, in order to be able to compile a package inside or outside the jMax source tree. Now, an object must do:

#include <fts/fts.h>

Audio and MIDI ports

Audio and MIDI I/O are now handled by "port" objects. These classes are documented by their help patches that you can find in the summary of their respective packages (oss, alsa, sgi, midi).

Corresponding Tcl commands have been added to set the default audio and MIDI port. These commands are defaultAudio and defaultMidi and are documented in Configuration documentation.

Font appearance and rescaling of the patcher window

Since the available Java environments have different scalings for certain fonts, patches created with former version of jMax or different environments might appear scrambled in the patcher window. In order to reproduce the original appearance of the patchers on the used platform, jMax allows to set a scaling factor in the system setup (.jmaxrc) via TCL commands:
setGraphicScaling <x factor> <y factor>

The size of all patchers (position and size of the objects and the patcher windows) will be multiplied by the given factors. The scaling is applied to the graphical appearance only and doesn't affect the actual parameters stored in the file.

The reference Java platform is the IBM 1.3. All system and help patches are created with this environment. Please adjust the scaling factors for your platform until the help patches appear correct on your system.

In order to adjust the appearance of older patches, jMax provides a rescaling functionality which is accessible via the dialog "Rescale Window" in the "Edit" menu. The given factors are applied to the current window. In this case the graphical parameters of all objects are actually changed (and will be saved with the file).

(Note that the "Rescaling Window" function is applied in addition to the global scaling factors given in the system setup.)

Control Panel

The control panel has been simplified and attached to the console window. Nevertheless is can be detached from it by dragging the handle at its left border out of the window. This way the control panel will appear as a separate window. Closing the control panel window or dragging it back to its original position will re-attach it to the console window.

Signal connections

All jMax signal object now accepts and adds multiple connections to their inlets. The output of the connected objects is added before being fed to a given inlet.

Active signal connections (DSP on) are appearing as a zigzag line.

(Note that it was always possible to connect multiple signal outlets to an inlet. In former versions of jMax only one of multiple signal output to the same inlet was taken into account.)

Labels

The set of basic classes of jMax has been modified and extended. In general you should have a look to the updated summary and help patches.

The inlet and outlet class has been merged with the functionalities of the former send and receive objects. Inlet and Receive as well as outlet and send share the same graphical appearance.

The objects (see in the tool-bar) represent a new system feature called "labels". Numbered labels refer to the inlets and outlets of the current patcher. Named labels can be either undefined - in which case they have a global scope - or defined. Labels are defined as variables using the "label" class. The usual rules for variable scopes (variables of a name starting with a capital letter are global) apply as well to label.

(Note that the former send and receive are deprecated but for now work exactly as the label classes.)

See the help summary of the system package.

Messages

The ISPW message box object (2nd in the object palette of the tool bar in the patcher window) doesn't share the same syntax as the other objects and will be hopefully soon replaced by a more powerful class.

In order to provide the possibility to express at least a single message or constant (or list) using all syntactical possibilities of jMax' constant expressions as the other objects (functions, variables, symbol concatenation) a class was added to the palette (3rd position). Please refer to its help patch.

Display

A simple display class was added to jMax which can display any message, various data and signals in text form. The object resizes automatically in order to display its input as a single line of text.

Messages and control data are displayed with a limited rate corresponding to a given display period (not yet variable). Signals are displayed as their maximal absolute value over this period.

Busses

This version of jMax implements busses for Messages and control data as well as for signals. While connections via labels are static the source as well as the target of a connection via an bus is variable and can be changed at run time via an extra inlet of the throw or catch object.

Please refer to the help patches of the objects bus (with throw and catch) and bus~ (with throw~ and catch~). (Note that signal busses systematically introduce a delay of one jMax scheduler tick = / , typically: 64 / 44100 = 1.49 msec.)

Signal Package

The new signal package replaces successively the old ISPW signal classes by a new set of classes. These classes use the variable mechanism and reference data types (fvec) of jMax. The package is not complete yet.

Please refer to the summary and help patches of the signal package.

Fonts

jMax' font sizes have from now on symbolic names (normal, small, large, ...). It provides from now on two system fonts of variable and fixed size.

The rich set of platform dependent Java fonts and sizes stays accessible via separate menus.

We hope this way to provide a better compatibility between different Java platforms and releases.

Documentation updates

Documentation has been updated to reflect changes. See Documentation index for further information and in particular the doc of the Console and Patcher Window.

jMax tutorials

Thanks to Fabrice Medio and Norbert Schnell, a jMax tutorial is under development. It is currently available via cvs:

cvs -d :pserver:anonymous@cvs.ircam.fr:/jmax login
<type "cvs" as password>
cvs checkout jmax-tutorial



Release notes for jMax 2.4.16

Features

In this release, the MIDI objects are temporarily non-available on the Linux platform, because of a re-implementation in progress.

new MidiShare connection, via a midishareport object

Hammerfall ALSA 0.6.x device:
Note: it must be compiled by hand (in packages/alsa0.6dev) and added to the .jmaxrc (package require alsa0.6dev)

key object



Release notes for jMax 2.4.15

In this release, the MIDI objects are temporarily non-available on the Linux platform, because of a re-implementation in progress.

Features

new udpsend and udpreceive objects (see Help->I/O summary)



Release notes for jMax 2.4.14

In this release, the MIDI objects are temporarily non-available on the Linux platform, because of a re-implementation in progress.

Features

Automatic selection of isolated processor (SGI platform)

On SGI platform, the default behavior is that FTS automatically runs on an isolated processor if there is one processor that is isolated, thus taking advantage of multi-processors machines for better audio latency.

In order to be able to select by hand the processor on which FTS will run, the option --cpu=N has been added to FTS, where N is the selected processor numbered starting at 0. This option is only meaningful on SGI platform.

The jMax property jmaxServerOptions is used to pass options to FTS; this property can be set:

To find what is an isolated processor and how to isolate a processor, check the mpadmin man page. The better latency will be obtained when the processor is both isolated and non-preemptive. Isolating a processor requires a multi-processor system (Origin or Octane with 2 processors at least).

Re-implementation of the direct-to-disk objects (readsf~)

Because of problems on SGI platform related to bad interaction between threads and isolated processor, the readsf~ has been re-implemented using a separate server process for reading the sound files.

The readsf~ object now has an extra outlet that bangs when the sound file is finished, allowing to play a file in loop or build a play list.

The readsf~ has a slightly different behavior as before: the open message and the play message can be send in the same tick without causing clicks and error messages. The readsf~ object will start playing the file as soon as the server process has opened the file and preloaded the first blocks. This gives usually a delay that is below 20 milliseconds. To get really a precise start time, a delay can be inserted between sending the open message and the play message.



Release notes for jMax 2.4.12

Platforms

The following platforms are supported:

Bugs

The following bug was partially fixed:

For a complete list of fixed and remaining bugs, please refer to the IRCAM's bug tracking system.

Features

Save in .pat format

For better MAX/MSP compatibility, jMax can now save in .pat format. To use it, select "Save as" menu item, and in the file open box, change "Format" to ".pat".

Attention!!! This is first release of .pat save format. It has not been fully debugged.

MIDI file reading

A MIDI file reading library has been added, based on the code of Tim Thompson.

Changes in kernel

The protocol is now binary in both directions, with a symbol cache on each side of the connection.

ALSA devices

jMax now uses the 0.5.x version of ALSA.

A ALSA raw MIDI device has been added. It is named alsaMidi and requires the package alsadev ("package require alsadev").

Objects

Thanks to Winfried Ritsch, the "serial" object is back (in the io package). It has been changed to take advantage of the scheduler single select() call.

There is a new graphical object in the tool-bar (called "fork"), which changes it's number of outlets when ones drags it on the right border. It repeats it's input from all outlets in right to left order (replaces "trigger t t t t t ..." and "bangbang").

Notes

Building rpms or SGI packages

Building rpms and SGI packages is now moved to scripts in ./utils/rpm/buildrpm and ./utils/sgi/buildpkg. These scripts are quite self explanatory.

New objects

A "for" object is new in the control package.

An object "vec" - a vector of generic values (atoms) - completes the first set in the data package.

In a new package called sequence lives an undocumented early beta version of a sequence object...

syspackages

Directory syspackages/ has disappeared. All packages (including devices) are now in packages/



Release notes for jMax 2.4.11

Platforms

The following platforms are supported:

Bugs

The following bugs were fixed:

For a complete list of fixed and remaining bugs, please refer to the IRCAM's bug tracking system.

Features

The various Tcl open commands now accept arguments that can be used to specify device parameters values. The affected commands are:

The parameters that are passed as the last argument (a list inside "") are passed to the device open function. The arguments that are accepted are device-dependent.

Example of use:

openDefaultAudioIn stereoIn "device /dev/dsp8"
openDefaultAudioOut stereoOut "channels 8"
openDefaultMidi midi "device /dev/midi01"
openDefaultAudioOut prof_dac "profile_interval 1000"

The Linux OSS MIDI device now accept a "mode" argument that is passed to the open() system call in order to be able to specify the file read/write mode of the device for device that can be opened in only one direction. This argument can be passed when opening the device with the opendMidi or openDefaultMidi Tcl commands. This argument can have the following value:

Example of use:

openDefaultMidi midi "mode w"


Release notes for jMax 2.4.10

Platforms

The following platforms are supported:

Bugs

Among others the following bugs were fixed:

Please note that a number of problems with classes handling soundfiles (readsf~, writesf~, table~, ... crashing the server) were caused by bogus (or incompatible?) versions of the libaudiofile library required by jMax. Make sure that you are using a recent version of the library.

For a complete list of fixed and remaining bugs, please refer to the IRCAM's bug tracking system.

Features

Linux-PPC

This release is supported on Linux-PPC and have been tested with native audio under OSS. Please note that sound files access using the audiofile library has not been fully tested, in particular in the direct-to-disk objects.

Patcher editor

The following features have been added to the patcher editor:




Release notes for jMax 2.4.5

This release introduces significant changes in the FTS kernel, in the user interface, in the development API and in the license...

Status

This release is considered stable.

Supported platforms

The following platforms are supported:

Fixed bugs

For a complete list of fixed and remaining bugs, please refer to the Ircam bug tracking system, at the following URL: http://www.ircam.fr/bugs/

Some older bugs have been replaced by newer ones, others have been kept.

New features

Patcher editor

The patch editor of version 2.4.x is a new implementation of the existing patch editor. It introduces bug fixes, improvements in the user interface (text handling, feedback, updates, ...) and new functionalities (icons for objects or comments, ...).

Multi-threaded kernel

The FTS server kernel is now multi-threaded. The kernel threads are for now used only by the new implementation of the direct-to-disk objects. Others uses are in development.

Scheduler

The FTS server kernel incorporates a new scheduler that enables to add and remove dynamically file descriptors in the scheduler's select() system call. This is illustrated in the udp and udpmessage objects that read bytes on a UDP port. See the sources of the object for further explanations.

Object development API

This release includes the object development API and documentation. Please refer to the Control Objects Developer's Guide for documentation.

A package named "sources" with objects source code is given as an example and a starting point.

Direct-to-disk objects

The first use of the multi-threaded kernel is a new implementation of the direct-to-disk objects (readsf~ and writesf~). These objects are now implemented as wrappers of an FTS device that does the file access, all the file I/O being done in separate threads. This implementation guarantees that file accesses are non-blocking and that file reading/writing and samples conversion is done on a separate processor when running on a multi-processor machine.

NOTE: On the Linux platform, the direct-to-disk objects use the Audio File Library, by Michael Pruett. This library is available under the GNU Library General Public License. This library must be installed before using readsf~ and writesf~ objects. Please refer to http://www.68k.org./~michael/audiofile/ for information and download.



Release notes for jMax 2.3.15

Status

This release is considered:

Supported platforms

This release have been compiled on:

Fixed bugs

The following bugs have been fixed: This release implements a workaround for the following bug:

Floating-point exceptions tracking

Support has been added to track floating-point exceptions. When floating-point exceptions occur, you can open the "Fpe Panel" in "Tools" menu. This panel will show the objects that triggered these exceptions (either in control or in DSP computation). A supplementary option allows to track floating point NaN (Not a Number) in DSP computation.
Warning: This option is very time-consuming and can dramatically decrease performance.



Release notes for jMax 2.3.14

Supported platforms

This release have been compiled on:

Fixed bugs

The following bugs have been fixed:

New features

The following features have been added:

Known bugs

Printing a patch (via the "Print" menu) is broken (it generates a bitmap Postscript file that is not printable).



Release notes for jMax 2.3.13

Supported platform

This release have been compiled on:

Fixed bugs

The following bugs have been fixed:

New features

The following features have been added:

Release notes for jMax 2.3.12

Status

This release is qualified as beta; the system is quite stable, enough to be used in concert situation; the user interface still has some glitches and instability anyway.

Supported platform

This release have been compiled on: IRIX 6.2 will probably not be supported, as the AudioFile library on IRIX 6.2 lacks some features used by jMax. We suggest that you upgrade to IRIX 6.5.

Changes in I/O configuration

The I/O configuration commands have been simplified a little; old .jmaxrc files need to be changed; refer to the user configuration.

Changes in CLASSPATH setting

Swing classes are now distributed with jMax. It is no longer required to download Swing. Setting CLASSPATH is also no longer needed.

Known Problems and bugs

Main problems regards the patch editor; in particular, overlapped objects are not handled properly, and this produce bizarre situations when copy/pasting in a crowded patch.



Release notes for jMax 2.3.11

Status

This release is qualified as beta; the system is quite stable, enough to be used in concert situation; the user interface still has some glitches and instability anyway.

Supported platform

This release have been compiled on IRIX 6.5 for r10000 and r5000 processors.

Known Problems and bugs

Main problems regards the patch editor; in particular, overlapped objects are not handled properly, and this produce bizarre situations when copy/pasting in a crowded patch.