static buildNote(input, options= {}) {

    options.octaveOffset = parseInt(options.octaveOffset) || 0;

    // If it's already a Note, we're done
    if (input instanceof Note) return input;

    let number = this.guessNoteNumber(input, options.octaveOffset);

    if (number === false) { // We use a comparison b/c the note can be 0 (which equates to false)
      throw new TypeError(`The input could not be parsed as a note (${input})`);
    }

    // If we got here, we have a proper note number. Before creating the new note, we strip out
    // 'octaveOffset' because it has already been factored in when calling guessNoteNumber().
    options.octaveOffset = undefined;
    return new Note(number, options);

  }
Converts the `input` parameter to a valid [`Note`]{@link Note} object. The input usually is an
unsigned integer (0-127) or a note identifier (`"C4"`, `"G#5"`, etc.). If the input is a
[`Note`]{@link Note} object, it will be returned as is.

If the input is a note number or identifier, it is possible to specify options by providing the
`options` parameter.

@param [input] {number|string|Note}

@param {object} [options={}]

@param {number} [options.duration=Infinity] The number of milliseconds before the note should
be explicitly stopped.

@param {number} [options.attack=0.5] The note's attack velocity as a float between 0 and 1. If
you wish to use an integer between 0 and 127, use the `rawAttack` option instead. If both
`attack` and `rawAttack` are specified, the latter has precedence.

@param {number} [options.release=0.5] The note's release velocity as a float between 0 and 1. If
you wish to use an integer between 0 and 127, use the `rawRelease` option instead. If both
`release` and `rawRelease` are specified, the latter has precedence.

@param {number} [options.rawAttack=64] The note's attack velocity as an integer between 0 and
127. If you wish to use a float between 0 and 1, use the `release` option instead. If both
`attack` and `rawAttack` are specified, the latter has precedence.

@param {number} [options.rawRelease=64] The note's release velocity as an integer between 0 and
127. If you wish to use a float between 0 and 1, use the `release` option instead. If both
`release` and `rawRelease` are specified, the latter has precedence.

@param {number} [options.octaveOffset=0] An integer to offset the octave by. **This is only
used when the input value is a note identifier.**

@returns {Note}

@throws TypeError The input could not be parsed to a note

@since version 3.0.0
@static