@mkaradeniz/use-midi
v2.0.0
Published
React Hook for the 'Web MIDI API'.
Maintainers
Readme
useMidi
useMidi is a low-level custom React Hook to access the Web MIDI API. It provides access to incoming MIDIMessageEvents and helpers to request and observe the user's permission.
Installation
yarn add @mkaradeniz/use-midior
npm install @mkaradeniz/use-midiDemo
Usage
const [midiMessages, { isSupported, isRequested, isAllowed }, requestMidiAccess, midiAccess] = useMidi()API
Input
| Type | Default |
| --------- | ---------------------------------------------------------------------------------------------------- |
| Options | { automaticallyRequestPermission: false, debug: false, suppressActiveSensing: true, sysex: false } |
MidiMessage
| Property | Type | Description |
| ------------- | -------------------------- | ---------------------------------------------------------------------------------------------------------- |
| commandCode | number | Recieved command code. |
| note | number | undefined | If recieved, the given note. |
| timestamp | DOMHighResTimeStamp | High-resolution time of when the event was received. |
| rawEvent | WebMidi.MIDIMessageEvent | The raw WebMidi.MIDIMessageEvent. |
| velocity | number | undefined | If recieved, the given velocity. |
Options
| Option | Type | Description | Default |
| -------------------------------- | ------------------------------------ | --------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------- |
| automaticallyRequestPermission | boolean | If set to true, useMidi will automatically ask for the user's permission to access the MIDI devices, instead of waiting for the consumer to call requestAccess. | false |
| callback | (midiMessage: MidiMessage) => void | If provided, the callback will be called on every received MidiMessage. | undefined |
| messagesHistoryCount | number | midiMessages will always contain the last messagesHistoryCount elements. | 256 |
| debug | boolean | If set to true, useMidi will log every event to the console. | false |
| suppressActiveSensing | boolean | If set to true, useMidi will ignore the Active Sensing event. | true |
| sysex | boolean | If set to true, useMidi use the sysex option when requesting MIDI access. | false |
Returns
| Index | Variable | Type | Description | Default |
| ----- | --------------- | --------------- | ------------------------------------------------------------------------------------------ | ------------------------------------------------------------ |
| 0 | midiMessages | MidiMessage[] | An array of all MidiMessages, from oldest (index 0) to newest. | [] |
| 1 | status | Status | Object with all statuses. | {isAllowed: false, isRequested: False, isSupported: false} |
| 2 | requestAccess | () => void | Function to request the user's permission to access MIDI devices. | () => void |
| 3 | midiAccess | MIDIAccess | The MIDIAccess interface. | undefined |
Status
| Status | Type | Description | Default |
| ------------- | --------- | ------------------------------------------------------------------------------------------------- | ------- |
| isAllowed | boolean | Whether the user gave permission to access MIDI devices. | false |
| isRequested | boolean | Whether we requested the user to grant permission to access MIDI devices. | false |
| isSupported | boolean | Whether the Web MIDI API is supported by the browser. | false |
Development
This project is written in TypeScript and setup as a monorepo managed by Yarn-Workspaces & Lerna.
⚠️ Only release through yarn release in root. Do not npm publish individual packages.
