https://github.com/jazz-soft/web-midi-test
Fake Web MIDI API for testing Web MIDI applications
https://github.com/jazz-soft/web-midi-test
midi test web-midi web-midi-api webmidi webmidiapi
Last synced: 6 months ago
JSON representation
Fake Web MIDI API for testing Web MIDI applications
- Host: GitHub
- URL: https://github.com/jazz-soft/web-midi-test
- Owner: jazz-soft
- Created: 2019-05-13T05:15:58.000Z (almost 6 years ago)
- Default Branch: master
- Last Pushed: 2024-05-12T14:51:13.000Z (12 months ago)
- Last Synced: 2024-11-03T17:43:35.113Z (6 months ago)
- Topics: midi, test, web-midi, web-midi-api, webmidi, webmidiapi
- Language: JavaScript
- Homepage:
- Size: 72.3 KB
- Stars: 8
- Watchers: 2
- Forks: 1
- Open Issues: 3
-
Metadata Files:
- Readme: README.md
- Funding: .github/FUNDING.yml
Awesome Lists containing this project
README
# web-midi-test
[](https://www.npmjs.com/package/web-midi-test)
[](https://www.npmjs.com/package/web-midi-test)
[](https://github.com/jazz-soft/web-midi-test/actions)
[](https://coveralls.io/github/jazz-soft/web-midi-test?branch=master)
[](https://npm.runkit.com/web-midi-test)## Fake Web MIDI API for testing Web MIDI applications
See also: [**Web MIDI API**](https://webaudio.github.io/web-midi-api/)
See also: [**midi-test**](https://github.com/jazz-soft/midi-test),
[**jazz-midi-headless**](https://github.com/jazz-soft/jazz-midi-headless),
[**test-midi-files**](https://github.com/jazz-soft/test-midi-files)Install: `npm install web-midi-test --save-dev`
## Usage
#### Node.js```js
var WMT = require('web-midi-test');
navigator.requestMIDIAccess = WMT.requestMIDIAccess; // Node 22 and above, or
var navigator = { requestMIDIAccess: WMT.requestMIDIAccess }; // older versions
var performance = { now: WMT.now }; // if required...
// ...
```#### HTML
```html
// this will add an object named WMT into the global scope
// ...
if (typeof navigator.requestMIDIAccess == 'undefined') {
navigator.requestMIDIAccess = WMT.requestMIDIAccess;
}
// ...
```#### TypeScript
`tsc myscript.ts --lib es2015,dom````ts
import * as WMT from 'web-midi-test';
// ...
```#### With [JSDOM](https://github.com/jazz-soft/web-midi-test/tree/master/demo-jsdom)
#### With [Zombie.js](https://github.com/jazz-soft/web-midi-test/tree/master/demo-zombie)
#### With [Puppeteer](https://github.com/jazz-soft/web-midi-test/tree/master/demo-puppeteer)
#### With [Playwright](https://github.com/jazz-soft/web-midi-test/tree/master/demo-playwright)## API
#### MIDI access```js
function onSuccess() { console.log('Success!'); }
function onFail() { console.log('Fail!'); }// normal scenario
WMT.requestMIDIAccess().then(onSuccess, onFail); // Success!
WMT.requestMIDIAccess({ sysex: true }).then(onSuccess, onFail); // Success!// no sysex permission scenario
WMT.sysex = false;
WMT.requestMIDIAccess().then(onSuccess, onFail); // Success!
WMT.requestMIDIAccess({ sysex: true }).then(onSuccess, onFail); // Fail!// no midi permission scenario
WMT.midi = false;
WMT.requestMIDIAccess().then(onSuccess, onFail); // Fail!
```#### MIDI Source (Virtual MIDI-In)
```js
var port = new WMT.MidiSrc('VIRTUAL MIDI-In');
port.connect();
port.emit([0x90, 0x40, 0x7f]);
//...
port.busy = true; // "another application" captured the port
// Web MIDI can see the port, but can not connect to it
port.busy = false; // "another application" released the port
//...
port.disconnect();
```#### MIDI Destination (Virtual MIDI-Out)
```js
var port = new WMT.MidiDst('VIRTUAL MIDI-Out');
port.receive = function(msg) { console.log('received:', msg); };
port.connect();
//...
port.busy = true; // "another application" captured the port
// Web MIDI can see the port, but can not connect to it
port.busy = false; // "another application" released the port
//...
port.disconnect();
```## Thanks for your support!
[](https://github.com/jazz-soft/web-midi-test/stargazers)