1.0.3 • Published 5 years ago

akai-mpd218 v1.0.3

Weekly downloads
4
License
ISC
Repository
github
Last release
5 years ago

akai-mpd218

AKAI controller

This is a forked version of Makio135 WEB MIDI interface for Akai's MPD218 Controller and adapted for Akai's MPD218 controller

MPD218 features

 Disposition of controllers:
    K1  K2      PAD13  PAD14  PAD15  PAD16
    K3  K4      PAD9   PAD10  PAD11  PAD12
    K5  K6      PAD5   PAD6   PAD7   PAD8
                PAD1   PAD2   PAD3   PAD4
                
On PROG 1:
==========
Pads PAD1 -> PAD16: {
    command: 137 'note off' / 153 'note on',
    pad bank 1: 36 -> 51,
    pad bank 2: 52 -> 67,
    pad bank 3: 68 -> 83,
    velocity: 0 -> 127
}
Sliders K1 -> K6: {
    command: 176 'continuous controller',
       (bank1) (bank2) (bank3)
    K1:   3   :  16   :  22 
    K2:   9   :  17   :  27
    K3:   12  :  18   :  28
    K4:   13  :  19   :  29
    ....
    velocity: 0 -> 127
}

Inherited documentation

akai-lpd8 is an npm package for using Web MIDI with such a MIDI controller offering a simple interface to access each pads and knobs:

npm i akai-lpd8
const AkaiMPD218 = require('akai-mpd218')
// or include <script src="https://unpkg.com/akai-lpd8@1.0.1/"></script>

const MPD218 = new AkaiMPD218()

MPD218.init()
    .then(() => {
        console.log(MPD218)
        MPD218.K1.on('change', vel => console.log({vel}))
        MPD218.PAD5.noteOn(vel => console.log({vel}))
    })
    .catch(error => console.error({ error }))

Optionally, you can pass an object with a log property to get logs in the console

const MPD218 = new AkaiMPD218({log: true})

Once initialized, we can access our controls using their names:

console.log(MPD218.K1.type, MPD218.K2.command)
background(MPD218.K3.velocity, MPD218.PAD1.velocity, MPD218.PAD2.velocity)

And use events:

MPD218.K4.on('change', velocity => console.log(velocity))

Events callback are passed velocity as argument.

Valid events are:

  • change: fired when a control sends a new message. (for all controls)
  • noteOn: fired when a pad fires a noteOn message. (for pads only)
  • noteOff: fired when a pad fires a noteOff message. (for pads only)

You can also use shorthands:

MPD218.K5.change(velocity => console.log(velocity))
MPD218.PAD3.noteOn(velocity => console.log(velocity))
MPD218.PAD4.noteOff(velocity => console.log(velocity))

noteOn and noteOff methods are only available for pads.

Todo for use of multiple MPD218:

  • AkaiMPD218 class should extend MIDIInput
  • use of static method to find MPD218 devices
  • constructor could take a MIDIInput as argument