JSyn Release Notes V2-12
New in V012 (release = 3/29, expiration = 11/15/99)
Code Breakers in JSyn V12
These changes may require you to make changes to your old JSyn source code
to get it to compile and run under JSyn V12.
- SynthCircuit now has its own "output" port. Do NOT declare a "SynthOutput
output" port in your circuits.
- Moved JSyn AWT related utilities to a package called "com.softsynth.jsyn.view".
- Moved generic JSyn utilities to a package called "com.softsynth.jsyn.util".
- Moved example JSyn circuits to a package called "com.softsynth.jsyn.circuits".
- Moved JSyn example programs to a package called "JSynExamples".
Because of these changes you may need to add some or all of the following
lines to the beginning of your program if you use classes from those packages.
New Features and Bug Fixes
- Added support for loading AIFF and WAV format samples. See the file "JSynExamples.TJ_Sample2"
for an example. Also see the documentation for classes SynthSampleAIFF
- Added PanUnit which pans a mono signal to two outputs based on the value
of the "pan" port.
- Added CrossFade which cross fades between two input based on the value
of the "fade" port.
- Added ForWayFade which is similar to CrossFade but fades between four sources.
- Added InterpolatingDelayUnit which cross delays a signal by a variable
amount based on the value of the "delay" port. Can be used for flangers,
tuneable physical models, etc.
- Fixed glitches on NT by detecting whether we are running under NT and making
the internal audio buffers bigger. See the PC Installation
Notes for information on how to adjust the buffer size.
- Added no-argument SynthTable constructor like SynthSample.
- Fixed bug that caused the clear() method for EnvelopePlayer queues to make
- Added complex example called "JSynExamples.PerformanceRack".
- Added several AWT related classes like com.softsynth.jsyn.view.XYController
that are used in PerformanceRack.
- Added LabelledFader that makes it easy to add scrollbars that control an
application level parameter.
- Fixed bug that sometimes caused queue() for SynthChannelData to recurse
- Added SynthDistributor which is used for fanning out signals inside a circuit.
See "com.softsynth.jsyn.circuits.RingModBell" for an example.
- Depracated the useTable() method. Please use setTable() instead.
- Units that modify a sound like Filter_1o1z and DelayUnit are now derived
from the SynthFilter class which has an "input" and "output" port.
- Oscillators like SineOscillator are now derived from the SynthOscillator
class which has a "frequency", "amplitude", "phase" and "output" port.
- Added setSignalType( SynthPort port ) which sets the signal type of one
port to match that of another.
New in V011 (release = 11/4/98, expiration = 1/15/99)
- Alpha release for Macintosh. Support MRJ VM as well as Metrowerks VMs.
- Added Filter_1o1p1z, Filter_2o2p, Filter_2o2p2z.
- Changed "COM.softsynth.jsyn" to "com.softsynth.jsyn" because SUN's package
naming convention changed! You must change your source code to match
the new naming convention. Sorry.
- Depracated "setAt( time, value )". You should now use "set( time, value
- Exported "phase" variable in oscillators. This is handy for starting an
LFO at a specific phase angle.
- Added "amplitude" port to BusReader unit. This makes it easier to build
mixers out of BusReaders and BusWriters.
- Fixed bug that caused set() to not clip values between allowable limits.
If you were setting a port to an illegal value, you may notice a change
- Fixed SynthOutput get() method which allows you to read the current value
of an output.
- Improved error handling in synthesis task.
- Use JNI native interface method on both PC and Macintosh. This should be
transparent to you.
New in V010 (release = 9/11/98, expiration = 11/15/98)
- Alpha release for Macintosh. (Expires = 10/15/98)
- Connecting to a port that is already connected no longer results in
an exception. The old connection is simply broken.
- Calling clear() for envelope or sample queues, followed by queuing new
data no longer causes a pop. The signal now smoothly transitions
from the last interpolated value associated with the queue.
- Added Schmidt Trigger unit, a comparator with hysteresis.
- Added SelectUnit which outputs one of its two inputs.
- Made significant changes to the internal communications between foreground
and background tasks. All communications are now atomic so that semaphores
are no longer required. This was necessitated by the lack of support for
multi-tasking on the Macintosh.
New in V009 (expiration = 9/15/98)
- Optimized float to integer conversion which sped up sampler and table oscillator
- Extended expiration deadline.
New in V008 (expiration = 6/15/98)
- Minor documentation improvements.
- Extended expiration deadline.
New in V007 (expiration 3/15/98)
- Added example SoundTester that provides a graphical interface with faders
for all of the input ports. See TJ_Wind.java for an example.
- AutoStop is now supported as a flag passed to the queue() method.
This allows a unit generator to be stopped when a certain segment of data
is finished playing.
- HarmonicTable class support generation of bandpass limited sawtooth and
- Internal API optimized by caching port indices in SynthPort objects.
- Low level synthesis optimized by using indexed data instead of pointers.
New in V006 (V6 was for internal release only.)
- Added ParabolicEnvelope for granular synthesis. See TJ_Grains.java.
- Added LatchUnit, CompareUnit unit
- Added get()method
that returns a port's current value.
- Added setMin(),
setMax(), getMin(), getMax() to SynthVariable for setting preferred
range for a port value. This can be used by a port browser.
See the example SoundTester class.
- Added getNumPorts(), getPortAt(), and findNamedPort() to SynthSound to allow browsing of a unit's or circuit's ports. See the example SoundTester
- Added example reverberation class called Reverb1.
- Added Filter_1o1p unit generator.
New in V005
- Fixed LowPass, BandPass, HighPass ports in SVFilter. They were incorrectly
declared internally as type INPUT instead of OUTPUT.
- Eliminated SynthApplet. Applets now call Synth.startEngine() directly.
- Added SynthAlert class for giving error messages.
- Remove annoying BetaWarning window that confused DirectSound.
- Created signed JAR file for automatic downloading and installation of JSyn
- Updated plugin expiration to 12/15/97.
- Put examples and docs on JSyn web site.
New in V004 (release = 8/8/97)
- Add SynthEnvelope class for multi-segment breakpoint style envelopes.
- AutoStop for envelopes and samples that stop unit when data runs out.
- Added DelayUnit for basic delay needs.
- Fixed bug that caused Usage to blow up for ExponentialLag.
- Optimised oscillators by approx 40%
- Return error string to Java for printing
- Object reference tracking and garbage collection.
- JSyn can now be called from an Applet under a Netscape browsers using a
- Added SynthCircuit class that contains multiple unit generators.
- Eliminate all references to startTogether()
- Renamed "Sample.Rate" port to "Rate".
- Renamed root "Engine" class to "Synth" class.
- Renamed "com.softsynth.jsyn" to "com.softsynth.jsyn" to better conform
with suggested naming convention.
- Synth.verbosity can be used to print trace information, eg. Synth.verbosity
- Eliminated Strings from API. Now each unit generator has its own
class with port objects.
- Change Frequency port for StateVariableFilter to type SIGNAL_TYPE_SVF_FREQ
so that it can be specified in Hertz.
- Removed Control rate capability because API is in flux.
New in V003 (release=7/25/97)
- New units: Math_MultiplyAddUnitUnsigned
- New SynthUnit methods: delete() and finalize()
- Beta warning dialog added.
- Fix disconnect bug for deferred deletion.
- Added frameRate parameter to Synth.start().
New in V002
- Event buffer that allows you to timestamp start(), stop(), and setPort()
- New units: Lag_Exponential, Bus_Write, Bus_Write
- Package name changed to "com.softsynth.jsyn".
- Samples class changed to SynthSample
- Added SynthBus class
- Added SynthUnit.setPriority() to control execution order.
- Added oscilloscope class called SynthScope