Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/jazz-soft/jazz-midi-headless
MIDI for headless testing
https://github.com/jazz-soft/jazz-midi-headless
headless jsdom midi playwright puppeteer
Last synced: 3 months ago
JSON representation
MIDI for headless testing
- Host: GitHub
- URL: https://github.com/jazz-soft/jazz-midi-headless
- Owner: jazz-soft
- Created: 2021-04-03T05:50:33.000Z (over 3 years ago)
- Default Branch: main
- Last Pushed: 2024-03-24T01:01:53.000Z (9 months ago)
- Last Synced: 2024-05-02T05:04:48.452Z (8 months ago)
- Topics: headless, jsdom, midi, playwright, puppeteer
- Language: JavaScript
- Homepage:
- Size: 32.2 KB
- Stars: 3
- Watchers: 2
- Forks: 1
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- Funding: .github/FUNDING.yml
Awesome Lists containing this project
README
# jazz-midi-headless
MIDI for headless testing
[![npm](https://img.shields.io/npm/v/jazz-midi-headless.svg)](https://www.npmjs.com/package/jazz-midi-headless)
[![npm](https://img.shields.io/npm/dt/jazz-midi-headless.svg)](https://www.npmjs.com/package/jazz-midi-headless)
[![build](https://github.com/jazz-soft/jazz-midi-headless/actions/workflows/build.yml/badge.svg)](https://github.com/jazz-soft/jazz-midi-headless/actions)## Usage
`npm install jazz-midi-headless --save-dev`
### JSDOM
```js
const JZZ = require('jzz');
const JMH = require('jazz-midi-headless')(JZZ);
const JSDOM = require('jsdom').JSDOM;(async () => {
const dom = await JSDOM.fromFile('test.html', {
resources: 'usable',
runScripts: 'dangerously',
beforeParse: window => { JMH.enable(window); }
});
// ...
})();
```### Puppeteer
```js
const JZZ = require('jzz');
const JMH = require('jazz-midi-headless')(JZZ);
const puppeteer = require('puppeteer');(async () => {
const browser = await puppeteer.launch();
const page = await browser.newPage();
await JMH.enable(page);
await page.goto('test.html');
// ...
})();
```### Playwright
```js
const JZZ = require('jzz');
const JMH = require('jazz-midi-headless')(JZZ);
const playwright = require('playwright');(async () => {
for (const browserType of ['chromium', 'firefox', 'webkit']) {
const browser = await playwright[browserType].launch();
const context = await browser.newContext();
const page = await context.newPage();
await JMH.enable(page);
await page.goto('test.html');
// ...
}
})();
```## Virtual ports
Normally, **jazz-midi-headless** sees all regular MIDI ports available on your system
via the **JZZ** and **jazz-midi**.
You can create virtual MIDI ports and (optionally) hide the regular ones.### Using [JZZ](https://github.com/jazz-soft/JZZ) virtual ports:
```js
const JZZ = require('jzz');
const JMH = require('jazz-midi-headless')(JZZ);const virtual_midi_out = new JZZ.Widget();
JZZ.addMidiOut('VIRTUAL MIDI-Out', virtual_midi_out);
virtual_midi_out.connect(function(msg) { console.log('MIDI received: ' + msg); });const virtual_midi_in = new JZZ.Widget();
JZZ.addMidiIn('VIRTUAL MIDI-In', virtual_midi_in);JZZ({ engine: 'none' });
// ...
virtual_midi_in.noteOn(0, 'C#5', 127);
// ...
```### Using [web-midi-test](https://github.com/jazz-soft/web-midi-test) virtual ports:
```js
const JZZ = require('jzz');
const JMH = require('jazz-midi-headless')(JZZ);
const WMT = require('web-midi-test');const virtual_midi_out = new WMT.MidiDst('VIRTUAL MIDI-Out');
virtual_midi_out.connect();
virtual_midi_out.receive = function(msg) { console.log('MIDI received:', msg); };const virtual_midi_in = new WMT.MidiSrc('VIRTUAL MIDI-In');
virtual_midi_in.connect();global.navigator = WMT;
JZZ({ engine: 'webmidi' });
// ...
virtual_midi_in.emit([0x90, 0x61, 0x7f]);
// ...
```Please check the [**test**](https://github.com/jazz-soft/jazz-midi-headless/tree/main/test) directory for more examples.