code: function(data, type, useLBR) {
          // Re-create the encoder if LBR mode has changed.
          if ((useLBR !== undefined) && (this.lbr !== useLBR)) {
              this.lbr = useLBR;
              this.encoder = new FskEncoder(this.rate, this.lbr);
          }
  
          var bufLen = Math.ceil(data.length * 8 * this.encoder.samplesPerBit());
          var modulatedData = new Float32Array(bufLen);
          if (type === undefined) {
              type = 16;
          }
  
          this.encoder.modulate(data, modulatedData); // writes outputFloatArray in-place
  
          if (type === 16) {
              var pcmData = new Int16Array(modulatedData.length);
              for (var i = 0; i < modulatedData.length; i++) {
                  // Map -1 .. 1 to -32767 .. 32768
                  pcmData[i] = Math.round((modulatedData[i]) * 32767);
              }
              return pcmData;
          } else {
              var pcmData = new Uint8Array(new ArrayBuffer(modulatedData.length * 2));
              for (var i = 0; i < modulatedData.length; i++) {
                  // Map -1 .. 1 to -32767 .. 32768
                  var sample = Math.round((modulatedData[i]) * 32767);
  
                  // Javascript doesn't really do two's compliment
                  if (sample < 0)
                      sample = (0xffff - ~sample);
  
                  pcmData[(i * 2) + 0] = Math.round(sample) & 0xff;
                  pcmData[(i * 2) + 1] = Math.round(sample >> 8) & 0xff;
              }
              return pcmData;
          }
      }
docs: Whether we can stop (usually we can)