JMSL Tutorial: JSyn and JMSL, Controlling all input ports of a SynthNote, part 2

In the previous tutorial, we knew enough about our SynthNote to hand-code the MusicShape data, as we were assured that the "rate" port would be controlled by dimension 4.

Here we show how to generate a MusicShape algorithmically, without knowing the details of a SynthNote's DimensionNameSpace.  For our SynthNote, we will use FilteredSawtoothBL, which has three SynthInput ports: Rate, cutoff, and frequency.  For these ports, we will generate data by chosing a value randomly between the low and high limits for each.

The applet  below plays an algorithmically generated MusicShape with a SynthNoteAllPortsInstrument that uses FilteredSawtoothBL

The essential code follows:

    ins = new SynthNoteAllPortsInstrument(8, "com.softsynth.jsyn.circuits.FilteredSawtoothBL");

    double[] data = new double[myShape.dimension()];

    double duration = JMSLRandom.choose();
    double pitch = JMSLRandom.choose(40, 80);
    double amplitude = JMSLRandom.choose();
    double hold = duration * JMSLRandom.choose(2.0);

    data[0] = duration;
    data[1] = pitch;
    data[2] = amplitude;
    data[3] = hold;

    // TRICKY: we will choose random values for dimensions higher than 3 by using high/low limits
    for (int dim = 4; dim < myShape.dimension(); dim++) {
         double value = JMSLRandom.choose(myShape.getLowLimit(dim), myShape.getHighLimit(dim));
         data[dim] = value;


You need a Java-enabled browser to view this applet.

View complete source
Previous Tutorial Index Tutorial Contents Next

  (C) 1997 Phil Burk and Nick Didkovsky, All Rights Reserved
  JMSL is based upon HMSL (C) Phil Burk, Larry Polansky and David Rosenboom.