JMSL Code Breakers

v1.01 Codebreakers
The following changes from 1.01beta to 1.01 may cause some applications to break.
Instrument was a class Instrument is now an interface
extends Instrument extends InstrumentAdapter (InstrumentAdapter is the same as old Instrument class)
interface BehaviorFunction interface Behavior
DefaultBehaviorFunction UniformRandomBehavior
interface PlayListener interface Playable
addStartListener(PlayListener p) addStartPlayable(Playable p)
addRepeatListener(PlayListener p) addRepeatPlayable(Playable p)
addStopListener(PlayListener p) addStopPlayable(Playable p)
removeAllStartListeners() removeAllStartPlayables()
removeAllRepeatListeners() removeAllRepeatPlayables()
removeAllStopListeners() removeAllStopPlayables() used to mean current clock time. JMSL.realTime() is current clock time. = realtime + timeadvance

v1.03 Codebreakers
The following changes from 1.01 to 1.03 may cause some applications to break.
Score.getTimeAdvance() and Score.setTimeAdvance() no longer exist Use JMSL.clock.getAdvance() and JMSL.clock.setAdvance()
 MidiListener did not handle SysEx, now it does. Classes which implement MidiListener must add a method with the following signature:
 public void handleSysEx(double timeStamp, byte[] data)
abstract class com.softsynth.jmsl.util.Tuning used to have the following integer methods:

 public abstract double getFrequency(double pitchIndex, int octaveNumber);

 public abstract double getFrequency(double pitchIndex);

New version has double pitchIndex arguments.  If your implementations require int, simply cast (int)pitchIndex in your code.
MusicShapeEditor now implements com.didkovsky.portview.PVPanel, so it is no longer a Component. It is an object whose getComponent() returns either a Swing or AWT compatible component, depending on JMSL.getViewFactory() . Therefore you can expect calls to myContainer.add(myMusicSapeEditor) to break use add(myMusicShapeEditor.getComponent()) instead
Dimension limits electively enforced by MusicShape set() now. Defaults to false (not enforced). This may cause some code to generate out of range values if your code was depending on bounds checking myMusicShape.setConstrainedToLimits(true) to restore old behavior