djipco / webmidi

Tame the Web MIDI API. Send and receive MIDI messages with ease. Control instruments with user-friendly functions (playNote, sendPitchBend, etc.). React to MIDI input with simple event listeners (noteon, pitchbend, controlchange, etc.).

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

channel is missing from control-change

elmcapp opened this issue · comments

In older version we could get the the channel (e.channel) In current version I can not get the channel

{
  port: Input {
    eventMap: {},
    eventsSuspended: false,
    _midiInput: MIDIInput {
      type: 'input',
      id: 'IAC Driver Bus 1',
      name: 'IAC Driver Bus 1',
      manufacturer: 'Apple Inc.',
      version: '0.0',
      state: [Getter],
      connection: [Getter],
      onmidimessage: [Getter/Setter],
      onstatechange: [Getter/Setter],
      open: [Function (anonymous)],
      close: [Function (anonymous)]
    },
    _octaveOffset: 0,
    channels: [
      <1 empty item>, [InputChannel],
      [InputChannel], [InputChannel],
      [InputChannel], [InputChannel],
      [InputChannel], [InputChannel],
      [InputChannel], [InputChannel],
      [InputChannel], [InputChannel],
      [InputChannel], [InputChannel],
      [InputChannel], [InputChannel],
      [InputChannel]
    ],
    _forwarders: []
  },
  target: InputChannel {
    eventMap: {
      noteon: [Array],
      noteoff: [Array],
      controlchange: [Array],
      programchange: [Array]
    },
    eventsSuspended: false,
    _input: Input {
      eventMap: {},
      eventsSuspended: false,
      _midiInput: [MIDIInput],
      _octaveOffset: 0,
      channels: [Array],
      _forwarders: []
    },
    _number: 1,
    _octaveOffset: 0,
    _nrpnBuffer: [],
    _rpnBuffer: [],
    parameterNumberEventsEnabled: true,
    notesState: [
      false, false, false, false, false, false, false, false,
      false, false, false, false, false, false, false, false,
      false, false, false, false, false, false, false, false,
      false, false, false, false, false, false, false, false,
      false, false, false, false, false, false, false, false,
      false, false, false, false, false, false, false, false,
      false, false, false, false, false, false, false, false,
      false, false, false, false, false, false, false, false,
      false, false, false, false, false, false, false, false,
      false, false, false, false, false, false, false, false,
      false, false, false, false, false, false, false, false,
      false, false, false, false, false, false, false, false,
      false, false, false, false,
      ... 28 more items
    ]
  },
  message: Message {
    rawData: Uint8Array(3) [ 176, 90, 64 ],
    data: [ 176, 90, 64 ],
    statusByte: 176,
    rawDataBytes: Uint8Array(2) [ 90, 64 ],
    dataBytes: [ 90, 64 ],
    isChannelMessage: true,
    isSystemMessage: false,
    command: 11,
    channel: 1,
    manufacturerId: undefined,
    type: 'controlchange'
  },
  timestamp: 26005.28849899769,
  type: 'controlchange',
  data: [ 176, 90, 64 ],
  rawData: [ 176, 90, 64 ],
  statusByte: 176,
  dataBytes: [ 90, 64 ],
  controller: { number: 90, name: 'controller90' },
  subtype: 'controller90',
  value: 0.5039370078740157,
  rawValue: 64
}

This is one of the main differences between v2 and v3. In v3, channels now have their own object (InputChannel or OutputChannel). Therefore, to retrieve the channel, you must first retrieve the channel object using the target property of the event and from there you can get the channel number:

WebMidi.inputs[0].addListener("controlchange", e => {
    console.log(e.target.number);
});

By the way, the channel number is also available in the new message property of the event by using: e.message.channel.