waveform() {
    var mode;
    var normalArray = new Array();

    for (var i = 0; i < arguments.length; i++) {
      if (typeof arguments[i] === 'number') {
        this.bins = arguments[i];
      }
      if (typeof arguments[i] === 'string') {
        mode = arguments[i];
      }
    }

    // getFloatFrequencyData doesnt work in Safari as of 5/2015
    if (mode && !p5.prototype._isSafari()) {
      timeToFloat(this, this.timeDomain);
      this.analyser.getFloatTimeDomainData(this.timeDomain);
      return this.timeDomain;
    } else {
      timeToInt(this, this.timeDomain);
      this.analyser.getByteTimeDomainData(this.timeDomain);
      for (var j = 0; j < this.timeDomain.length; j++) {
        var scaled = p5.prototype.map(this.timeDomain[j], 0, 255, -1, 1);
        normalArray.push(scaled);
      }
      return normalArray;
    }
  }
Returns an array of amplitude values (between -1.0 and +1.0) that represent
 a snapshot of amplitude readings in a single buffer. Length will be
 equal to bins (defaults to 1024). Can be used to draw the waveform
 of a sound.

 @method waveform
 @for p5.FFT
 @param {Number} [bins]    Must be a power of two between
                           16 and 1024. Defaults to 1024.
 @param {String} [precision] If any value is provided, will return results
                             in a Float32 Array which is more precise
                             than a regular array.
 @return {Array}  Array    Array of amplitude values (-1 to 1)
                           over time. Array length = bins.