constructor(input, number) {

    super();

    /**
     * @type {Input}
     * @private
     */
    this._input = input;

    /**
     * @type {number}
     * @private
     */
    this._number = number;

    /**
     * @type {number}
     * @private
     */
    this._octaveOffset = 0;

    /**
     * An array of messages that form the current NRPN sequence
     * @private
     * @type {Message[]}
     */
    this._nrpnBuffer = [];

    /**
     * An array of messages that form the current RPN sequence
     * @private
     * @type {Message[]}
     */
    this._rpnBuffer = [];

    /**
     * Indicates whether events for **Registered Parameter Number** and **Non-Registered Parameter
     * Number** should be dispatched. RPNs and NRPNs are composed of a sequence of specific
     * **control change** messages. When a valid sequence of such control change messages is
     * received, an [`rpn`](#event-rpn) or [`nrpn`](#event-nrpn) event will fire.
     *
     * If an invalid or out-of-order **control change** message is received, it will fall through
     * the collector logic and all buffered **control change** messages will be discarded as
     * incomplete.
     *
     * @type {boolean}
     */
    this.parameterNumberEventsEnabled = true;

    /**
     * Contains the current playing state of all MIDI notes of this channel (0-127). The state is
     * `true` for a currently playing note and `false` otherwise.
     * @type {boolean[]}
     */
    this.notesState = new Array(128).fill(false);

  }
Creates an `InputChannel` object.

@param {Input} input The [`Input`](Input) object this channel belongs to.
@param {number} number The channel's MIDI number (1-16).