From c0f38e527a3a6b076d0a1edbf4a0a3b73efb2c02 Mon Sep 17 00:00:00 2001 From: Sema Date: Wed, 20 Sep 2023 23:28:24 -0400 Subject: [PATCH] Minor fixes and README.md --- README.md | 22 +++++++++++++++++++++- javascript/JZZ.js | 13 +++++++++---- 2 files changed, 30 insertions(+), 5 deletions(-) diff --git a/README.md b/README.md index b45ddd3..75f5727 100644 --- a/README.md +++ b/README.md @@ -40,7 +40,7 @@ or [**Apple App Store**](https://apps.apple.com/us/app/jazz-midi/id1506447231). - MIDI files - MPE - SMPTE -- UMP +- UMP (MIDI 2.0) - Additional modules ## Install @@ -202,6 +202,26 @@ JZZ.MIDI.midi(450); // => 69.38905773230853 JZZ.MIDI.midi('A5'); // => 69 ``` +## MIDI 2.0 + +`MIDI2()` is a sort of adapter that enables MIDI 2.0 in all subsequent chained calls. +`MIDI1()` returns the operation back to MIDI 1.0. +Note that connected MIDI nodes don't require any actions to receive and transfer MIDI 2.0 messages: + +```js +var first = JZZ.Widget(); +var second = JZZ.Widget(); +first.connect(second); +second.connect(function (msg) { console.log(msg.toString()); }); + +first + .send([0x90, 0x3c, 0x7f]) // 90 3c 7f -- Note On + .MIDI2() // enable MIDI 2.0 + .send([0x20, 0x90, 0x3c, 0x7f]) // 20903c7f -- Note On + .MIDI1() // reset to MIDI 1.0 + .send([0x90, 0x3c, 0x7f]) // 90 3c 7f -- Note On +``` + ## Additional modules - [**JZZ-midi-SMF**](https://github.com/jazz-soft/JZZ-midi-SMF) - Standard MIDI files: read / write / play - [**JZZ-midi-GM**](https://github.com/jazz-soft/JZZ-midi-GM) - General MIDI instrument names: MIDI to string / string to MIDI diff --git a/javascript/JZZ.js b/javascript/JZZ.js index 3b9869d..e8d7dd4 100644 --- a/javascript/JZZ.js +++ b/javascript/JZZ.js @@ -419,12 +419,15 @@ } return this._thenable(); }; - function _midi(msg) { return msg.isMidi2 ? new UMP(msg) : new MIDI(msg); } + function _midi(msg) { return msg.isMidi2 ? new UMP(msg) : MIDI.apply(null, arguments); } _M.prototype._emit = function(msg) { - var i; - for (i = 0; i < this._handles.length; i++) this._handles[i].apply(this, [MIDI(msg)._stamp(this)]); + var i, m; + for (i = 0; i < this._handles.length; i++) { + m = _midi(msg); + this._handles[i].apply(this, [m._stamp(this)]); + } for (i = 0; i < this._outs.length; i++) { - var m = _midi(msg); + m = _midi(msg); if (!m._stamped(this._outs[i])) this._outs[i].send(m._stamp(this)); } }; @@ -3348,6 +3351,8 @@ JZZ.UMP = UMP; _J.prototype.UMP = UMP; + JZZ.MIDI2 = UMP; + _J.prototype.MIDI2 = UMP; JZZ.lib = {}; JZZ.lib.now = _now;