function MonoSynth() {
    var _this;
    monosynth_classCallCheck(this, MonoSynth);
    _this = _super.call(this);
    _this.oscillator = new oscillator();
    _this.env = new envelope(); 
    _this.env.setRange(1, 0);
    _this.env.setExp(true);

    _this.setADSR(0.02, 0.25, 0.05, 0.35);

    _this.oscillator.disconnect();
    _this.oscillator.connect(_this.output);
    _this.env.disconnect();
    _this.env.setInput(_this.output.gain);

    _this.oscillator.output.gain.value = 1.0;
    _this.oscillator.start();
    _this.connect();
    main.soundArray.push(monosynth_assertThisInitialized(_this));

    /**
     * Getters and Setters
     * @property {Number} attack
     * @for p5.MonoSynth
     */
    /**
     * Allows user to set the decay time of the envelope (ADSR) of the MonoSynth class.
     * It is a getter and setter that can be used to retrieve or change the decay time.
     * Used in conjunction with the attack, sustain, and release fields/functions to set the full envelope of the synthesizer.
     * @property {Number} decay
     * @for p5.MonoSynth
     */
    /**
     * Allows the user to retrieve and adjust the sustain level of the envelope,
     * which controls the level at which the sound is sustained during the sustain phase of the envelope.
     * The default sustain level is set to 0.15.
     * @property {Number} sustain
     * @for p5.MonoSynth
     */
    /**
     * Allows the user to access and change the release time of the envelope.
     * @property {Number} release
     * @for p5.MonoSynth
     */
    Object.defineProperties(monosynth_assertThisInitialized(_this), {
      attack: {
        get: function get() {
          return this.env.aTime;
        },
        set: function set(attack) {
          this.env.setADSR(attack, this.env.dTime, this.env.sPercent, this.env.rTime);
        }
      },
      decay: {
        get: function get() {
          return this.env.dTime;
        },
        set: function set(decay) {
          this.env.setADSR(this.env.aTime, decay, this.env.sPercent, this.env.rTime);
        }
      },
      sustain: {
        get: function get() {
          return this.env.sPercent;
        },
        set: function set(sustain) {
          this.env.setADSR(this.env.aTime, this.env.dTime, sustain, this.env.rTime);
        }
      },
      release: {
        get: function get() {
          return this.env.rTime;
        },
        set: function set(release) {
          this.env.setADSR(this.env.aTime, this.env.dTime, this.env.sPercent, release);
        }
      }
    });
    return _this;
  }
A MonoSynth is used as a single voice for sound synthesis.
 This is a class to be used in conjunction with the PolySynth
 class. Custom synthetisers should be built inheriting from
 this class.

 @class p5.MonoSynth
 @constructor
 @example
 <div><code>
 let monoSynth;

 function setup() {
   let cnv = createCanvas(100, 100);
   cnv.mousePressed(playSynth);
   background(220);
   textAlign(CENTER);
   text('tap to play', width/2, height/2);

   monoSynth = new p5.MonoSynth();
 }

 function playSynth() {
   userStartAudio();

   let note = random(['Fb4', 'G4']);
   // note velocity (volume, from 0 to 1)
   let velocity = random();
   // time from now (in seconds)
   let time = 0;
   // note duration (in seconds)
   let dur = 1/6;

   monoSynth.play(note, velocity, time, dur);
 }
 </code></div>